88 ArrayWeight& cubWeights,
89 ArrayPoint& cellCoords)
const
92 int numCells = cellCoords.dimension(0);
93 int numNodesPerCell = cellCoords.dimension(1);
94 int spaceDim = cellCoords.dimension(2);
109 case shards::Triangle<3>::key:
110 case shards::Quadrilateral<4>::key:
112 for (
int iside=0; iside<numPrimarySides; iside++) {
113 CVSideonBoundary(iside,0) = 0; CVSideonBoundary(iside,1) = 3;
118 case shards::Hexahedron<8>::key:
121 for (
int iside=0; iside<4; iside++) {
122 CVSideonBoundary(iside,0) = 0; CVSideonBoundary(iside,1) = 3;
123 CVSideonBoundary(iside,2) = 3; CVSideonBoundary(iside,3) = 0;
126 CVSideonBoundary(4,0) = 4; CVSideonBoundary(4,1) = 4;
127 CVSideonBoundary(4,2) = 4; CVSideonBoundary(4,3) = 4;
130 CVSideonBoundary(5,0) = 5; CVSideonBoundary(5,1) = 5;
131 CVSideonBoundary(5,2) = 5; CVSideonBoundary(5,3) = 5;
135 case shards::Tetrahedron<4>::key:
137 CVSideonBoundary(0,0) = 0; CVSideonBoundary(0,1) = 3; CVSideonBoundary(0,2) = 0;
138 CVSideonBoundary(1,0) = 0; CVSideonBoundary(1,1) = 3; CVSideonBoundary(1,2) = 3;
139 CVSideonBoundary(2,0) = 3; CVSideonBoundary(2,1) = 4; CVSideonBoundary(2,2) = 0;
140 CVSideonBoundary(3,0) = 4; CVSideonBoundary(3,1) = 4; CVSideonBoundary(3,2) = 4;
145 TEUCHOS_TEST_FOR_EXCEPTION(
true, std::invalid_argument,
146 ">>> ERROR (CubatureControlVolumeBoundary: invalid cell topology.");
150 for (
int idim = 0; idim < spaceDim-1; idim++){
151 sideCenterLocal(0,idim) = 0.0;
155 for (
int icell = 0; icell < numCells; icell++)
158 for (
int inode=0; inode<numPrimarySideNodes; inode++){
161 int cvside = CVSideonBoundary(
sideIndex_,inode);
164 for (
int idim=0; idim<spaceDim; idim++) {
165 for (
int icvnode=0; icvnode<numCVSideNodes; icvnode++) {
166 int cvnode =
subCVCellTopo_->getNodeMap(spaceDim-1,cvside,icvnode);
167 cubpoint(idim) = cubpoint(idim) + subCVCoords(icell,cvind,cvnode,idim);
169 cubPoints(icell,inode,idim) = cubpoint(idim)/numCVSideNodes;
180 for (
int icvnode = 0; icvnode < numNodesPerSubCV; icvnode++){
181 for (
int idim = 0; idim < spaceDim; idim++){
182 cellCVCoords(0,icvnode,idim) = subCVCoords(icell,cvind,icvnode,idim);
189 Intrepid::CellTools<Scalar>::setJacobian(subCVsideJacobian, refSidePoints, cellCVCoords, *(
subCVCellTopo_));
199 else if (spaceDim == 2){
204 cubWeights(icell,inode) = measure(0,0);