55#include "Teuchos_oblackholestream.hpp"
56#include "Teuchos_RCP.hpp"
57#include "Teuchos_GlobalMPISession.hpp"
60using namespace Intrepid;
62#define INTREPID_TEST_COMMAND( S ) \
67 catch (const std::logic_error & err) { \
68 *outStream << "Expected Error ----------------------------------------------------------------\n"; \
69 *outStream << err.what() << '\n'; \
70 *outStream << "-------------------------------------------------------------------------------" << "\n\n"; \
75int main(
int argc,
char *argv[]) {
77 Teuchos::GlobalMPISession mpiSession(&argc, &argv);
81 int iprint = argc - 1;
82 Teuchos::RCP<std::ostream> outStream;
83 Teuchos::oblackholestream bhs;
85 outStream = Teuchos::rcp(&std::cout,
false);
87 outStream = Teuchos::rcp(&bhs,
false);
90 Teuchos::oblackholestream oldFormatState;
91 oldFormatState.copyfmt(std::cout);
94 <<
"===============================================================================\n" \
96 <<
"| Unit Test (FunctionSpaceTools) |\n" \
98 <<
"| 1) volume integration on tetrahedra, testing dataIntegral |\n" \
100 <<
"| Questions? Contact Pavel Bochev (pbboche@sandia.gov) or |\n" \
101 <<
"| Denis Ridzal (dridzal@sandia.gov). |\n" \
103 <<
"| Intrepid's website: http://trilinos.sandia.gov/packages/intrepid |\n" \
104 <<
"| Trilinos website: http://trilinos.sandia.gov |\n" \
106 <<
"===============================================================================\n";
115 <<
"===============================================================================\n"\
116 <<
"| TEST 1: correctness of cell volumes |\n"\
117 <<
"===============================================================================\n";
119 outStream->precision(20);
122 shards::CellTopology cellType = shards::getCellTopologyData< shards::Tetrahedron<> >();
125 DefaultCubatureFactory<double> cubFactory;
127 Teuchos::RCP<Cubature<double> > myCub = cubFactory.create(cellType, cubDegree);
128 int spaceDim = myCub->getDimension();
129 int numCubPoints = myCub->getNumPoints();
134 int numCellData = numCells*numNodes*spaceDim;
135 double tetnodes[] = {
159 double tetvols[] = {1.0/6.0, 194.0/3.0, 1.0/15.0, 2.0/25.0};
162 FieldContainer<double> cub_points(numCubPoints, spaceDim);
163 FieldContainer<double> cub_weights(numCubPoints);
164 FieldContainer<double> cell_nodes(numCells, numNodes, spaceDim);
165 FieldContainer<double> jacobian(numCells, numCubPoints, spaceDim, spaceDim);
166 FieldContainer<double> jacobian_det(numCells, numCubPoints);
167 FieldContainer<double> weighted_measure(numCells, numCubPoints);
168 FieldContainer<double> data_one(numCells, numCubPoints);
169 FieldContainer<double> volumes(numCells);
174 myCub->getCubature(cub_points, cub_weights);
177 cell_nodes.setValues(tetnodes, numCellData);
184 fst::computeCellMeasure<double>(weighted_measure, jacobian_det, cub_weights);
187 for (
int cell=0; cell<data_one.dimension(0); cell++) {
188 for (
int qp=0; qp<data_one.dimension(1); qp++) {
189 data_one(cell,qp) = 1.0;
194 fst::integrate<double>(volumes, data_one, weighted_measure, COMP_CPP);
200 for (
int cell_id = 0; cell_id < numCells; cell_id++) {
201 *outStream <<
"Volume of cell " << cell_id <<
" = " << volumes(cell_id) <<
" vs. Analytic value = " << tetvols[cell_id] <<
"\n";
202 if (std::fabs(volumes(cell_id)-tetvols[cell_id]) > INTREPID_TOL) {
210 catch (
const std::logic_error & err) {
211 *outStream <<
"UNEXPECTED ERROR !!! ----------------------------------------------------------\n";
212 *outStream << err.what() <<
'\n';
213 *outStream <<
"-------------------------------------------------------------------------------" <<
"\n\n";
219 std::cout <<
"End Result: TEST FAILED\n";
221 std::cout <<
"End Result: TEST PASSED\n";
224 std::cout.copyfmt(oldFormatState);
Header file for the abstract base class Intrepid::DefaultCubatureFactory.
Header file for utility class to provide multidimensional containers.