11 #ifndef vtk_m_filter_flow_internal_DataSetIntegratorUnsteadyState_h
12 #define vtk_m_filter_flow_internal_DataSetIntegratorUnsteadyState_h
27 class DataSetIntegratorUnsteadyState
28 :
public vtkm::filter::flow::internal::DataSetIntegrator<DataSetIntegratorUnsteadyState>
36 const vtkm::filter::flow::internal::DataSetIntegrator<
37 DataSetIntegratorUnsteadyState>::FieldNameType& fieldName,
41 :
vtkm::filter::flow::internal::DataSetIntegrator<DataSetIntegratorUnsteadyState>(id,
53 VTKM_CONT inline void DoAdvect(DSIHelperInfo<vtkm::Particle>& b,
57 VTKM_CONT inline void DoAdvect(DSIHelperInfo<vtkm::ChargedParticle>& b,
62 template <
typename ArrayType>
67 if (this->FieldName.GetIndex() == this->FieldName.GetIndexOf<VelocityFieldNameType>())
69 const auto& fieldNm = this->FieldName.Get<VelocityFieldNameType>();
70 auto assoc = this->DataSet1.GetField(fieldNm).GetAssociation();
71 if (assoc != this->DataSet2.GetField(fieldNm).GetAssociation())
73 "Unsteady state velocity fields have differnt associations");
101 template <
typename Gr
idEvalType,
typename ParticleType>
104 template <
typename ParticleType>
105 class AdvectHelper<UnsteadyStateGridEvalType, ParticleType>
108 static void Advect(
const VelocityFieldType& velField1,
111 const VelocityFieldType& velField2,
125 velField1, ds1, t1, velField2, ds2, t2, seedArray, stepSize, maxSteps, result);
132 velField1, ds1, t1, velField2, ds2, t2, seedArray, stepSize, maxSteps, result);
138 static void Advect(
const VelocityFieldType& velField1,
141 const VelocityFieldType& velField2,
155 velField1, ds1, t1, velField2, ds2, t2, seedArray, stepSize, maxSteps, result);
162 velField1, ds1, t1, velField2, ds2, t2, seedArray, stepSize, maxSteps, result);
168 template <
typename WorkletType,
173 static void DoAdvect(
const VelocityFieldType& velField1,
176 const VelocityFieldType& velField2,
182 ResultType<ParticleType>& result)
185 UnsteadyStateGridEvalType>;
188 UnsteadyStateGridEvalType eval(ds1, t1, velField1, ds2, t2, velField2);
189 StepperType stepper(eval, stepSize);
190 result = worklet.Run(stepper, seedArray, maxSteps);
196 VTKM_CONT inline void DataSetIntegratorUnsteadyState::DoAdvect(DSIHelperInfo<vtkm::Particle>& b,
205 using AHType = internal::AdvectHelper<internal::UnsteadyStateGridEvalType, vtkm::Particle>;
210 FieldType velField1, velField2;
211 this->GetVelocityFields(velField1, velField2);
213 if (this->IsParticleAdvectionResult())
216 AHType::Advect(velField1,
227 this->UpdateResult(result, b);
229 else if (this->IsStreamlineResult())
232 AHType::Advect(velField1,
243 this->UpdateResult(result, b);
252 VTKM_CONT inline void DataSetIntegratorUnsteadyState::DoAdvect(
253 DSIHelperInfo<vtkm::ChargedParticle>&
vtkmNotUsed(b),
258 "Unsupported operation : charged particles and electromagnetic fielfs currently only supported "
267 #endif //vtk_m_filter_flow_internal_DataSetIntegratorUnsteadyState_h