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