PlasCom2  1.0
XPACC Multi-physics simluation application
GridGenerator.H
Go to the documentation of this file.
1 #include <vector>
2 #include <cmath>
3 
4 namespace gridgen {
5 
6  template<int numDim,size_t numX>
7  int GenerateRegularGrid(std::vector<size_t> &ijk,std::vector<double> &xyz)
8  {
9  double scale[] = {numX};
10  double xMax = 1.0;
11  double xMin = 0.0;
12  double xRange = xMax - xMin;
13  std::vector<double> dX(numDim,0.0);
14  for(int iDim = 0;iDim < numDim;iDim++){
15  dX[iDim] = xRange/(scale[iDim]-1.0);
16  xyz[iDim] = ijk[iDim]*dX[iDim] + xMin;
17  }
18  return(0);
19  };
20 
21  template<int numDim,size_t numX,size_t numY>
22  int GenerateRegularGrid(std::vector<size_t> &ijk,std::vector<double> &xyz)
23  {
24  double scale[] = {numX,numY};
25  double xMax = 1.0;
26  double xMin = 0.0;
27  double xRange = xMax - xMin;
28  std::vector<double> dX(numDim,0.0);
29  for(int iDim = 0;iDim < numDim;iDim++){
30  dX[iDim] = xRange/(scale[iDim]-1.0);
31  xyz[iDim] = ijk[iDim]*dX[iDim] + xMin;
32  }
33  return(0);
34  };
35 
36  template<int numDim,size_t numX,size_t numY,size_t numZ>
37  int GenerateRegularGrid(std::vector<size_t> &ijk,std::vector<double> &xyz)
38  {
39  double scale[] = {numX,numY,numZ};
40  double xMax = 1.0;
41  double xMin = 0.0;
42  double xRange = xMax - xMin;
43  std::vector<double> dX(numDim,0.0);
44  for(int iDim = 0;iDim < numDim;iDim++){
45  dX[iDim] = xRange/(scale[iDim]-1.0);
46  xyz[iDim] = ijk[iDim]*dX[iDim] + xMin;
47  }
48  return(0);
49  };
50 
51  template<int numDim,size_t numX,size_t numY,size_t numZ>
52  int RectilinearGrid1(const std::vector<size_t> &ijk,std::vector<double> &xyz)
53  {
54  double iVar = ((double)(ijk[0]+1)/(double(numX)));
55  xyz[0] = std::pow(iVar,2.0);
56  iVar = ((double)(ijk[1]+1)/(double(numY)));
57  xyz[1] = 2.0*std::pow(iVar,2.0);
58  iVar = ((double)(ijk[2]+1)/(double(numZ)));
59  xyz[2] = 3.0*std::pow(iVar,2.0);
60  return(0);
61  };
62 
63  template<int numDim,size_t numX,size_t numY>
64  int RectilinearGrid1(const std::vector<size_t> &ijk,std::vector<double> &xyz)
65  {
66  double iVar = ((double)(ijk[0]+1)/(double(numX)));
67  xyz[0] = std::pow(iVar,2.0);
68  iVar = ((double)(ijk[1]+1)/(double(numY)));
69  xyz[1] = 2.0*std::pow(iVar,2.0);
70  return(0);
71  }
72 
73  template<int numDim,size_t numX>
74  int RectilinearGrid1(const std::vector<size_t> &ijk,std::vector<double> &xyz)
75  {
76  double iVar = ((double)(ijk[0]+1)/(double(numX)));
77  xyz[0] = std::pow(iVar,2.0);
78  return(0);
79  }
80 
82  template<size_t numX,size_t numY,size_t numZ,int nWave>
83  int VGWavy(const std::vector<size_t> &ijk,std::vector<double> &xyz)
84  {
85  double aX = 1.0;
86  double aY = 1.0;
87  double aZ = 1.0;
88  double lX = 4.0;
89  double lY = 4.0;
90  double lZ = 4.0;
91 
92  double pi = 3.141592653589793238;
93  double pix2 = 2.0*pi;
94  double pixWave = pi*nWave;
95  double dX = lX/(numX);
96  double dY = lY/(numY);
97  double dZ = lZ/(numZ);
98 
99  xyz[0] = -lX/2.0 + dX*(ijk[0]+aX*std::sin(pixWave*ijk[1]*dY/lY)*
100  std::sin(pixWave*ijk[2]*dZ/lZ));
101 
102  xyz[1] = -lY/2.0 + dY*(ijk[1]+aY*std::sin(pixWave*ijk[0]*dX/lX)*
103  std::sin(pixWave*ijk[2]*dZ/lZ));
104 
105  xyz[2] = -lZ/2.0 + dZ*(ijk[2]+aZ*std::sin(pixWave*ijk[0]*dX/lX)*
106  std::sin(pixWave*ijk[1]*dY/lY));
107 
108  return(0);
109  };
110 
111  template<int numDim,size_t numX,size_t numY>
112  int CurvilinearGrid1(const std::vector<size_t> &ijk,std::vector<double> &xyz)
113  {
114  double r0 = 0.25;
115  double rmax = 1.25;
116  double rt = 2.0;
117  double dr = (rmax - r0)/(double(numX-1));
118  double d0 = (2.0*M_PI)/(double(numY));
119  double r = r0 + ijk[0]*dr;
120  double a0 = ijk[1]*d0;
121 
122 
123  xyz[0] = r*std::cos(a0);
124  xyz[1] = r*std::sin(a0);
125 
126  return(0);
127  };
128 
129  int Cylinder2D(const std::vector<int> &inOptions,
130  const std::vector<double> &inParameters,
131  const std::vector<size_t> &gridSizes,
132  const std::vector<size_t> &ij,
133  std::vector<double> &xy)
134  {
135  double r0 = inParameters[0];
136  double rmax = inParameters[1];
137  double dr = (rmax - r0)/(double(gridSizes[0]-1));
138  double d0 = (2.0*M_PI)/(double(gridSizes[1]));
139  double r = r0 + ij[0]*dr;
140  double a0 = ij[1]*d0;
141 
142  xy[0] = r*std::cos(a0);
143  xy[1] = r*std::sin(a0);
144 
145  return(0);
146  };
147 
148  template<int numDim,size_t numX,size_t numY,size_t numZ>
149  int CurvilinearGrid1(const std::vector<size_t> &ijk,std::vector<double> &xyz)
150  {
151  // double scale[] = {CLSIZE1,CLSIZE2,CLSIZE3};
152  double r0 = 0.25;
153  double rmax = 1.25;
154  double rt = 2.0;
155  double dr = (rmax - r0)/(double(numX-1));
156  double d0 = (2.0*M_PI)/(double(numY));
157  double dp = (2.0*M_PI)/(double(numZ));
158  double r = r0 + ijk[0]*dr;
159  double a0 = ijk[1]*d0;
160 
161 
162  double phi = ijk[2]*dp;
163  xyz[0] = (rt + r*std::cos(a0))*std::sin(phi);
164  xyz[1] = (rt + r*std::cos(a0))*std::cos(phi);
165  xyz[2] = r*std::sin(a0);
166 
167  return(0);
168  };
169 
170  template<int numDim,size_t numX,size_t numY>
171  int CurvilinearGrid2(const std::vector<size_t> &ijk,std::vector<double> &xyz)
172  {
173  // double scale[] = {CLSIZE1,CLSIZE2,CLSIZE3};
174 
175  double I = (ijk[0] + 1)/numX;
176  double J = (ijk[1] + 1)/numY;
177 
178  if(numDim == 2){
179  xyz[0] = I*I + J;
180  xyz[1] = 2.0*J*J + I;
181  } else if (numDim == 3){
182  double K = ijk[2] + 1;
183  xyz[0] = I*I + 2.0*J*J + K;
184  xyz[1] = J*J + 2.0*K*K + I;
185  xyz[2] = 2.0*I*I + 3.0*K*K + J;
186  }
187  return(0);
188  };
189 
190 
191 
192 }
193 // template<int numDim,std::vector<double> scale>
194 // int RectilinearMetric1(const std::vector<size_t> &ijk,
195 // std::vector<double> &xyz,double &jacm1)
196 // {
197 // // double scale[] = {101,51,21};
198 // double dxDXi = 2.0*(ijk[0]+1)/(scale[0]*scale[0]);
199 // double dyDEta = 4.0*(ijk[1]+1)/(scale[1]*scale[1]);
200 // xyz[0] = dyDEta;
201 // xyz[1] = dxDXi;
202 // jacm1 = xyz[0]*xyz[1];
203 // if (numDim == 3){
204 // double dzDZeta = 6.0*(ijk[2]+1)/(scale[2]*scale[2]);
205 // xyz[0] = dyDEta*dzDZeta;
206 // xyz[1] = dxDXi*dzDZeta;
207 // xyz[2] = dxDXi*dyDEta;
208 // jacm1 = xyz[0]*xyz[1]*xyz[2];
209 // }
210 // return(0);
211 // };
int VGWavy(const std::vector< size_t > &ijk, std::vector< double > &xyz)
Eqn (24) from Visbal & Gaitonde.
Definition: GridGenerator.H:83
void const size_t const size_t * gridSizes
Definition: EulerKernels.H:10
int CurvilinearGrid2(const std::vector< size_t > &ijk, std::vector< double > &xyz)
int GenerateRegularGrid(std::vector< size_t > &ijk, std::vector< double > &xyz)
Definition: GridGenerator.H:7
int Cylinder2D(const std::vector< int > &inOptions, const std::vector< double > &inParameters, const std::vector< size_t > &gridSizes, const std::vector< size_t > &ij, std::vector< double > &xy)
int RectilinearGrid1(const std::vector< size_t > &ijk, std::vector< double > &xyz)
Definition: GridGenerator.H:52
int CurvilinearGrid1(const std::vector< size_t > &ijk, std::vector< double > &xyz)