1 //============================================================================ 2 // Copyright (c) Kitware, Inc. 3 // All rights reserved. 4 // See LICENSE.txt for details. 5 // This software is distributed WITHOUT ANY WARRANTY; without even 6 // the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 7 // PURPOSE. See the above copyright notice for more information. 8 // 9 // Copyright 2014 National Technology & Engineering Solutions of Sandia, LLC (NTESS). 10 // Copyright 2014 UT-Battelle, LLC. 11 // Copyright 2014 Los Alamos National Security. 12 // 13 // Under the terms of Contract DE-NA0003525 with NTESS, 14 // the U.S. Government retains certain rights in this software. 15 // 16 // Under the terms of Contract DE-AC52-06NA25396 with Los Alamos National 17 // Laboratory (LANL), the U.S. Government retains certain rights in 18 // this software. 19 //============================================================================ 20 // Copyright (c) 2018, The Regents of the University of California, through 21 // Lawrence Berkeley National Laboratory (subject to receipt of any required approvals 22 // from the U.S. Dept. of Energy). All rights reserved. 23 // 24 // Redistribution and use in source and binary forms, with or without modification, 25 // are permitted provided that the following conditions are met: 26 // 27 // (1) Redistributions of source code must retain the above copyright notice, this 28 // list of conditions and the following disclaimer. 29 // 30 // (2) Redistributions in binary form must reproduce the above copyright notice, 31 // this list of conditions and the following disclaimer in the documentation 32 // and/or other materials provided with the distribution. 33 // 34 // (3) Neither the name of the University of California, Lawrence Berkeley National 35 // Laboratory, U.S. Dept. of Energy nor the names of its contributors may be 36 // used to endorse or promote products derived from this software without 37 // specific prior written permission. 38 // 39 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 40 // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 41 // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 42 // IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 43 // INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 44 // BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 45 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 46 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 47 // OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 48 // OF THE POSSIBILITY OF SUCH DAMAGE. 49 // 50 //============================================================================= 51 // 52 // This code is an extension of the algorithm presented in the paper: 53 // Parallel Peak Pruning for Scalable SMP Contour Tree Computation. 54 // Hamish Carr, Gunther Weber, Christopher Sewell, and James Ahrens. 55 // Proceedings of the IEEE Symposium on Large Data Analysis and Visualization 56 // (LDAV), October 2016, Baltimore, Maryland. 57 // 58 // The PPP2 algorithm and software were jointly developed by 59 // Hamish Carr (University of Leeds), Gunther H. Weber (LBNL), and 60 // Oliver Ruebel (LBNL) 61 //============================================================================== 62 63 #ifndef vtkm_worklet_contourtree_augmented_mesh_dem_inc_execution_object_mesh_3d_h 64 #define vtkm_worklet_contourtree_augmented_mesh_dem_inc_execution_object_mesh_3d_h 65 66 #include <vtkm/Types.h> 67 68 69 namespace vtkm 70 { 71 namespace worklet 72 { 73 namespace contourtree_augmented 74 { 75 namespace mesh_dem_inc 76 { 77 78 // Worklet for computing the sort indices from the sort order 79 template <typename DeviceAdapter> 80 class ExecutionObject_MeshStructure_3D 81 { 82 public: 83 VTKM_EXEC_CONT ExecutionObject_MeshStructure_3D()84 ExecutionObject_MeshStructure_3D() 85 : nRows(0) 86 , nCols(0) 87 , nSlices(0) 88 { 89 } 90 91 VTKM_EXEC_CONT ExecutionObject_MeshStructure_3D(vtkm::Id nrows,vtkm::Id ncols,vtkm::Id nslices)92 ExecutionObject_MeshStructure_3D(vtkm::Id nrows, vtkm::Id ncols, vtkm::Id nslices) 93 : nRows(nrows) 94 , nCols(ncols) 95 , nSlices(nslices) 96 { 97 } 98 99 // vertex row - integer modulus by (nRows&nCols) and integer divide by columns 100 VTKM_EXEC vertexRow(vtkm::Id v)101 vtkm::Id vertexRow(vtkm::Id v) const { return (v % (nRows * nCols)) / nCols; } 102 103 // vertex column -- integer modulus by columns 104 VTKM_EXEC vertexColumn(vtkm::Id v)105 vtkm::Id vertexColumn(vtkm::Id v) const { return v % nCols; } 106 107 // vertex slice -- integer divide by (nRows*nCols) 108 VTKM_EXEC vertexSlice(vtkm::Id v)109 vtkm::Id vertexSlice(vtkm::Id v) const { return v / (nRows * nCols); } 110 111 //vertex ID - row * ncols + col 112 VTKM_EXEC vertexId(vtkm::Id s,vtkm::Id r,vtkm::Id c)113 vtkm::Id vertexId(vtkm::Id s, vtkm::Id r, vtkm::Id c) const 114 { 115 return (s * nRows + r) * nCols + c; 116 } 117 118 vtkm::Id nRows, nCols, nSlices; 119 120 }; // Mesh_DEM_2D_ExecutionObject 121 122 } // namespace mesh_dem_triangulation_worklets 123 } // namespace contourtree_augmented 124 } // namespace worklet 125 } // namespace vtkm 126 127 #endif 128