VTK
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  =========================================================================*/
29 #ifndef VTKAMRGAUSSIANPULSESOURCE_H_
30 #define VTKAMRGAUSSIANPULSESOURCE_H_
31 
32 #include "vtkFiltersAMRModule.h" // For export macro
34 
35 #include <cmath> // For std::exp
36 
37 class vtkOverlappingAMR;
38 class vtkUniformGrid;
39 class vtkInformation;
41 
44 {
45 public:
48  void PrintSelf(ostream& os, vtkIndent indent);
49 
51 
52  vtkSetMacro(Dimension,int);
54 
56 
57  vtkSetMacro(NumberOfLevels,int);
59 
61 
63  {this->RefinmentRatio=r;this->Modified();}
65 
67 
68  void SetRootSpacing(double h0)
69  {
70  this->RootSpacing[0]=this->RootSpacing[1]=this->RootSpacing[2]=h0;
71  this->Modified();
72  }
74 
76 
77  vtkSetVector3Macro(PulseOrigin,double);
78  vtkGetVector3Macro(PulseOrigin,double);
79  void SetXPulseOrigin(double f)
80  {this->PulseOrigin[0]=f;this->Modified();}
81  void SetYPulseOrigin(double f)
82  {this->PulseOrigin[1]=f;this->Modified();}
83  void SetZPulseOrigin(double f)
84  {this->PulseOrigin[2]=f;this->Modified();}
86 
88 
89  vtkSetVector3Macro(PulseWidth,double);
90  vtkGetVector3Macro(PulseWidth,double);
91  void SetXPulseWidth(double f)
92  {this->PulseWidth[0]=f;this->Modified();}
93  void SetYPulseWidth(double f)
94  {this->PulseWidth[1]=f;this->Modified();}
95  void SetZPulseWidth(double f)
96  {this->PulseWidth[2]=f;this->Modified();}
98 
100 
101  vtkSetMacro(PulseAmplitude,double);
102  vtkGetMacro(PulseAmplitude,double);
104 
105 protected:
108 
110 
112  virtual int RequestData(vtkInformation *request,
113  vtkInformationVector **inputVector,
114  vtkInformationVector *outputVector);
116 
118 
120  double ComputePulseAt(const double x, const double y, const double z)
121  {
122  double xyz[3]; xyz[0]=x; xyz[1]=y; xyz[2]=z;
123  return( this->ComputePulseAt(xyz) );
124  }
125  double ComputePulseAt( double pt[3] )
126  {
127  double pulse = 0.0;
128  double r = 0.0;
129  for( int i=0; i < this->Dimension; ++i )
130  {
131  double d = pt[i]-this->PulseOrigin[i];
132  double d2 = d*d;
133  double L2 = this->PulseWidth[i]*this->PulseWidth[i];
134  r += d2/L2;
135  }
136  pulse = this->PulseAmplitude*std::exp( -r );
137  return( pulse );
138  }
140 
142 
145  vtkIdType cellIdx,
146  double centroid[3] );
148 
151 
154  vtkUniformGrid* GetGrid( double origin[3], double h[3], int ndim[3] );
155 
157  vtkUniformGrid* RefinePatch(vtkUniformGrid* parent, int patchExtent[6]);
158 
160 
164 
165  double RootSpacing[3];
166  double PulseOrigin[3];
167  double PulseWidth[3];
172 
173 private:
174  vtkAMRGaussianPulseSource(const vtkAMRGaussianPulseSource&); // Not implemented
175  void operator=(const vtkAMRGaussianPulseSource&); // Not implemented
176 };
177 
178 #endif /* VTKAMRGAUSSIANPULSESOURCE_H_ */
vtkAMRGaussianPulseSource::PrintSelf
void PrintSelf(ostream &os, vtkIndent indent)
vtkgl::z
GLdouble GLdouble z
Definition: vtkgl.h:11754
vtkAMRGaussianPulseSource::vtkAMRGaussianPulseSource
vtkAMRGaussianPulseSource()
vtkAMRGaussianPulseSource::RefinePatch
vtkUniformGrid * RefinePatch(vtkUniformGrid *parent, int patchExtent[6])
vtkAMRGaussianPulseSource::SetZPulseWidth
void SetZPulseWidth(double f)
Definition: vtkAMRGaussianPulseSource.h:95
vtkgl::h
GLfloat GLfloat GLfloat GLfloat h
Definition: vtkgl.h:14364
vtkAMRGaussianPulseSource::Generate2DDataSet
void Generate2DDataSet(vtkOverlappingAMR *amr)
vtkAMRGaussianPulseSource::RequestData
virtual int RequestData(vtkInformation *request, vtkInformationVector **inputVector, vtkInformationVector *outputVector)
vtkSetVector3Macro
#define vtkSetVector3Macro(name, type)
Definition: vtkSetGet.h:287
vtkAMRGaussianPulseSource::ComputePulseAt
double ComputePulseAt(double pt[3])
Definition: vtkAMRGaussianPulseSource.h:125
vtkIdType
int vtkIdType
Definition: vtkType.h:275
vtkInformationVector
Store zero or more vtkInformation instances.
Definition: vtkInformationVector.h:41
vtkAMRGaussianPulseSource::SetZPulseOrigin
void SetZPulseOrigin(double f)
Definition: vtkAMRGaussianPulseSource.h:83
vtkAMRGaussianPulseSource::SetYPulseOrigin
void SetYPulseOrigin(double f)
Definition: vtkAMRGaussianPulseSource.h:81
vtkUniformGrid
image data with blanking
Definition: vtkUniformGrid.h:40
vtkTypeMacro
#define vtkTypeMacro(thisClass, superclass)
Definition: vtkSetGet.h:642
vtkObject::Modified
virtual void Modified()
vtkAMRGaussianPulseSource::New
static vtkAMRGaussianPulseSource * New()
vtkAMRGaussianPulseSource::ComputePulseAt
double ComputePulseAt(const double x, const double y, const double z)
Definition: vtkAMRGaussianPulseSource.h:120
vtkgl::x
GLint GLint GLint GLint GLint x
Definition: vtkgl.h:11318
vtkAMRGaussianPulseSource::ComputeCellCenter
void ComputeCellCenter(vtkUniformGrid *grid, vtkIdType cellIdx, double centroid[3])
vtkAMRGaussianPulseSource::PulseAmplitude
double PulseAmplitude
Definition: vtkAMRGaussianPulseSource.h:168
vtkGetVector3Macro
#define vtkGetVector3Macro(name, type)
Definition: vtkSetGet.h:304
vtkFiltersAMRModule.h
vtkAMRGaussianPulseSource
Definition: vtkAMRGaussianPulseSource.h:44
vtkAMRGaussianPulseSource::SetRefinementRatio
void SetRefinementRatio(int r)
Definition: vtkAMRGaussianPulseSource.h:62
vtkAMRGaussianPulseSource::GetGrid
vtkUniformGrid * GetGrid(double origin[3], double h[3], int ndim[3])
vtkAMRGaussianPulseSource::~vtkAMRGaussianPulseSource
virtual ~vtkAMRGaussianPulseSource()
vtkIndent
a simple class to control print indentation
Definition: vtkIndent.h:39
vtkAMRGaussianPulseSource::RefinmentRatio
int RefinmentRatio
Definition: vtkAMRGaussianPulseSource.h:169
vtkOverlappingAMRAlgorithm
Definition: vtkOverlappingAMRAlgorithm.h:36
vtkAMRGaussianPulseSource::SetYPulseWidth
void SetYPulseWidth(double f)
Definition: vtkAMRGaussianPulseSource.h:93
vtkAMRGaussianPulseSource::GeneratePulseField
void GeneratePulseField(vtkUniformGrid *grid)
vtkGetMacro
#define vtkGetMacro(name, type)
Definition: vtkSetGet.h:93
vtkgl::f
GLclampf f
Definition: vtkgl.h:14181
vtkOverlappingAMR
hierarchical dataset of vtkUniformGrids
Definition: vtkOverlappingAMR.h:46
vtkAMRGaussianPulseSource::NumberOfLevels
int NumberOfLevels
Definition: vtkAMRGaussianPulseSource.h:171
vtkInformation
Store vtkAlgorithm input/output information.
Definition: vtkInformation.h:86
vtkSetMacro
vtkSetMacro(IgnoreDriverBugs, bool)
vtkAMRGaussianPulseSource::SetXPulseOrigin
void SetXPulseOrigin(double f)
Definition: vtkAMRGaussianPulseSource.h:79
vtkgl::r
GLdouble GLdouble GLdouble r
Definition: vtkgl.h:11610
VTKFILTERSAMR_EXPORT
#define VTKFILTERSAMR_EXPORT
Definition: vtkFiltersAMRModule.h:15
vtkgl::y
GLint GLint GLint GLint GLint GLint y
Definition: vtkgl.h:11318
vtkAMRGaussianPulseSource::Generate3DDataSet
void Generate3DDataSet(vtkOverlappingAMR *amr)
vtkAMRGaussianPulseSource::SetRootSpacing
void SetRootSpacing(double h0)
Definition: vtkAMRGaussianPulseSource.h:68
vtkAMRGaussianPulseSource::Dimension
int Dimension
Definition: vtkAMRGaussianPulseSource.h:170
vtkOverlappingAMRAlgorithm.h
vtkAMRGaussianPulseSource::SetXPulseWidth
void SetXPulseWidth(double f)
Definition: vtkAMRGaussianPulseSource.h:91