1 //============================================================================ 2 // Copyright (c) Kitware, Inc. 3 // All rights reserved. 4 // See LICENSE.txt for details. 5 // 6 // This software is distributed WITHOUT ANY WARRANTY; without even 7 // the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 8 // PURPOSE. See the above copyright notice for more information. 9 //============================================================================ 10 // Copyright (c) 2016, Los Alamos National Security, LLC 11 // All rights reserved. 12 // 13 // Copyright 2016. Los Alamos National Security, LLC. 14 // This software was produced under U.S. Government contract DE-AC52-06NA25396 15 // for Los Alamos National Laboratory (LANL), which is operated by 16 // Los Alamos National Security, LLC for the U.S. Department of Energy. 17 // The U.S. Government has rights to use, reproduce, and distribute this 18 // software. NEITHER THE GOVERNMENT NOR LOS ALAMOS NATIONAL SECURITY, LLC 19 // MAKES ANY WARRANTY, EXPRESS OR IMPLIED, OR ASSUMES ANY LIABILITY FOR THE 20 // USE OF THIS SOFTWARE. If software is modified to produce derivative works, 21 // such modified software should be clearly marked, so as not to confuse it 22 // with the version available from LANL. 23 // 24 // Additionally, redistribution and use in source and binary forms, with or 25 // without modification, are permitted provided that the following conditions 26 // are met: 27 // 28 // 1. Redistributions of source code must retain the above copyright notice, 29 // this list of conditions and the following disclaimer. 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 // 3. Neither the name of Los Alamos National Security, LLC, Los Alamos 34 // National Laboratory, LANL, the U.S. Government, nor the names of its 35 // contributors may be used to endorse or promote products derived from 36 // this software without specific prior written permission. 37 // 38 // THIS SOFTWARE IS PROVIDED BY LOS ALAMOS NATIONAL SECURITY, LLC AND 39 // CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, 40 // BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 41 // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL LOS ALAMOS 42 // NATIONAL SECURITY, LLC OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 43 // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 44 // BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 45 // USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 46 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 47 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 48 // THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 49 //============================================================================ 50 51 #ifndef vtkm_worklet_cosmotools_valid_halo_h 52 #define vtkm_worklet_cosmotools_valid_halo_h 53 54 #include <vtkm/worklet/WorkletMapField.h> 55 56 namespace vtkm 57 { 58 namespace worklet 59 { 60 namespace cosmotools 61 { 62 63 // Return 1 for every unique halo meeting minimum size 64 class ValidHalo : public vtkm::worklet::WorkletMapField 65 { 66 public: 67 using ControlSignature = void(FieldIn index, 68 FieldIn partPerHalo, 69 WholeArrayIn haloId, 70 FieldOut isValidHalo); 71 using ExecutionSignature = _4(_1, _2, _3); 72 using InputDomain = _1; 73 74 vtkm::Id pmin; 75 76 // Constructor 77 VTKM_EXEC_CONT ValidHalo(vtkm::Id minimumHalo)78 ValidHalo(vtkm::Id minimumHalo) 79 : pmin(minimumHalo) 80 { 81 } 82 83 template <typename InPortalType> operator()84 VTKM_EXEC vtkm::Id operator()(const vtkm::Id& i, 85 const vtkm::Id& partPerHalo, 86 const InPortalType& haloId) const 87 { 88 // Boundary condition 89 if ((i == 0) && (partPerHalo >= pmin)) 90 return 1; 91 // Return valid if it is the first particle in halo of correct size 92 if ((haloId.Get(i) != haloId.Get(i - 1)) && (partPerHalo >= pmin)) 93 return 1; 94 return 0; 95 } 96 }; // ValidHalo 97 } 98 } 99 } 100 101 #endif 102