Stokhos Package Browser (Single Doxygen Collection)
Version of the Day
Toggle main menu visibility
Loading...
Searching...
No Matches
test
UnitTest
Stokhos_TotalOrderBasisUnitTest.cpp
Go to the documentation of this file.
1
// @HEADER
2
// ***********************************************************************
3
//
4
// Stokhos Package
5
// Copyright (2009) Sandia Corporation
6
//
7
// Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
8
// license for use of this work by or on behalf of the U.S. Government.
9
//
10
// Redistribution and use in source and binary forms, with or without
11
// modification, are permitted provided that the following conditions are
12
// met:
13
//
14
// 1. Redistributions of source code must retain the above copyright
15
// notice, this list of conditions and the following disclaimer.
16
//
17
// 2. Redistributions in binary form must reproduce the above copyright
18
// notice, this list of conditions and the following disclaimer in the
19
// documentation and/or other materials provided with the distribution.
20
//
21
// 3. Neither the name of the Corporation nor the names of the
22
// contributors may be used to endorse or promote products derived from
23
// this software without specific prior written permission.
24
//
25
// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
26
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
29
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
30
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
31
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
32
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
33
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
34
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
35
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
//
37
// Questions? Contact Eric T. Phipps (etphipp@sandia.gov).
38
//
39
// ***********************************************************************
40
// @HEADER
41
42
#include "Teuchos_UnitTestHarness.hpp"
43
#include "Teuchos_TestingHelpers.hpp"
44
#include "Teuchos_UnitTestRepository.hpp"
45
#include "Teuchos_GlobalMPISession.hpp"
46
47
#include "
Stokhos.hpp
"
48
#include "
Stokhos_UnitTestHelpers.hpp
"
49
50
#include <iterator>
51
52
namespace
TotalOrderBasisUnitTest
{
53
54
// Common setup for unit tests
55
template
<
typename
OrdinalType,
typename
ValueType>
56
struct
UnitTestSetup
{
57
ValueType
rtol
,
atol
,
sparse_tol
;
58
OrdinalType
p
,
d
;
59
60
UnitTestSetup
() {
61
rtol
= 1e-12;
62
atol
= 1e-12;
63
sparse_tol
= 1e-12;
64
d
= 3;
65
p
= 5;
66
}
67
68
};
69
70
typedef
int
ordinal_type
;
71
typedef
double
value_type
;
72
UnitTestSetup<ordinal_type,value_type>
setup
;
73
74
TEUCHOS_UNIT_TEST
( Coefficients, Isotropic ) {
75
success =
true
;
76
77
// Build total order basis of dimension d and order p
78
Teuchos::Array< Teuchos::RCP<const Stokhos::OneDOrthogPolyBasis<ordinal_type,value_type> > > bases(
setup
.d);
79
for
(
ordinal_type
i=0; i<
setup
.d; i++)
80
bases[i] = Teuchos::rcp(
new
Stokhos::LegendreBasis<ordinal_type,value_type>
(
setup
.p,
true
));
81
Teuchos::RCP<const Stokhos::TotalOrderBasis<ordinal_type,value_type> > basis = Teuchos::rcp(
new
Stokhos::TotalOrderBasis<ordinal_type,value_type>
(bases));
82
83
// Compute expected size
84
ordinal_type
sz =
Stokhos::n_choose_k
(
setup
.p+
setup
.d,
setup
.d);
85
86
// Check sizes
87
TEUCHOS_TEST_EQUALITY(sz, basis->size(), out, success);
88
89
std::ostream_iterator<ordinal_type> out_iterator(out,
" "
);
90
for
(
ordinal_type
i=0; i<sz; i++) {
91
const
Stokhos::MultiIndex<ordinal_type>
& term = basis->term(i);
92
93
// Verify terms match
94
out <<
"term "
<< term <<
" <= "
<<
setup
.p <<
" : "
;
95
bool
is_less =
true
;
96
for
(
ordinal_type
j
=0;
j
<
setup
.d;
j
++)
97
is_less = is_less && term[
j
] <=
setup
.p;
98
if
(is_less)
99
out <<
"passed"
<< std::endl;
100
else
{
101
out <<
"failed"
<< std::endl;
102
success =
false
;
103
}
104
105
}
106
107
}
108
109
TEUCHOS_UNIT_TEST
( Coefficients, Anisotropic ) {
110
success =
true
;
111
112
// Build anisotropic total order basis of dimension d
113
Teuchos::Array< Teuchos::RCP<const Stokhos::OneDOrthogPolyBasis<ordinal_type,value_type> > > bases(
setup
.d);
114
for
(
ordinal_type
i=0; i<
setup
.d; i++)
115
bases[i] = Teuchos::rcp(
new
Stokhos::LegendreBasis<ordinal_type,value_type>
(i+1,
true
));
116
Teuchos::RCP<const Stokhos::TotalOrderBasis<ordinal_type,value_type> > basis = Teuchos::rcp(
new
Stokhos::TotalOrderBasis<ordinal_type,value_type>
(bases));
117
118
// Compute expected size
119
// Need to figure out how to do this
120
ordinal_type
sz = basis->size();
121
122
// Check sizes
123
TEUCHOS_TEST_EQUALITY(sz, basis->size(), out, success);
124
125
std::ostream_iterator<ordinal_type> out_iterator(out,
" "
);
126
for
(
ordinal_type
i=0; i<sz; i++) {
127
const
Stokhos::MultiIndex<ordinal_type>
& term = basis->term(i);
128
129
// Verify terms match
130
out <<
"term "
<< term <<
" <= "
<<
setup
.p <<
" : "
;
131
bool
is_less =
true
;
132
for
(
ordinal_type
j
=0;
j
<
setup
.d;
j
++)
133
is_less = is_less && term[
j
] <=
j
+1;
134
if
(is_less)
135
out <<
"passed"
<< std::endl;
136
else
{
137
out <<
"failed"
<< std::endl;
138
success =
false
;
139
}
140
141
}
142
143
}
144
145
TEUCHOS_UNIT_TEST
( Sparse3Tensor, Anisotropic_Full ) {
146
success =
true
;
147
148
// Build anisotropic tensor product basis of dimension d
149
Teuchos::Array< Teuchos::RCP<const Stokhos::OneDOrthogPolyBasis<ordinal_type,value_type> > > bases(
setup
.d);
150
for
(
ordinal_type
i=0; i<
setup
.d; i++)
151
bases[i] = Teuchos::rcp(
new
Stokhos::LegendreBasis<ordinal_type,value_type>
(i+1,
true
));
152
Teuchos::RCP<const Stokhos::ProductBasis<ordinal_type,value_type> > basis = Teuchos::rcp(
new
Stokhos::TotalOrderBasis<ordinal_type,value_type>
(bases,
setup
.sparse_tol));
153
Teuchos::RCP< Stokhos::Sparse3Tensor<ordinal_type, value_type> > Cijk =
154
basis->computeTripleProductTensor();
155
156
success =
Stokhos::testSparse3Tensor
(*Cijk, *basis,
setup
.sparse_tol,
157
setup
.rtol,
setup
.atol, out);
158
159
}
160
161
TEUCHOS_UNIT_TEST
( Sparse3Tensor, Anisotropic_Linear ) {
162
success =
true
;
163
164
// Build anisotropic tensor product basis of dimension d
165
Teuchos::Array< Teuchos::RCP<const Stokhos::OneDOrthogPolyBasis<ordinal_type,value_type> > > bases(
setup
.d);
166
for
(
ordinal_type
i=0; i<
setup
.d; i++)
167
bases[i] = Teuchos::rcp(
new
Stokhos::LegendreBasis<ordinal_type,value_type>
(i+1,
true
));
168
Teuchos::RCP<const Stokhos::ProductBasis<ordinal_type,value_type> > basis = Teuchos::rcp(
new
Stokhos::TotalOrderBasis<ordinal_type,value_type>
(bases,
setup
.sparse_tol));
169
Teuchos::RCP< Stokhos::Sparse3Tensor<ordinal_type, value_type> > Cijk =
170
basis->computeLinearTripleProductTensor();
171
172
success =
Stokhos::testSparse3Tensor
(*Cijk, *basis,
setup
.sparse_tol,
173
setup
.rtol,
setup
.atol, out,
true
);
174
175
}
176
177
}
178
179
int
main
(
int
argc,
char
*
argv
[] ) {
180
Teuchos::GlobalMPISession mpiSession(&argc, &
argv
);
181
int
res = Teuchos::UnitTestRepository::runUnitTestsFromMain(argc,
argv
);
182
return
res;
183
}
j
j
Definition
Sacado_Fad_Exp_MP_Vector.hpp:527
Stokhos.hpp
argv
char * argv[]
Definition
Stokhos_HouseTriDiagUnitTest.cpp:286
setup
UnitTestSetup< Kokkos::Cuda > setup
Definition
Stokhos_KokkosArrayKernelsUnitTest_Cuda.cpp:53
main
int main(int argc, char *argv[])
Definition
Stokhos_TotalOrderBasisUnitTest.cpp:179
Stokhos_UnitTestHelpers.hpp
Stokhos::LegendreBasis
Legendre polynomial basis.
Definition
Stokhos_LegendreBasis.hpp:68
Stokhos::MultiIndex
A multidimensional index.
Definition
Stokhos_ProductBasisUtils.hpp:79
Stokhos::TotalOrderBasis
Multivariate orthogonal polynomial basis generated from a total order tensor product of univariate po...
Definition
Stokhos_TotalOrderBasis.hpp:69
Stokhos::testSparse3Tensor
bool testSparse3Tensor(const Stokhos::Sparse3Tensor< ordinal_type, scalar_type > &Cijk, const Stokhos::ProductBasis< ordinal_type, scalar_type > &basis, const scalar_type &sparse_tol, const scalar_type &rel_tol, const scalar_type &abs_tol, Teuchos::FancyOStream &out, bool linear=false)
Definition
Stokhos_UnitTestHelpers.hpp:321
Stokhos::n_choose_k
ordinal_type n_choose_k(const ordinal_type &n, const ordinal_type &k)
Compute bionomial coefficient (n ; k) = n!/( k! (n-k)! ).
Definition
Stokhos_ProductBasisUtils.hpp:60
TotalOrderBasisUnitTest
Definition
Stokhos_LexicographicTreeBasisUnitTest.cpp:51
TotalOrderBasisUnitTest::setup
UnitTestSetup< ordinal_type, value_type > setup
Definition
Stokhos_LexicographicTreeBasisUnitTest.cpp:71
TotalOrderBasisUnitTest::value_type
double value_type
Definition
Stokhos_LexicographicTreeBasisUnitTest.cpp:70
TotalOrderBasisUnitTest::ordinal_type
int ordinal_type
Definition
Stokhos_LexicographicTreeBasisUnitTest.cpp:69
TotalOrderBasisUnitTest::TEUCHOS_UNIT_TEST
TEUCHOS_UNIT_TEST(LexicographicTreeCoefficients, Isotropic)
Definition
Stokhos_LexicographicTreeBasisUnitTest.cpp:483
TotalOrderBasisUnitTest::UnitTestSetup
Definition
Stokhos_LexicographicTreeBasisUnitTest.cpp:55
TotalOrderBasisUnitTest::UnitTestSetup::UnitTestSetup
UnitTestSetup()
Definition
Stokhos_TotalOrderBasisUnitTest.cpp:60
TotalOrderBasisUnitTest::UnitTestSetup::p
OrdinalType p
Definition
Stokhos_LexicographicTreeBasisUnitTest.cpp:57
TotalOrderBasisUnitTest::UnitTestSetup::sparse_tol
ValueType sparse_tol
Definition
Stokhos_LexicographicTreeBasisUnitTest.cpp:56
TotalOrderBasisUnitTest::UnitTestSetup::d
OrdinalType d
Definition
Stokhos_LexicographicTreeBasisUnitTest.cpp:57
TotalOrderBasisUnitTest::UnitTestSetup::rtol
ValueType rtol
Definition
Stokhos_LexicographicTreeBasisUnitTest.cpp:56
TotalOrderBasisUnitTest::UnitTestSetup::atol
ValueType atol
Definition
Stokhos_LexicographicTreeBasisUnitTest.cpp:56
UnitTestSetup
Definition
Stokhos_SacadoMPVectorCommTests.cpp:71
Generated by
1.17.0