18 #ifndef itkGPUFiniteDifferenceImageFilter_h
19 #define itkGPUFiniteDifferenceImageFilter_h
37 template <
typename TInputImage,
38 typename TOutputImage,
39 typename TParentImageFilter = FiniteDifferenceImageFilter<TInputImage, TOutputImage>>
61 static constexpr
unsigned int ImageDimension = OutputImageType::ImageDimension;
76 using TimeStepType =
typename FiniteDifferenceFunctionType::TimeStepType;
77 using RadiusType =
typename FiniteDifferenceFunctionType::RadiusType;
86 return this->m_DifferenceFunction;
95 itkDebugMacro(
"setting m_DifferenceFunction to " << differenceFunction);
96 if (this->m_DifferenceFunction != differenceFunction)
98 this->m_DifferenceFunction = differenceFunction;
104 #if !defined(ITK_LEGACY_REMOVE)
127 #if !defined(ITK_WRAPPING_PARSER)
133 #ifdef ITK_USE_CONCEPT_CHECKING
140 itkGetConstReferenceMacro(InitTime,
TimeProbe);
141 itkGetConstReferenceMacro(ComputeUpdateTime,
TimeProbe);
142 itkGetConstReferenceMacro(ApplyUpdateTime,
TimeProbe);
143 itkGetConstReferenceMacro(SmoothFieldTime,
TimeProbe);
151 PrintSelf(std::ostream & os,
Indent indent)
const override;
155 AllocateUpdateBuffer()
override = 0;
161 GPUApplyUpdate(
const TimeStepType & dt) = 0;
169 GPUCalculateChange() = 0;
175 CopyInputToOutput()
override = 0;
181 GPUGenerateData()
override;
195 GenerateInputRequestedRegion()
override;
235 m_DifferenceFunction->InitializeIteration();
251 ResolveTimeStep(
const std::vector<TimeStepType> & timeStepList,
const BooleanStdVectorType & valid)
const override;
260 TimeProbe m_InitTime, m_ComputeUpdateTime, m_ApplyUpdateTime, m_SmoothFieldTime{};
267 InitializeFunctionCoefficients();
274 bool m_UseImageSpacing{};
282 #ifndef ITK_MANUAL_INSTANTIATION
283 # include "itkGPUFiniteDifferenceImageFilter.hxx"