51 #include "Teuchos_oblackholestream.hpp"
52 #include "Teuchos_RCP.hpp"
53 #include "Teuchos_GlobalMPISession.hpp"
56 #include "Shards_CellTopology.hpp"
59 using namespace Intrepid;
65 int main(
int argc,
char *argv[]) {
67 Teuchos::GlobalMPISession mpiSession(&argc, &argv);
70 int iprint = argc - 1;
72 Teuchos::RCP<std::ostream> outStream;
73 Teuchos::oblackholestream bhs;
76 outStream = Teuchos::rcp(&std::cout,
false);
78 outStream = Teuchos::rcp(&bhs,
false);
81 Teuchos::oblackholestream oldFormatState;
82 oldFormatState.copyfmt(std::cout);
85 <<
"===============================================================================\n" \
87 <<
"| Unit Test HCURL_TET_In_FEM |\n" \
89 <<
"| 1) Tests tetrahedral Nedelec basis |\n" \
91 <<
"| Questions? Contact Pavel Bochev (pbboche@sandia.gov) or |\n" \
92 <<
"| Denis Ridzal (dridzal@sandia.gov) or |\n" \
93 <<
"| Robert Kirby (robert.c.kirby@ttu.edu) |\n" \
95 <<
"| Intrepid's website: http://trilinos.sandia.gov/packages/intrepid |\n" \
96 <<
"| Trilinos website: http://trilinos.sandia.gov |\n" \
98 <<
"===============================================================================\n";
110 PointTools::getLattice<double,FieldContainer<double> >( lattice ,
114 POINTTYPE_EQUISPACED );
116 myBasis.
getValues( myBasisValues , lattice , OPERATOR_VALUE );
118 const double fiat_vals[] = {
119 1.000000000000001e+00, -2.498001805406602e-16, -1.665334536937735e-16,
120 9.999999999999998e-01, 1.000000000000000e+00, 1.000000000000000e+00,
121 5.828670879282072e-16, 1.110223024625157e-16, 2.498001805406602e-16,
122 7.771561172376096e-16, 8.326672684688674e-17, 1.110223024625157e-16,
123 2.081668171172169e-16, -2.914335439641036e-16, 1.280865063236792e-16,
124 -3.191891195797325e-16, 1.000000000000000e+00, -4.293998586504916e-17,
125 -9.999999999999994e-01, 2.081668171172169e-16, 2.400576428367544e-16,
126 2.220446049250313e-16, -5.551115123125783e-17, 1.084013877651281e-16,
127 3.469446951953614e-16, -1.000000000000000e+00, 1.387778780781446e-16,
128 -1.804112415015879e-16, 1.942890293094024e-16, -1.387778780781446e-16,
129 -9.999999999999993e-01, -9.999999999999996e-01, -9.999999999999998e-01,
130 5.551115123125783e-17, -2.220446049250313e-16, -8.326672684688674e-17,
131 -2.220446049250313e-16, -5.551115123125783e-17, 9.999999999999999e-01,
132 1.665334536937735e-16, 1.110223024625157e-16, -6.383782391594650e-16,
133 1.110223024625157e-16, 1.110223024625157e-16, -1.110223024625157e-16,
134 9.999999999999990e-01, 9.999999999999994e-01, 9.999999999999996e-01,
135 1.387778780781446e-16, -2.496931404305374e-17, -1.665334536937735e-16,
136 -2.498001805406602e-16, -2.149987498083074e-16, 1.000000000000000e+00,
137 8.326672684688674e-17, -3.769887250591415e-17, 8.326672684688674e-17,
138 -9.999999999999994e-01, 1.556977698723022e-16, 2.220446049250313e-16,
139 -9.422703950001342e-18, 1.665334536937735e-16, -2.359223927328458e-16,
140 -9.422703950001268e-18, -8.326672684688674e-17, 1.387778780781446e-17,
141 -7.525083148581445e-17, 2.775557561562891e-17, 1.000000000000000e+00,
142 2.789513560273035e-16, -9.999999999999998e-01, -5.551115123125783e-17
146 for (
int i=0;i<myBasisValues.dimension(0);i++) {
147 for (
int j=0;j<myBasisValues.dimension(1);j++) {
148 for (
int k=0;k<myBasisValues.dimension(2);k++) {
149 if (std::abs( myBasisValues(i,j,k) - fiat_vals[cur] ) > 10.0*INTREPID_TOL ) {
151 *outStream << std::setw(70) <<
"^^^^----FAILURE!" <<
"\n";
154 *outStream <<
" At multi-index { ";
155 *outStream << i <<
" " << j <<
" " << k;
156 *outStream <<
"} computed value: " << myBasisValues(i,j,k)
157 <<
" but correct value: " << fiat_vals[cur] <<
"\n";
158 *outStream <<
"Difference: " << std::abs( myBasisValues(i,j,k) - fiat_vals[cur] ) <<
"\n";
165 catch (
const std::exception & err) {
166 *outStream << err.what() <<
"\n\n";
177 PointTools::getLattice<double,FieldContainer<double> >( lattice ,
181 POINTTYPE_EQUISPACED );
183 myBasis.
getValues( myBasisValues , lattice , OPERATOR_CURL );
185 const double fiat_curls[] = {
186 -5.551115123125783e-16, -2.000000000000000e+00, 2.000000000000000e+00,
187 -5.551115123125783e-16, -2.000000000000000e+00, 2.000000000000000e+00,
188 -5.551115123125783e-16, -2.000000000000000e+00, 2.000000000000000e+00,
189 -5.551115123125783e-16, -2.000000000000000e+00, 2.000000000000000e+00,
190 -4.440892098500626e-16, -2.775557561562891e-16, 2.000000000000000e+00,
191 -4.440892098500626e-16, -2.775557561562891e-16, 2.000000000000000e+00,
192 -4.440892098500626e-16, -2.775557561562891e-16, 2.000000000000000e+00,
193 -4.440892098500626e-16, -2.775557561562891e-16, 2.000000000000000e+00,
194 -2.000000000000000e+00, 5.551115123125783e-17, 2.000000000000000e+00,
195 -2.000000000000000e+00, 5.551115123125783e-17, 2.000000000000000e+00,
196 -2.000000000000000e+00, 5.551115123125783e-17, 2.000000000000000e+00,
197 -2.000000000000000e+00, 5.551115123125783e-17, 2.000000000000000e+00,
198 -2.000000000000000e+00, 2.000000000000000e+00, 9.861075762086680e-17,
199 -2.000000000000000e+00, 2.000000000000000e+00, 9.861075762086680e-17,
200 -2.000000000000000e+00, 2.000000000000000e+00, 9.861075762086680e-17,
201 -2.000000000000000e+00, 2.000000000000000e+00, 9.861075762086680e-17,
202 -2.775557561562891e-17, -2.000000000000000e+00, 4.287451790760826e-16,
203 -2.775557561562891e-17, -2.000000000000000e+00, 4.287451790760826e-16,
204 -2.775557561562891e-17, -2.000000000000000e+00, 4.287451790760826e-16,
205 -2.775557561562891e-17, -2.000000000000000e+00, 4.287451790760826e-16,
206 2.000000000000000e+00, -2.185751579730777e-16, 1.526556658859590e-16,
207 2.000000000000000e+00, -2.185751579730777e-16, 1.526556658859590e-16,
208 2.000000000000000e+00, -2.185751579730777e-16, 1.526556658859590e-16,
209 2.000000000000000e+00, -2.185751579730777e-16, 1.526556658859590e-16
213 for (
int i=0;i<myBasisValues.dimension(0);i++) {
214 for (
int j=0;j<myBasisValues.dimension(1);j++) {
215 for (
int k=0;k<myBasisValues.dimension(2);k++) {
216 if (std::abs( myBasisValues(i,j,k) - fiat_curls[cur] ) > 10.0*INTREPID_TOL ) {
218 *outStream << std::setw(70) <<
"^^^^----FAILURE!" <<
"\n";
221 *outStream <<
" At multi-index { ";
222 *outStream << i <<
" " << j <<
" " << k;
223 *outStream <<
"} computed value: " << myBasisValues(i,j,k)
224 <<
" but correct value: " << fiat_curls[cur] <<
"\n";
225 *outStream <<
"Difference: " << std::abs( myBasisValues(i,j,k) - fiat_curls[cur] ) <<
"\n";
232 catch (
const std::exception & err) {
233 *outStream << err.what() <<
"\n\n";
239 std::cout <<
"End Result: TEST FAILED\n";
241 std::cout <<
"End Result: TEST PASSED\n";
244 std::cout.copyfmt(oldFormatState);
virtual int getCardinality() const
Returns cardinality of the basis.
Header file for the Intrepid::HCURL_TET_In_FEM class.
Header file for utility class to provide multidimensional containers.
Implementation of the default H(curl)-compatible Nedelec (first kind) basis of arbitrary degree on Te...
virtual const shards::CellTopology getBaseCellTopology() const
Returns the base cell topology for which the basis is defined. See Shards documentation http://trilin...
void getValues(ArrayScalar &outputValues, const ArrayScalar &inputPoints, const EOperator operatorType) const
Evaluation of a FEM basis on a reference Tetrahedron cell.