11 shared_ptr<Array<VecD3> >
16 double vx=0, vy=0, vz=0;
19 fscanf(fp,
"%i\n",&nGrid);
20 shared_ptr<Array<VecD3> > Grid_Points (
new Array<VecD3> (nGrid));
23 for(
int i=0; i<nGrid; i++){
24 fscanf(fp,
"%lf\t%lf\t%lf\n", &vx, &vy, &vz);
25 (*Grid_Points)[i][0]=vx;
26 (*Grid_Points)[i][1]=vy;
27 (*Grid_Points)[i][2]=vz;
34 string velocityFileName):
35 _geomFields(geomFields),
36 _flowFields(flowFields),
72 const int nGridCells = gridCells.
getCount();
74 const CRConnectivity& cellToGrids = mesh.getConnectivity(gridCells, grids);
77 for(
int n=0; n<nb.size();n++){
78 cout<<
"point is in cell "<<nb[n]<<endl;
89 double gapX=1.4/nX, gapY=1.2/nY, gapZ=0.0/nZ;
97 VecD3 gridCoord[nX*nY*nZ];
98 VecD3 gridVelocity[nX*nY*nZ];
101 for(
int i=0; i<nX; i++){
102 for(
int j=0; j<nY; j++){
103 for(
int k=0; k<nZ; k++){
104 gridCoord[count][0]=i*gapX-0.023;
105 gridCoord[count][1]=-j*gapY+0.92;
106 gridCoord[count][2]=k*gapZ;
113 const double vMax=1.0;
114 const double vMin=0.0;
115 const double vGap=(vMax-vMin)/nX;
117 for(
int i=0; i<nX; i++){
118 for(
int j=0; j<nY; j++){
119 for(
int k=0; k<nZ; k++){
120 gridVelocity[count][0]=vMin+vGap*i;
121 gridVelocity[count][1]=0.0;
122 gridVelocity[count][2]=0.0;
128 string fileName1=fileBase+
"Grid_Coord.dat";
131 FILE *fp1=fopen(file1,
"w");
132 fprintf(fp1,
"%i\n",count);
133 for(
int p=0; p<count; p++){
134 fprintf(fp1,
"%lf\t%lf\t%lf\n", gridCoord[p][0], gridCoord[p][1], gridCoord[p][2]);
139 string fileName2=fileBase+
"Grid_Velocity.dat";
142 FILE *fp2=fopen(file2,
"w");
143 fprintf(fp2,
"%i\n",count);
144 for(
int p=0; p<count; p++){
145 fprintf(fp2,
"%lf\t%lf\t%lf\n", gridVelocity[p][0],gridVelocity[p][1],gridVelocity[p][2]);
153 const int nXGrid = 7;
154 const int nYGrid = 3;
157 const int nGridCells = (nXGrid-1)*(nYGrid-1)*2;
163 (*_cellNodes).initCount();
164 for (
int n=0; n<nGridCells; n++){
165 (*_cellNodes).addCount(n, 3);
167 (*_cellNodes).finishCount();
168 int node1, node2, node3;
170 for (
int n=0; n<nGridCells/2; n+=2){
174 (*_cellNodes).add(n, node1);
175 (*_cellNodes).add(n, node2);
176 (*_cellNodes).add(n, node3);
180 (*_cellNodes).add(n+1, node1);
181 (*_cellNodes).add(n+1, node2);
182 (*_cellNodes).add(n+1, node3);
186 for (
int n=nGridCells/2; n<nGridCells; n+=2){
190 (*_cellNodes).add(n, node1);
191 (*_cellNodes).add(n, node2);
192 (*_cellNodes).add(n, node3);
196 (*_cellNodes).add(n+1, node1);
197 (*_cellNodes).add(n+1, node2);
198 (*_cellNodes).add(n+1, node3);
202 (*_cellNodes).finishAdd();
211 vector<int> neighborList;
216 for (
int c=0; c<nCells; c++){
217 const int nsize = cellNodes.
getCount(c);
219 for(
int n=0; n<nsize; n++){
220 node[n] = cellNodes(c,n);
224 for(
int n=0; n<nsize-1; n++){
225 faceArea[n]=nodeCoords[node[n+1]]-nodeCoords[node[n]];
226 faceCentroid[n]=(nodeCoords[node[n+1]]+nodeCoords[node[n]])/2.;
228 faceArea[nsize-1]=nodeCoords[node[0]]-nodeCoords[node[nsize-1]];
229 faceCentroid[nsize-1]=(nodeCoords[node[0]]+nodeCoords[node[nsize-1]])/2.;
232 for(
int n=0; n<nsize; n++){
234 faceNorm[0]=faceArea[n][1];
235 faceNorm[1]=-faceArea[n][0];
236 faceNorm[2]=faceArea[n][2];
238 VecD3 dr = point - faceCentroid[n];
240 if (
dot(faceNorm,dr) > 0.0) {
247 for(
int n=0; n<nsize; n++){
248 node[n]=cellNodes(c,n);
249 neighborList.push_back(node[n]);
251 return(neighborList);
259 double distMin = 1.0e10;
261 for (
int c=0; c<nCells; c++){
262 const int nsize = cellNodes.
getCount(c);
267 for(
int n=0; n<nsize; n++){
268 cellCentroid += nodeCoords[cellNodes(c,n)];
271 VecD3 dr = point - cellCentroid;
272 double distance =
mag(dr);
273 if(distance < distMin){
278 const int nsize = cellNodes.
getCount(closestCell);
279 for(
int n=0; n<nsize; n++){
280 neighborList.push_back(cellNodes(closestCell,n));
282 return(neighborList);
295 const int nNodes = nodeCoords.
getLength();
297 vector<int> neighborList;
305 for (
int i=0; i<nNodes; i++){
306 for(
int k=0; k<3; k++){
307 if(point[k]<nodeCoords[i][k]) {
310 if (point[k]>nodeCoords[i][k]) {
317 if(mFlag[0]==nNodes||mFlag[1]==nNodes||mFlag[2]==nNodes||pFlag[0]==nNodes||pFlag[1]==nNodes||pFlag[2]==nNodes)
318 return (neighborList);
322 VecD3 pLimit, mLimit, allow, dR;
323 for(
int k=0; k<3; k++){
330 for(
int i=0; i<nNodes; i++){
331 dR = point - nodeCoords[i];
332 for(
int k=0; k<3; k++){
333 if( dR[k]<=0.0 && dR[k]>mLimit[k] ){
336 if (dR[k]>=0.0 && dR[k]<pLimit[k]){
344 for(
int i=0; i<nNodes; i++){
345 if(nodeCoords[i][0]>(point[0]-pLimit[0]-allow[0])&& nodeCoords[i][0]<(point[0]-mLimit[0]+allow[0])){
346 if(nodeCoords[i][1]>(point[1]-pLimit[1]-allow[1])&& nodeCoords[i][1]<(point[1]-mLimit[1]+allow[1])){
347 if(nodeCoords[i][2]>(point[2]-pLimit[2]-allow[2])&& nodeCoords[i][2]<(point[2]-mLimit[2]+allow[2])){
348 neighborList.push_back(i);
354 return(neighborList);
362 const shared_ptr<CRConnectivity>
368 (*pointToNodes).initCount();
370 const int nPoints = pointSite.
getCount();
372 for(
int i=0; i<nPoints; i++){
375 int count = neighborList.size();
377 (*pointToNodes).addCount(i, count);
380 (*pointToNodes).finishCount();
382 for(
int i=0; i<nPoints; i++){
384 int count = neighborList.size();
385 for(
int j=0; j<count; j++){
386 (*pointToNodes).add(i, neighborList[j]);
389 (*pointToNodes).finishAdd();
391 return(pointToNodes);
403 shared_ptr<CRConnectivity> faceGridsCR =
410 shared_ptr<ArrayBase>
417 const int nFaces = faces.
getCount();
426 shared_ptr<VecD3Array> faceV(
new VecD3Array(nFaces));
Array< VecD3 > VecD3Array
int getCount(const int i) const
void setandwriteGrids(const string fileBase)
shared_ptr< Array< VecD3 > > readVectors(const char *file)
shared_ptr< ArrayBase > computeInterpolatedVelocity(const StorageSite &faces)
T mag(const Vector< T, 3 > &a)
Grid(GeomFields &geomFields, FlowFields &flowFields, string coordFileName, string velocityFileName)
void setCount(const int selfCount, const int nGhost=0)
void setConnectivity(const StorageSite &rowSite, const StorageSite &colSite, shared_ptr< CRConnectivity > conn)
vector< int > findNeighbors(const VecD3 &point)
!! only applicable for rectangular mesh
Vector< double, 3 > VecD3
vector< int > findNeighborsByCells(const VecD3 &point)
map< SSPair, shared_ptr< Matrix > > _interpolationMatrices
shared_ptr< Array< VecD3 > > _coordinates
shared_ptr< CRConnectivity > _cellNodes
const shared_ptr< CRConnectivity > createConnectivity(const StorageSite &pointSite, const VecD3Array &points)
void addArray(const StorageSite &, shared_ptr< ArrayBase > a)
shared_ptr< Array< VecD3 > > _velocities
void setConnFaceToGrid(Mesh &mesh, const StorageSite &faces)
void createCellToNodeConnectivity()
T dot(const Vector< T, 3 > &a, const Vector< T, 3 > &b)
pair< const StorageSite *, const StorageSite * > SSPair