Rocstar  1.0
Rocstar multiphysics simulation application
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
block Class Reference

#include <adj.h>

Collaboration diagram for block:

Public Types

enum  {
  iMin =0, jMin =1, kMin =2, iMax =3,
  jMax =4, kMax =5, nFaces =6
}
 

Public Member Functions

 block (const blockDim &dim_, int originalNo_, int blockNo_, vector3d *nodeLocs_)
 
 ~block ()
 
int getBlockNumber (void) const
 
int getOriginalNumber (void) const
 
const blockDimgetDim (void) const
 
const vector3dgetLoc (const blockLoc &l) const
 
void split (int nPieces, vector< block * > &dest)
 
void addBC (const blockSpan &span, int bcNo)
 
void buildFaces (nodeMatcher &map)
 
facegetFace (int faceNo)
 
const facegetFace (int faceNo) const
 
int getFaceNo (const face *f)
 

Static Public Attributes

static const char * face2name [nFaces]
 

Private Member Functions

blockLoc pin (const blockLoc &l) const
 
blocksubBlock (const blockSpan &span) const
 

Private Attributes

blockDim dim
 
int originalNo
 
int blockNo
 
vector3dnodeLocs
 
vector< externalBCpatchBCs [nFaces]
 
facefaces [nFaces]
 

Detailed Description

Definition at line 203 of file adj.h.

Member Enumeration Documentation

anonymous enum
Enumerator
iMin 
jMin 
kMin 
iMax 
jMax 
kMax 
nFaces 

Definition at line 230 of file adj.h.

230  {
231  iMin=0,jMin=1,kMin=2,
232  iMax=3,jMax=4,kMax=5,
233  nFaces=6
234  };

Constructor & Destructor Documentation

block ( const blockDim dim_,
int  originalNo_,
int  blockNo_,
vector3d nodeLocs_ 
)

Definition at line 244 of file adj.cpp.

References blockBytes, hashableVector3d::checkVector(), dim, faces, blockDim::getSize(), i, nFaces, and nodeLocs.

Referenced by subBlock().

245  :dim(dim_), originalNo(orig),blockNo(blockNo_), nodeLocs(nodeLocs_)
246 {
249  blockBytes+=dim.getSize()*sizeof(nodeLocs[0]);
250  for (int i=0;i<nFaces;i++)
251  faces[i]=0;
252 }
int blockNo
Definition: adj.h:206
face * faces[nFaces]
Definition: adj.h:241
static void checkVector(const vector3d &v)
Definition: adj.cpp:209
blockLoc i
Definition: read.cpp:79
int originalNo
Definition: adj.h:205
vector3d * nodeLocs
Definition: adj.h:207
int getSize(void) const
Definition: gridutil.h:126
blockDim dim
Definition: adj.h:204
static int blockBytes
Definition: adj.cpp:242

Here is the call graph for this function:

Here is the caller graph for this function:

~block ( )

Definition at line 254 of file adj.cpp.

References faces, i, nFaces, and nodeLocs.

255 {
256  for (int i=0;i<nFaces;i++)
257  delete faces[i];
258  delete[] nodeLocs;
259 }
face * faces[nFaces]
Definition: adj.h:241
blockLoc i
Definition: read.cpp:79
vector3d * nodeLocs
Definition: adj.h:207

Member Function Documentation

void addBC ( const blockSpan span,
int  bcNo 
)

Definition at line 262 of file adj.cpp.

References BCs, and blockSpan::getFace().

Referenced by readBoundaries(), and subBlock().

263 {
264  //Find the face the BC applies to
265  int faceNo=span.getFace();
266  if (faceNo==-1) {fprintf(stderr,"Boundary condition is volumetric!\n");abort();}
267 
268  //Apply the BC to that face
269  BCs[faceNo].push_back(externalBCpatch(NULL,this,span,bcNo));
270 }
vector< externalBCpatch > BCs[nFaces]
Definition: adj.h:240
int getFace(void) const
Definition: gridutil.h:191

Here is the call graph for this function:

Here is the caller graph for this function:

void buildFaces ( nodeMatcher map)

Definition at line 273 of file adj.cpp.

References BCs, dim, face, and faces.

273  {
274  int nx=dim[0];
275  int ny=dim[1];
276  int nz=dim[2];
277  faces[0]=new face(this,map,BCs[0],
278  1,2,blockSpan(blockLoc(0,0,0),blockLoc(1,ny,nz)));
279  faces[1]=new face(this,map,BCs[1],
280  0,2,blockSpan(blockLoc(0,0,0),blockLoc(nx,1,nz)));
281  faces[2]=new face(this,map,BCs[2],
282  0,1,blockSpan(blockLoc(0,0,0),blockLoc(nx,ny,1)));
283  faces[3]=new face(this,map,BCs[3],
284  1,2,blockSpan(blockLoc(nx-1,0,0),blockLoc(nx,ny,nz)));
285  faces[4]=new face(this,map,BCs[4],
286  0,2,blockSpan(blockLoc(0,ny-1,0),blockLoc(nx,ny,nz)));
287  faces[5]=new face(this,map,BCs[5],
288  0,1,blockSpan(blockLoc(0,0,nz-1),blockLoc(nx,ny,nz)));
289 }
vector< externalBCpatch > BCs[nFaces]
Definition: adj.h:240
face * faces[nFaces]
Definition: adj.h:241
static T_VertexSet * face
Definition: vinci_lass.c:79
blockDim dim
Definition: adj.h:204
int getBlockNumber ( void  ) const
inline
const blockDim& getDim ( void  ) const
inline

