VTK  9.0.1
vtkAMRGaussianPulseSource.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkAMRGaussianPulseSource.h
5 
6  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7  All rights reserved.
8  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9 
10  This software is distributed WITHOUT ANY WARRANTY; without even
11  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12  PURPOSE. See the above copyright notice for more information.
13 
14  =========================================================================*/
27 #ifndef vtkAMRGaussianPulseSource_h
28 #define vtkAMRGaussianPulseSource_h
29 
30 #include "vtkFiltersAMRModule.h" // For export macro
32 
33 #include <cmath> // For std::exp
34 
35 class vtkOverlappingAMR;
36 class vtkUniformGrid;
37 class vtkInformation;
39 
40 class VTKFILTERSAMR_EXPORT vtkAMRGaussianPulseSource : public vtkOverlappingAMRAlgorithm
41 {
42 public:
45  void PrintSelf(ostream& os, vtkIndent indent) override;
46 
48 
51  vtkSetMacro(Dimension, int);
53 
55 
58  vtkSetMacro(NumberOfLevels, int);
60 
64  void SetRefinementRatio(int r)
65  {
66  this->RefinmentRatio = r;
67  this->Modified();
68  }
69 
71 
74  void SetRootSpacing(double h0)
75  {
76  this->RootSpacing[0] = this->RootSpacing[1] = this->RootSpacing[2] = h0;
77  this->Modified();
78  }
80 
82 
85  vtkSetVector3Macro(PulseOrigin, double);
86  vtkGetVector3Macro(PulseOrigin, double);
87  void SetXPulseOrigin(double f)
88  {
89  this->PulseOrigin[0] = f;
90  this->Modified();
91  }
92  void SetYPulseOrigin(double f)
93  {
94  this->PulseOrigin[1] = f;
95  this->Modified();
96  }
97  void SetZPulseOrigin(double f)
98  {
99  this->PulseOrigin[2] = f;
100  this->Modified();
101  }
103 
105 
108  vtkSetVector3Macro(PulseWidth, double);
109  vtkGetVector3Macro(PulseWidth, double);
110  void SetXPulseWidth(double f)
111  {
112  this->PulseWidth[0] = f;
113  this->Modified();
114  }
115  void SetYPulseWidth(double f)
116  {
117  this->PulseWidth[1] = f;
118  this->Modified();
119  }
120  void SetZPulseWidth(double f)
121  {
122  this->PulseWidth[2] = f;
123  this->Modified();
124  }
126 
128 
131  vtkSetMacro(PulseAmplitude, double);
132  vtkGetMacro(PulseAmplitude, double);
134 
135 protected:
137  ~vtkAMRGaussianPulseSource() override;
138 
143  int RequestData(vtkInformation* request, vtkInformationVector** inputVector,
144  vtkInformationVector* outputVector) override;
145 
147 
151  double ComputePulseAt(const double x, const double y, const double z)
152  {
153  double xyz[3];
154  xyz[0] = x;
155  xyz[1] = y;
156  xyz[2] = z;
157  return (this->ComputePulseAt(xyz));
158  }
159  double ComputePulseAt(double pt[3])
160  {
161  double pulse = 0.0;
162  double r = 0.0;
163  for (int i = 0; i < this->Dimension; ++i)
164  {
165  double d = pt[i] - this->PulseOrigin[i];
166  double d2 = d * d;
167  double L2 = this->PulseWidth[i] * this->PulseWidth[i];
168  r += d2 / L2;
169  }
170  pulse = this->PulseAmplitude * std::exp(-r);
171  return (pulse);
172  }
174 
179  void ComputeCellCenter(vtkUniformGrid* grid, vtkIdType cellIdx, double centroid[3]);
180 
184  void GeneratePulseField(vtkUniformGrid* grid);
185 
190  vtkUniformGrid* GetGrid(double origin[3], double h[3], int ndim[3]);
191 
195  vtkUniformGrid* RefinePatch(vtkUniformGrid* parent, int patchExtent[6]);
196 
198 
201  void Generate2DDataSet(vtkOverlappingAMR* amr);
202  void Generate3DDataSet(vtkOverlappingAMR* amr);
204 
205  double RootSpacing[3];
206  double PulseOrigin[3];
207  double PulseWidth[3];
212 
213 private:
215  void operator=(const vtkAMRGaussianPulseSource&) = delete;
216 };
217 
218 #endif /* vtkAMRGaussianPulseSource_h */
vtkAMRGaussianPulseSource::SetZPulseWidth
void SetZPulseWidth(double f)
Definition: vtkAMRGaussianPulseSource.h:120
vtkOverlappingAMRAlgorithm::New
static vtkOverlappingAMRAlgorithm * New()
vtkAMRGaussianPulseSource::ComputePulseAt
double ComputePulseAt(double pt[3])
Definition: vtkAMRGaussianPulseSource.h:159
vtkIdType
int vtkIdType
Definition: vtkType.h:338
vtkOverlappingAMRAlgorithm::PrintSelf
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkInformationVector
Store zero or more vtkInformation instances.
Definition: vtkInformationVector.h:35
vtkAMRGaussianPulseSource::SetZPulseOrigin
void SetZPulseOrigin(double f)
Definition: vtkAMRGaussianPulseSource.h:97
vtkAMRGaussianPulseSource::SetYPulseOrigin
void SetYPulseOrigin(double f)
Definition: vtkAMRGaussianPulseSource.h:92
vtkUniformGridAMRAlgorithm::RequestData
virtual int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *)
This is called by the superclass.
Definition: vtkUniformGridAMRAlgorithm.h:90
vtkUniformGrid
image data with blanking
Definition: vtkUniformGrid.h:34
vtkObject::Modified
virtual void Modified()
Update the modification time for this object.
vtkAMRGaussianPulseSource::ComputePulseAt
double ComputePulseAt(const double x, const double y, const double z)
Computes the gaussian pulse at the given location based on the user supplied parameters for pulse wid...
Definition: vtkAMRGaussianPulseSource.h:151
vtkAMRGaussianPulseSource::PulseAmplitude
double PulseAmplitude
Definition: vtkAMRGaussianPulseSource.h:208
vtkAMRGaussianPulseSource
Definition: vtkAMRGaussianPulseSource.h:40
vtkAMRGaussianPulseSource::SetRefinementRatio
void SetRefinementRatio(int r)
Set the refinement ratio.
Definition: vtkAMRGaussianPulseSource.h:64
vtkIndent
a simple class to control print indentation
Definition: vtkIndent.h:33
vtkAMRGaussianPulseSource::RefinmentRatio
int RefinmentRatio
Definition: vtkAMRGaussianPulseSource.h:209
vtkOverlappingAMRAlgorithm
Definition: vtkOverlappingAMRAlgorithm.h:32
vtkAMRGaussianPulseSource::SetYPulseWidth
void SetYPulseWidth(double f)
Definition: vtkAMRGaussianPulseSource.h:115
vtkOverlappingAMR
hierarchical dataset of vtkUniformGrids
Definition: vtkOverlappingAMR.h:40
vtkAMRGaussianPulseSource::NumberOfLevels
int NumberOfLevels
Definition: vtkAMRGaussianPulseSource.h:211
vtkInformation
Store vtkAlgorithm input/output information.
Definition: vtkInformation.h:73
vtkAMRGaussianPulseSource::SetXPulseOrigin
void SetXPulseOrigin(double f)
Definition: vtkAMRGaussianPulseSource.h:87
vtkAMRGaussianPulseSource::SetRootSpacing
void SetRootSpacing(double h0)
Set the root spacing.
Definition: vtkAMRGaussianPulseSource.h:74
vtkAMRGaussianPulseSource::Dimension
int Dimension
Definition: vtkAMRGaussianPulseSource.h:210
vtkOverlappingAMRAlgorithm.h
vtkAMRGaussianPulseSource::SetXPulseWidth
void SetXPulseWidth(double f)
Definition: vtkAMRGaussianPulseSource.h:110
h