1
// $Id: ELRDFadUnitTests.cpp,v 1.1.4.1 2009/03/05 20:35:26 etphipp Exp $
2
// $Source: /space/CVS/Trilinos/packages/sacado/test/TestSuite/Attic/ELRDFadUnitTests.cpp,v $
4
// ***********************************************************************
7
// Copyright (2006) Sandia Corporation
9
// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
10
// the U.S. Government retains certain rights in this software.
12
// This library is free software; you can redistribute it and/or modify
13
// it under the terms of the GNU Lesser General Public License as
14
// published by the Free Software Foundation; either version 2.1 of the
15
// License, or (at your option) any later version.
17
// This library is distributed in the hope that it will be useful, but
18
// WITHOUT ANY WARRANTY; without even the implied warranty of
19
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20
// Lesser General Public License for more details.
22
// You should have received a copy of the GNU Lesser General Public
23
// License along with this library; if not, write to the Free Software
24
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
26
// Questions? Contact David M. Gay (dmgay@sandia.gov) or Eric T. Phipps
27
// (etphipp@sandia.gov).
29
// ***********************************************************************
32
#include "ELRDFadUnitTests.hpp"
34
CPPUNIT_TEST_SUITE_REGISTRATION( ELRDFadOpsUnitTest );
36
ELRDFadOpsUnitTest::ELRDFadOpsUnitTest() :
37
urand(0.0, 1.0), n(5), tol_a(1.0e-15), tol_r(1.0e-14) {}
39
ELRDFadOpsUnitTest::ELRDFadOpsUnitTest(int numComponents,
40
double absolute_tolerance,
41
double relative_tolerance) :
44
tol_a(absolute_tolerance),
45
tol_r(relative_tolerance) {}
47
void ELRDFadOpsUnitTest::setUp() {
51
a_dfad = DFadType(n,val);
52
a_fad = FAD::Fad<double>(n,val);
55
b_dfad = DFadType(n,val);
56
b_fad = FAD::Fad<double>(n,val);
58
for (int i=0; i<n; i++) {
60
a_dfad.fastAccessDx(i) = val;
61
a_fad.fastAccessDx(i) = val;
64
b_dfad.fastAccessDx(i) = val;
65
b_fad.fastAccessDx(i) = val;
69
void ELRDFadOpsUnitTest::tearDown() {}
71
void ELRDFadOpsUnitTest::compareFads(const DFadType& x_dfad,
72
const FAD::Fad<double>& x_fad) {
74
if (x_dfad.size() != x_fad.size()) {
75
std::cout << "x_dfad.size() = " << x_dfad.size() << std::endl
76
<< "x_fad.size() = " << x_fad.size() << std::endl
77
<< "x_dfad = " << x_dfad << std::endl
78
<< "x_fad = " << x_fad << std::endl;
82
CPPUNIT_ASSERT(x_dfad.size() == x_fad.size());
84
// Compare hasFastAccess
85
CPPUNIT_ASSERT(x_dfad.hasFastAccess() == x_fad.hasFastAccess());
88
compareDoubles(x_dfad.val(), x_fad.val());
90
for (int i=0; i<x_fad.size(); i++) {
93
compareDoubles(x_dfad.dx(i), x_fad.dx(i));
95
// Compare fastAccessDx
96
compareDoubles(x_dfad.fastAccessDx(i), x_fad.fastAccessDx(i));
100
void ELRDFadOpsUnitTest::compareDoubles(double a, double b) {
101
if ( fabs(a-b) >= tol_a + tol_r*fabs(a) )
102
std::cout << "a = " << a << std::endl
103
<< "b = " << b << std::endl;
104
CPPUNIT_ASSERT( fabs(a-b) < tol_a + tol_r*fabs(a) );
107
void ELRDFadOpsUnitTest::testMax() {
110
DFadType aa_dfad = a_dfad + 1.0;
111
c_dfad = max(aa_dfad, a_dfad);
112
compareDoubles(c_dfad.val(), aa_dfad.val());
113
for (int i=0; i<n; i++) {
114
compareDoubles(c_dfad.dx(i), aa_dfad.dx(i));
115
compareDoubles(c_dfad.fastAccessDx(i), aa_dfad.fastAccessDx(i));
118
c_dfad = max(a_dfad, aa_dfad);
119
compareDoubles(c_dfad.val(), aa_dfad.val());
120
for (int i=0; i<n; i++) {
121
compareDoubles(c_dfad.dx(i), aa_dfad.dx(i));
122
compareDoubles(c_dfad.fastAccessDx(i), aa_dfad.fastAccessDx(i));
125
c_dfad = max(a_dfad+1.0, a_dfad);
126
compareDoubles(c_dfad.val(), aa_dfad.val());
127
for (int i=0; i<n; i++) {
128
compareDoubles(c_dfad.dx(i), aa_dfad.dx(i));
129
compareDoubles(c_dfad.fastAccessDx(i), aa_dfad.fastAccessDx(i));
132
c_dfad = max(a_dfad, a_dfad+1.0);
133
compareDoubles(c_dfad.val(), aa_dfad.val());
134
for (int i=0; i<n; i++) {
135
compareDoubles(c_dfad.dx(i), aa_dfad.dx(i));
136
compareDoubles(c_dfad.fastAccessDx(i), aa_dfad.fastAccessDx(i));
140
this->c_dfad = max(this->a_dfad+1.0, this->a_dfad+1.0);
141
compareDoubles(c_dfad.val(), aa_dfad.val());
142
for (int i=0; i<n; i++) {
143
compareDoubles(c_dfad.dx(i), aa_dfad.dx(i));
144
compareDoubles(c_dfad.fastAccessDx(i), aa_dfad.fastAccessDx(i));
147
// Expr, Expr (different)
148
this->c_dfad = max(this->a_dfad+1.0, this->a_dfad-1.0);
149
compareDoubles(c_dfad.val(), aa_dfad.val());
150
for (int i=0; i<n; i++) {
151
compareDoubles(c_dfad.dx(i), aa_dfad.dx(i));
152
compareDoubles(c_dfad.fastAccessDx(i), aa_dfad.fastAccessDx(i));
154
this->c_dfad = max(this->a_dfad-1.0, this->a_dfad+1.0);
155
compareDoubles(c_dfad.val(), aa_dfad.val());
156
for (int i=0; i<n; i++) {
157
compareDoubles(c_dfad.dx(i), aa_dfad.dx(i));
158
compareDoubles(c_dfad.fastAccessDx(i), aa_dfad.fastAccessDx(i));
161
val = a_dfad.val() + 1;
162
c_dfad = max(a_dfad, val);
163
compareDoubles(c_dfad.val(), val);
164
for (int i=0; i<n; i++)
165
compareDoubles(c_dfad.dx(i), 0.0);
167
val = a_dfad.val() - 1;
168
c_dfad = max(a_dfad, val);
169
compareDoubles(c_dfad.val(), a_dfad.val());
170
for (int i=0; i<n; i++) {
171
compareDoubles(c_dfad.dx(i), a_dfad.dx(i));
172
compareDoubles(c_dfad.fastAccessDx(i), a_dfad.fastAccessDx(i));
175
val = b_dfad.val() + 1;
176
c_dfad = max(val, b_dfad);
177
compareDoubles(c_dfad.val(), val);
178
for (int i=0; i<n; i++)
179
compareDoubles(c_dfad.dx(i), 0.0);
181
val = b_dfad.val() - 1;
182
c_dfad = max(val, b_dfad);
183
compareDoubles(c_dfad.val(), b_dfad.val());
184
for (int i=0; i<n; i++) {
185
compareDoubles(c_dfad.dx(i), b_dfad.dx(i));
186
compareDoubles(c_dfad.fastAccessDx(i), b_dfad.fastAccessDx(i));
190
void ELRDFadOpsUnitTest::testMin() {
193
DFadType aa_dfad = a_dfad - 1.0;
194
c_dfad = min(aa_dfad, a_dfad);
195
compareDoubles(c_dfad.val(), aa_dfad.val());
196
for (int i=0; i<n; i++) {
197
compareDoubles(c_dfad.dx(i), aa_dfad.dx(i));
198
compareDoubles(c_dfad.fastAccessDx(i), aa_dfad.fastAccessDx(i));
201
c_dfad = min(a_dfad, aa_dfad);
202
compareDoubles(c_dfad.val(), aa_dfad.val());
203
for (int i=0; i<n; i++) {
204
compareDoubles(c_dfad.dx(i), aa_dfad.dx(i));
205
compareDoubles(c_dfad.fastAccessDx(i), aa_dfad.fastAccessDx(i));
209
this->c_dfad = min(this->a_dfad-1.0, this->a_dfad-1.0);
210
compareDoubles(c_dfad.val(), aa_dfad.val());
211
for (int i=0; i<n; i++) {
212
compareDoubles(c_dfad.dx(i), aa_dfad.dx(i));
213
compareDoubles(c_dfad.fastAccessDx(i), aa_dfad.fastAccessDx(i));
216
// Expr, Expr (different)
217
this->c_dfad = min(this->a_dfad+1.0, this->a_dfad-1.0);
218
compareDoubles(c_dfad.val(), aa_dfad.val());
219
for (int i=0; i<n; i++) {
220
compareDoubles(c_dfad.dx(i), aa_dfad.dx(i));
221
compareDoubles(c_dfad.fastAccessDx(i), aa_dfad.fastAccessDx(i));
223
this->c_dfad = min(this->a_dfad-1.0, this->a_dfad+1.0);
224
compareDoubles(c_dfad.val(), aa_dfad.val());
225
for (int i=0; i<n; i++) {
226
compareDoubles(c_dfad.dx(i), aa_dfad.dx(i));
227
compareDoubles(c_dfad.fastAccessDx(i), aa_dfad.fastAccessDx(i));
230
val = a_dfad.val() - 1;
231
c_dfad = min(a_dfad, val);
232
compareDoubles(c_dfad.val(), val);
233
for (int i=0; i<n; i++)
234
compareDoubles(c_dfad.dx(i), 0.0);
236
val = a_dfad.val() + 1;
237
c_dfad = min(a_dfad, val);
238
compareDoubles(c_dfad.val(), a_dfad.val());
239
for (int i=0; i<n; i++) {
240
compareDoubles(c_dfad.dx(i), a_dfad.dx(i));
241
compareDoubles(c_dfad.fastAccessDx(i), a_dfad.fastAccessDx(i));
244
val = b_dfad.val() - 1;
245
c_dfad = min(val, b_dfad);
246
compareDoubles(c_dfad.val(), val);
247
for (int i=0; i<n; i++)
248
compareDoubles(c_dfad.dx(i), 0.0);
250
val = b_dfad.val() + 1;
251
c_dfad = min(val, b_dfad);
252
compareDoubles(c_dfad.val(), b_dfad.val());
253
for (int i=0; i<n; i++) {
254
compareDoubles(c_dfad.dx(i), b_dfad.dx(i));
255
compareDoubles(c_dfad.fastAccessDx(i), b_dfad.fastAccessDx(i));