Definition at line 222 of file adj.h.

References dim.

Referenced by face::buildPatches(), checkQuality(), dirToCorner(), readBoundaries(), volume(), mblockData::blockPatches::write(), and writeBlock().

222 {return dim;}
blockDim dim
Definition: adj.h:204

Here is the caller graph for this function:

face& getFace ( int  faceNo)
inline

Definition at line 248 of file adj.h.

References faces.

Referenced by buildFaces(), findPartner(), mblockData::blockPatches::init(), and writeBlock().

248 {return *faces[faceNo];}
face * faces[nFaces]
Definition: adj.h:241

Here is the caller graph for this function:

const face& getFace ( int  faceNo) const
inline

Definition at line 249 of file adj.h.

References faces.

249 {return *faces[faceNo];}
face * faces[nFaces]
Definition: adj.h:241
int getFaceNo ( const face f)
inline

Definition at line 250 of file adj.h.

References faces, i, and nFaces.

Referenced by face::buildPatches().

250  {
251  for (int i=0;i<nFaces;i++)
252  if (faces[i]==f) return i;
253  return nFaces;
254  }
face * faces[nFaces]
Definition: adj.h:241
blockLoc i
Definition: read.cpp:79

Here is the caller graph for this function:

const vector3d& getLoc ( const blockLoc l) const
inline

Definition at line 223 of file adj.h.

References dim, and nodeLocs.

Referenced by buildFaces(), checkQuality(), and face::face().

224  {return nodeLocs[dim[l]];}
vector3d * nodeLocs
Definition: adj.h:207
blockDim dim
Definition: adj.h:204

Here is the caller graph for this function:

int getOriginalNumber ( void  ) const
inline

Definition at line 220 of file adj.h.

References originalNo.

Referenced by face::buildPatches(), checkQuality(), face::face(), split(), and writeBlock().

220 { return originalNo; }
int originalNo
Definition: adj.h:205

Here is the caller graph for this function:

blockLoc pin ( const blockLoc l) const
private

Definition at line 77 of file split.cpp.

References dim, and i.

Referenced by bcondoutflowperf_gl(), modinterfacesbcond::BcondOutflowPerf_GL::bcondoutflowperf_gl(), init_py::burn_init_1d(), setup_py::steadytemp(), and subBlock().

78 {
79  blockLoc ret=l;
80  for (int i=0;i<3;i++) {
81  if (ret[i]<0) ret[i]=0;
82  if (ret[i]>dim[i]) ret[i]=dim[i];
83  }
84  return ret;
85 }
blockLoc i
Definition: read.cpp:79
blockDim dim
Definition: adj.h:204

Here is the caller graph for this function:

void split ( int  nPieces,
vector< block * > &  dest 
)

Definition at line 113 of file split.cpp.

References blockNo, dim, getOriginalNumber(), makefloParam::levelBad, makefloParam::levelGood, parameters, split(), makefloParam::splitAxis, makefloParam::splitRCB, and subBlock().

Referenced by split().

