48#ifndef __INTREPID2_UTILS_EXTDATA_DEF_HPP__
49#define __INTREPID2_UTILS_EXTDATA_DEF_HPP__
59 template<
typename ValueType,
60 class ...testMatProperties>
62 const Kokkos::DynRankView<ValueType,testMatProperties...> testMat,
63 const ValueType reltol,
64 const ordinal_type iprint,
66 INTREPID2_TEST_FOR_EXCEPTION( testMat.rank() != 2, std::invalid_argument,
67 ">>> ERROR (compareToAnalytic): testMat must have rank 2");
69 Teuchos::RCP<std::ostream> outStream;
70 Teuchos::oblackholestream outNothing;
72 outStream = Teuchos::rcp(&std::cout,
false);
74 outStream = Teuchos::rcp(&outNothing,
false);
77 Teuchos::oblackholestream oldFormatState;
78 oldFormatState.copyfmt(std::cout);
84 ordinal_type i = 0, j = 0;
87 while (! inputFile.eof() && i <
static_cast<ordinal_type
>(testMat.extent(0)) ) {
88 std::getline(inputFile,line);
89 std::istringstream linestream(line);
92 while( linestream >> chunk ) {
95 std::string::size_type loc = chunk.find(
"/", 0);
96 if( loc != std::string::npos ) {
97 chunk.replace( loc, 1,
" ");
98 std::istringstream chunkstream(chunk);
101 testentry = (ValueType)(num1)/(ValueType)(num2);
102 abstol = ( std::fabs(testentry) < reltol ? reltol : std::fabs(reltol*testentry) );
103 absdiff = std::fabs(testentry - testMat(i, j));
104 if (absdiff > abstol) {
106 *outStream <<
"FAILURE --> ";
108 *outStream <<
"entry[" << i <<
"," << j <<
"]:" <<
" "
109 << testMat(i, j) <<
" " << num1 <<
"/" << num2 <<
" "
110 << absdiff <<
" " <<
"<?" <<
" " << abstol <<
"\n";
113 std::istringstream chunkstream(chunk);
114 if (analyticDataType == INTREPID2_UTILS_FRACTION) {
116 testentry = (ValueType)(num1);
118 else if (analyticDataType == INTREPID2_UTILS_SCALAR)
119 chunkstream >> testentry;
120 abstol = ( std::fabs(testentry) < reltol ?reltol : std::fabs(reltol*testentry) );
121 absdiff = std::fabs(testentry - testMat(i, j));
122 if (absdiff > abstol) {
124 *outStream <<
"FAILURE --> ";
126 *outStream <<
"entry[" << i <<
"," << j <<
"]:" <<
" "
127 << testMat(i, j) <<
" " << testentry <<
" "
128 << absdiff <<
" " <<
"<?" <<
" " << abstol <<
"\n";
136 std::cout.copyfmt(oldFormatState);
141 template<
typename ValueType,
142 class ...testMatProperties>
143 void getAnalytic( Kokkos::DynRankView<ValueType,testMatProperties...> testMat,
144 std::ifstream &inputFile,
146 INTREPID2_TEST_FOR_EXCEPTION( testMat.rank() != 2, std::invalid_argument,
147 ">>> ERROR (getToAnalytic): testMat must have rank 2");
149 Teuchos::oblackholestream oldFormatState;
150 oldFormatState.copyfmt(std::cout);
154 ordinal_type i = 0, j = 0;
156 while (! inputFile.eof() && i <
static_cast<ordinal_type
>(testMat.extent(0)) ) {
157 std::getline (inputFile,line);
158 std::istringstream linestream(line);
161 while( linestream >> chunk ) {
164 std::string::size_type loc = chunk.find(
"/", 0);
165 if( loc != std::string::npos ) {
166 chunk.replace( loc, 1,
" ");
167 std::istringstream chunkstream(chunk);
170 testentry = (ValueType)(num1)/(ValueType)(num2);
171 testMat(i, j) = testentry;
174 std::istringstream chunkstream(chunk);
175 if (analyticDataType == INTREPID2_UTILS_FRACTION) {
177 testentry = (ValueType)(num1);
179 else if (analyticDataType == INTREPID2_UTILS_SCALAR)
180 chunkstream >> testentry;
181 testMat(i, j) = testentry;
189 std::cout.copyfmt(oldFormatState);
ordinal_type compareToAnalytic(std::ifstream &inputFile, const Kokkos::DynRankView< ValueType, testMatProperties... > testMat, const ValueType reltol, const ordinal_type iprint, const TypeOfExactData analyticDataType=INTREPID2_UTILS_FRACTION)
Compares the values in the test matrix testMat to precomputed analytic values stored in a file,...
void getAnalytic(Kokkos::DynRankView< ValueType, testMatProperties... > testMat, std::ifstream &inputFile, const TypeOfExactData analyticDataType=INTREPID2_UTILS_FRACTION)
Loads analytic values stored in a file into the matrix testMat, where the output matrix is an array o...
TypeOfExactData
Declarations of templated utility functions.