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 2017 National Technology & Engineering Solutions of Sandia, LLC (NTESS). 10 // Copyright 2017 UT-Battelle, LLC. 11 // Copyright 2017 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 21 #ifndef vtk_m_filter_Lagrangian_h 22 #define vtk_m_filter_Lagrangian_h 23 24 #include <vtkm/filter/FilterDataSetWithField.h> 25 26 namespace vtkm 27 { 28 namespace filter 29 { 30 31 class Lagrangian : public vtkm::filter::FilterDataSetWithField<Lagrangian> 32 { 33 public: 34 VTKM_CONT 35 Lagrangian(); 36 37 VTKM_CONT SetRank(vtkm::Id val)38 void SetRank(vtkm::Id val) { this->rank = val; } 39 40 VTKM_CONT SetInitFlag(bool val)41 void SetInitFlag(bool val) { this->initFlag = val; } 42 43 VTKM_CONT SetExtractFlows(bool val)44 void SetExtractFlows(bool val) { this->extractFlows = val; } 45 46 VTKM_CONT SetResetParticles(bool val)47 void SetResetParticles(bool val) { this->resetParticles = val; } 48 49 VTKM_CONT SetStepSize(vtkm::Float32 val)50 void SetStepSize(vtkm::Float32 val) { this->stepSize = val; } 51 52 VTKM_CONT SetWriteFrequency(vtkm::Id val)53 void SetWriteFrequency(vtkm::Id val) { this->writeFrequency = val; } 54 55 VTKM_CONT SetSeedResolutionInX(vtkm::Id val)56 void SetSeedResolutionInX(vtkm::Id val) { this->x_res = val; } 57 58 VTKM_CONT SetSeedResolutionInY(vtkm::Id val)59 void SetSeedResolutionInY(vtkm::Id val) { this->y_res = val; } 60 61 VTKM_CONT SetSeedResolutionInZ(vtkm::Id val)62 void SetSeedResolutionInZ(vtkm::Id val) { this->z_res = val; } 63 64 VTKM_CONT SetCustomSeedResolution(vtkm::Id val)65 void SetCustomSeedResolution(vtkm::Id val) { this->cust_res = val; } 66 67 VTKM_CONT SetSeedingResolution(vtkm::Id3 val)68 void SetSeedingResolution(vtkm::Id3 val) { this->SeedRes = val; } 69 70 VTKM_CONT 71 void UpdateSeedResolution(vtkm::cont::DataSet input); 72 73 VTKM_CONT 74 void WriteDataSet(vtkm::Id cycle, std::string filename, vtkm::cont::DataSet dataset); 75 76 VTKM_CONT 77 void InitializeUniformSeeds(const vtkm::cont::DataSet& input); 78 79 template <typename T, typename StorageType, typename DerivedPolicy, typename DeviceAdapter> 80 VTKM_CONT vtkm::cont::DataSet DoExecute( 81 const vtkm::cont::DataSet& input, 82 const vtkm::cont::ArrayHandle<vtkm::Vec<T, 3>, StorageType>& field, 83 const vtkm::filter::FieldMetadata& fieldMeta, 84 const vtkm::filter::PolicyBase<DerivedPolicy>& policy, 85 const DeviceAdapter& tag); 86 87 88 template <typename T, typename StorageType, typename DerivedPolicy, typename DeviceAdapter> 89 VTKM_CONT bool DoMapField(vtkm::cont::DataSet& result, 90 const vtkm::cont::ArrayHandle<T, StorageType>& input, 91 const vtkm::filter::FieldMetadata& fieldMeta, 92 const vtkm::filter::PolicyBase<DerivedPolicy>& policy, 93 const DeviceAdapter& tag); 94 95 private: 96 vtkm::Id rank; 97 bool initFlag; 98 bool extractFlows; 99 bool resetParticles; 100 vtkm::Float32 stepSize; 101 vtkm::Id x_res, y_res, z_res; 102 vtkm::Id cust_res; 103 vtkm::Id3 SeedRes; 104 vtkm::Id writeFrequency; 105 }; 106 107 template <> 108 class FilterTraits<Lagrangian> 109 { 110 public: 111 struct TypeListTagLagrangian 112 : vtkm::ListTagBase<vtkm::Vec<vtkm::Float32, 3>, vtkm::Vec<vtkm::Float64, 3>> 113 { 114 }; 115 using InputFieldTypeList = TypeListTagLagrangian; 116 }; 117 } 118 } // namespace vtkm::filter 119 120 #include <vtkm/filter/Lagrangian.hxx> 121 122 #endif // vtk_m_filter_Lagrangian_h 123