114 {
115  if (nPieces<=0) {
116  fprintf(stderr,"Asked to split block into %d pieces!\n",
117  nPieces);
118  abort();
119  }
120  else if (nPieces==1) {
121  //Reset serial number according to new position
122  blockNo=dest.size();
123  dest.push_back(this);
124  }
125  else
126  { //Must split into several pieces
127  int splitAxis=parameters.splitAxis;
128  if (splitAxis==-1) //No axis specified--
129  { //Split on longest remaining axis
130  int splitLen=0;
131  for (int a=0;a<3;a++)
132  if (dim[a]>splitLen) {
133  splitAxis=a;
134  splitLen=dim[a];
135  }
136  }
137  int splitLen=dim[splitAxis];
138 
139  //Determine the size of each half
140  int loPieces=(int)floor(nPieces/2.0);
141  int hiPieces=nPieces-loPieces;
142  int loSize;
143  if (parameters.splitRCB) //Always cut in half
144  loSize=(int)(splitLen/2);
145  else //Adapt cut location to corresponding number of pieces
146  loSize=splitLen*loPieces/nPieces;
147  //Round cut to the multigrid:
148  loSize=parameters.levelGood&((parameters.levelBad>>1)+loSize);
149 
150  if (loSize==0)
151  { /*Asked to split too far*/
152  fprintf(stderr,"Couldn't split block %d any further-- you must:\n"
153  " -increase the input grid resolution\n"
154  " -decrease the number of requested output blocks\n"
155  "%s",
156  1+getOriginalNumber(),
157  (parameters.levelBad)?" -decrease the multigrid resolution\n":"");
158  exit(1);
159  }
160 
161  //Split this block along that axis
162  blockDim origin(0,0,0);
163  blockDim loEnd=dim; loEnd[splitAxis]=loSize+1;
164  blockDim hiStart=origin; hiStart[splitAxis]=loSize;
165  block *lo=subBlock(blockSpan(origin,loEnd));
166  block *hi=subBlock(blockSpan(hiStart,dim));
167 
168  //Remove ourselves-- we are completely
169  // replaced by our children
170  delete this;
171 
172  //Recursively split the new blocks
173  lo->split(loPieces,dest);
174  hi->split(hiPieces,dest);
175  }
176 }
int getOriginalNumber(void) const
Definition: adj.h:220
int blockNo
Definition: adj.h:206
int splitAxis
Definition: makeflo.h:95
block * subBlock(const blockSpan &span) const
Definition: split.cpp:88
Definition: adj.h:203
unsigned int levelBad
Definition: makeflo.h:100
makefloParam parameters
Definition: makeflo.cpp:101
unsigned int levelGood
Definition: makeflo.h:101
blockDim dim
Definition: adj.h:204
void split(int nPieces, vector< block * > &dest)
Definition: split.cpp:113
int splitRCB
Definition: makeflo.h:96

Here is the call graph for this function:

Here is the caller graph for this function:

block * subBlock ( const blockSpan span) const
private

Definition at line 88 of file split.cpp.

References addBC(), externalBCpatch::bcNo, BCs, block(), BLOCKSPAN_FOR, dim, blockSpan::end, blockSpan::getDim(), blockDim::getSize(), i, nFaces, nodeLocs, originalNo, pin(), patch::srcSpan, and blockSpan::start.

Referenced by split().

89 {
90  //Create the new node location array
91  blockDim ns=span.getDim();
92  vector3d *newLocs=new vector3d[ns.getSize()];
93  blockLoc i;
94  BLOCKSPAN_FOR(i,span)
95  newLocs[ns[i-span.start]]=nodeLocs[dim[i]];
96  block *ret=new block(ns,originalNo,-1,newLocs);
97 
98  //Copy over boundary conditions, remapping locations
99  for (int f=0;f<nFaces;f++)
100  for (unsigned int c=0;c<BCs[f].size();c++) {
101  const externalBCpatch &bc=BCs[f][c];
102  blockSpan bs(ret->pin(bc.srcSpan.start-span.start),
103  ret->pin(bc.srcSpan.end -span.start));
104  if (bs.hasArea())
105  //Add this boundary to the new block
106  ret->addBC(bs,bc.bcNo);
107  }
108  return ret;
109 }
vector< externalBCpatch > BCs[nFaces]
Definition: adj.h:240
blockSpan srcSpan
Definition: patch.h:79
blockDim getDim(void) const
Definition: gridutil.h:162
Definition: adj.h:203
#define BLOCKSPAN_FOR(i, span)
Definition: gridutil.h:230
blockLoc start
Definition: gridutil.h:155
blockLoc i
Definition: read.cpp:79
blockLoc end
Definition: gridutil.h:156
int originalNo
Definition: adj.h:205
vector3d * nodeLocs
Definition: adj.h:207
for(;;)
int getSize(void) const
Definition: gridutil.h:126
blockDim dim
Definition: adj.h:204

Here is the call graph for this function:

Here is the caller graph for this function:

Member Data Documentation

vector<externalBCpatch> BCs[nFaces]
private

Definition at line 240 of file adj.h.

Referenced by addBC(), buildFaces(), and subBlock().

int blockNo
private

Definition at line 206 of file adj.h.

Referenced by getBlockNumber(), and split().

blockDim dim
private

Definition at line 204 of file adj.h.

Referenced by block(), buildFaces(), getDim(), getLoc(), pin(), split(), and subBlock().

const char * face2name
static
Initial value:
={
"iMin","jMin","kMin",
"iMax","jMax","kMax"
}

Definition at line 236 of file adj.h.

Referenced by buildFaces(), face::buildPatches(), and writeBlock().

face* faces[nFaces]
private

Definition at line 241 of file adj.h.

Referenced by block(), buildFaces(), getFace(), getFaceNo(), and ~block().

vector3d* nodeLocs
private

Definition at line 207 of file adj.h.

Referenced by block(), getLoc(), subBlock(), and ~block().

int originalNo
private

Definition at line 205 of file adj.h.

Referenced by getOriginalNumber(), and subBlock().


The documentation for this class was generated from the following files: