34 template <
typename FadType1,
typename FadType2>
35 bool checkFads(
const FadType1& x,
const FadType2& x2,
47 for (
int i=0; i<x.size(); ++i)
53 template <
typename FadType1,
typename FadType2>
63 success = success &&
checkFads(x.val(), x2.val(), out,
tol);
66 for (
int i=0; i<x.size(); ++i)
67 success = success &&
checkFads(x.dx(i), x2.dx(i), out,
tol);
72 template <
typename fadfadtype,
typename ordinal>
75 const ordinal num_cols,
76 const ordinal outer_fad_size,
77 const ordinal inner_fad_size,
81 typedef typename fadfadtype::value_type fadtype;
82 typedef typename fadtype::value_type scalar;
83 fadfadtype x(outer_fad_size, scalar(0.0));
84 fadtype y(inner_fad_size, scalar(0.0));
86 const scalar x_row = 1000.0 + scalar(num_rows) / scalar(row+1);
87 const scalar x_col = 100.0 + scalar(num_cols) / scalar(col+1);
88 y.val() = x_row + x_col;
89 for (ordinal j=0; j<inner_fad_size; ++j) {
90 const scalar y_fad = 1.0 + scalar(inner_fad_size) / scalar(j+1);
91 y.fastAccessDx(j) = x_row + x_col + y_fad;
94 for (ordinal i=0; i<outer_fad_size; ++i) {
95 const scalar x_fad = 10.0 + scalar(outer_fad_size) / scalar(i+1);
97 for (ordinal j=0; j<inner_fad_size; ++j) {
98 const scalar y_fad = 1.0 + scalar(inner_fad_size) / scalar(j+1);
99 y.fastAccessDx(j) = x_row + x_col + x_fad + y_fad;
101 x.fastAccessDx(i) = y;
112 Kokkos_View_FadFad, DeepCopy, FadFadType, Layout, Device )
114 typedef Kokkos::View<FadFadType**,Layout,Device> ViewType;
115 typedef typename ViewType::size_type size_type;
116 typedef typename ViewType::HostMirror host_view_type;
124 ViewType v1(
"view1", num_rows, num_cols, outer_fad_size+1);
125 host_view_type h_v1 = Kokkos::create_mirror_view(v1);
126 for (size_type i=0; i<num_rows; ++i)
127 for (size_type j=0; j<num_cols; ++j)
128 h_v1(i,j) = generate_nested_fad<FadFadType>(num_rows,
133 Kokkos::deep_copy(v1, h_v1);
136 ViewType v2(
"view2", num_rows, num_cols, outer_fad_size+1);
137 Kokkos::deep_copy(v2, v1);
140 host_view_type h_v2 = Kokkos::create_mirror_view(v2);
141 Kokkos::deep_copy(h_v2, v2);
145 for (size_type i=0; i<num_rows; ++i) {
146 for (size_type j=0; j<num_cols; ++j) {
147 FadFadType
f = generate_nested_fad<FadFadType>(num_rows,
157 #ifdef HAVE_SACADO_KOKKOSCONTAINERS
160 Kokkos_DynRankView_FadFad, DeepCopy, FadFadType, Layout, Device )
162 typedef Kokkos::DynRankView<FadFadType,Layout,Device> ViewType;
163 typedef typename ViewType::size_type size_type;
164 typedef typename ViewType::HostMirror host_view_type;
172 ViewType v1(
"view1", num_rows, num_cols, outer_fad_size+1);
173 host_view_type h_v1 = Kokkos::create_mirror_view(v1);
174 for (size_type i=0; i<num_rows; ++i)
175 for (size_type j=0; j<num_cols; ++j)
176 h_v1(i,j) = generate_nested_fad<FadFadType>(num_rows,
181 Kokkos::deep_copy(v1, h_v1);
184 ViewType v2(
"view2", num_rows, num_cols, outer_fad_size+1);
185 Kokkos::deep_copy(v2, v1);
188 host_view_type h_v2 = Kokkos::create_mirror_view(v2);
189 Kokkos::deep_copy(h_v2, v2);
193 for (size_type i=0; i<num_rows; ++i) {
194 for (size_type j=0; j<num_cols; ++j) {
195 FadFadType
f = generate_nested_fad<FadFadType>(num_rows,
209 Kokkos_DynRankView_FadFad, Interop, FadFadType, Layout, Device )
211 typedef Kokkos::DynRankView<FadFadType,Layout,Device> DRViewType;
212 typedef typename DRViewType::size_type size_type;
213 typedef typename DRViewType::HostMirror host_view_type;
215 typedef Kokkos::View<FadFadType**,Layout,Device> NoDynViewType;
216 typedef typename NoDynViewType::HostMirror host_nondynrankview_type;
224 DRViewType v1(
"drview1", num_rows, num_cols, outer_fad_size+1);
225 host_view_type h_v1 = Kokkos::create_mirror_view(v1);
227 NoDynViewType ndv2(
"nodview2", num_rows, num_cols, outer_fad_size+1);
228 host_nondynrankview_type h_ndv2 = Kokkos::create_mirror_view(ndv2);
230 for (size_type i=0; i<num_rows; ++i)
231 for (size_type j=0; j<num_cols; ++j)
232 h_v1(i,j) = generate_nested_fad<FadFadType>(num_rows,
237 Kokkos::deep_copy(v1, h_v1);
240 Kokkos::deep_copy(ndv2, h_v1);
242 DRViewType v2(
"drview2", num_rows, num_cols, outer_fad_size+1);
246 host_view_type h_v2 = Kokkos::create_mirror_view(v2);
247 Kokkos::deep_copy(h_v2, v2);
251 for (size_type i=0; i<num_rows; ++i) {
252 for (size_type j=0; j<num_cols; ++j) {
253 FadFadType
f = generate_nested_fad<FadFadType>(num_rows,
267 Kokkos_DynRankView_FadFad, Interop2, FadFadType, Layout, Device )
269 typedef Kokkos::DynRankView<FadFadType,Layout,Device> DRViewType;
270 typedef typename DRViewType::size_type size_type;
271 typedef typename DRViewType::HostMirror host_view_type;
273 typedef Kokkos::View<FadFadType**,Layout,Device> NoDynViewType;
274 typedef typename NoDynViewType::HostMirror host_nondynrankview_type;
282 DRViewType v1(
"drview1", num_rows, num_cols, outer_fad_size+1);
283 host_view_type h_v1 = Kokkos::create_mirror_view(v1);
285 NoDynViewType ndv2(
"nodview2", num_rows, num_cols, outer_fad_size+1);
286 host_nondynrankview_type h_ndv2 = Kokkos::create_mirror_view(ndv2);
288 for (size_type i=0; i<num_rows; ++i)
289 for (size_type j=0; j<num_cols; ++j)
290 h_v1(i,j) = generate_nested_fad<FadFadType>(num_rows,
295 Kokkos::deep_copy(v1, h_v1);
298 Kokkos::deep_copy(ndv2, h_v1);
300 DRViewType v2(ndv2) ;
303 host_view_type h_v2 = Kokkos::create_mirror_view(v2);
304 Kokkos::deep_copy(h_v2, v2);
308 for (size_type i=0; i<num_rows; ++i) {
309 for (size_type j=0; j<num_cols; ++j) {
310 FadFadType
f = generate_nested_fad<FadFadType>(num_rows,
325 Kokkos_DynRankView_FadFad, DeepCopy, FadFadType, Layout, Device ) {}
327 Kokkos_DynRankView_FadFad, Interop, FadFadType, Layout, Device ) {}
329 Kokkos_DynRankView_FadFad, Interop2, FadFadType, Layout, Device ) {}
333 #define VIEW_FAD_TESTS_FLD( F, L, D ) \
334 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_FadFad, DeepCopy, F, L, D ) \
335 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_DynRankView_FadFad, DeepCopy, F, L, D ) \
336 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_DynRankView_FadFad, Interop, F, L, D ) \
337 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_DynRankView_FadFad, Interop2, F, L, D )
339 #define VIEW_FAD_TESTS_FD( F, D ) \
340 using Kokkos::LayoutLeft; \
341 using Kokkos::LayoutRight; \
342 VIEW_FAD_TESTS_FLD( F, LayoutLeft, D) \
343 VIEW_FAD_TESTS_FLD( F, LayoutRight, D)
354 #if defined(HAVE_SACADO_VIEW_SPEC) && !defined(SACADO_DISABLE_FAD_VIEW_SPEC)
356 #define VIEW_FAD_TESTS_D( D ) \
357 VIEW_FAD_TESTS_FD( SFadType, D ) \
358 VIEW_FAD_TESTS_FD( SLFadType, D ) \
359 VIEW_FAD_TESTS_FD( DFadType, D )
361 #define VIEW_FAD_TESTS_D( D ) \
362 VIEW_FAD_TESTS_FD( SFadType, D ) \
363 VIEW_FAD_TESTS_FD( SLFadType, D )
366 #define VIEW_FAD_TESTS_D( D )
#define TEUCHOS_TEST_FLOATING_EQUALITY(v1, v2, tol, out, success)
bool checkFads(const FadType1 &x, const FadType2 &x2, Teuchos::FancyOStream &out, double tol=1.0e-15)
const int global_num_rows
Sacado::Fad::SFad< double, fad_dim > SFadType
Sacado::Fad::DFad< double > DFadType
TEUCHOS_UNIT_TEST_TEMPLATE_3_DECL(Kokkos_View_FadFad, DeepCopy, FadFadType, Layout, Device)
const int global_num_cols
Sacado::Fad::SLFad< double, fad_dim > SLFadType
const int global_inner_fad_size
#define TEUCHOS_TEST_EQUALITY(v1, v2, out, success)
Sacado::Fad::SFad< double, global_inner_fad_size > InnerFadType
bool checkNestedFads(const FadType1 &x, const FadType2 &x2, Teuchos::FancyOStream &out, double tol=1.0e-15)
const int global_outer_fad_size
fadfadtype generate_nested_fad(const ordinal num_rows, const ordinal num_cols, const ordinal outer_fad_size, const ordinal inner_fad_size, const ordinal row, const ordinal col)