Пример #1
0
CVectorField* OSUFlow::CreateStaticFlowField(float *pData, 
					     int xdim, int ydim, int zdim, 
					     float* minB, float* maxB,
					     int* minRealB, int* maxRealB) 
{
  CVectorField* field; 
  Solution* pSolution;
  RegularCartesianGrid* pRegularCGrid;
  VECTOR3* pVector;
  VECTOR3** ppVector;
  VECTOR3 min_b, max_b; 
  VECTOR4 realMin_b, realMax_b; 

  pVector = (VECTOR3*)pData;
  ppVector = new VECTOR3*[1]; 
  ppVector[0] = pVector; 

  int totalNum = xdim*ydim*zdim; 
  pSolution = new Solution(ppVector, totalNum, 1);
  pRegularCGrid = new RegularCartesianGrid(xdim, ydim, zdim); 

  min_b[0] = minB[0]; min_b[1] = minB[1]; min_b[2] = minB[2]; 
  max_b[0] = maxB[0]; max_b[1] = maxB[1]; max_b[2] = maxB[2]; 
  realMin_b[0] = minRealB[0]; realMin_b[1] = minRealB[1]; 
  realMin_b[2] = minRealB[2]; realMin_b[3] = minRealB[3]; 
  realMax_b[0] = maxRealB[0]; realMax_b[1] = maxRealB[1]; 
  realMax_b[2] = maxRealB[2]; realMax_b[3] = maxRealB[3]; 

  pRegularCGrid->SetBoundary(min_b, max_b);
  pRegularCGrid->SetRealBoundary(realMin_b, realMax_b);

  assert(pSolution != NULL && pRegularCGrid != NULL);
  
  field = new CVectorField(pRegularCGrid, pSolution, 1);
  flowField = field; 

  return(field); 
}
Пример #2
0
//////////////////////////////////////////////////////////////////
//
//   ppData are assumed to contain the vector data of 
//   max_t-min_t+1 time steps 
//
//   xdim, ydim, zdim are the resolutions of the data block
//   minB and maxB specify the actual physical bounds of the block 
//   min_t and max_t are the time interval that this block represents 
//
CVectorField* OSUFlow::CreateTimeVaryingFlowField(float** ppData, 
						  int xdim, int ydim, int zdim, 
						  float* minB, float* maxB, 
						  int* minRealB, int* maxRealB,
						  int min_t, int max_t) 
{
  CVectorField* field; 
  Solution* pSolution;
  RegularCartesianGrid* pRegularCGrid;
  VECTOR3** ppVector;
  VECTOR3 min_b, max_b; 
  VECTOR4 realMin_b, realMax_b; 
  
  int totalNum = xdim*ydim*zdim; 

  numTimesteps = max_t-min_t+1;  
  ppVector = (VECTOR3**)ppData;
  min_b[0] = minB[0]; min_b[1] = minB[1]; min_b[2] = minB[2]; 
  max_b[0] = maxB[0]; max_b[1] = maxB[1]; max_b[2] = maxB[2]; 
  realMin_b[0] = minRealB[0]; realMin_b[1] = minRealB[1]; 
  realMin_b[2] = minRealB[2]; realMin_b[3] = minRealB[3]; 
  realMax_b[0] = maxRealB[0]; realMax_b[1] = maxRealB[1]; 
  realMax_b[2] = maxRealB[2]; realMax_b[3] = maxRealB[3]; 

  // create the flow field now 
  pSolution = new Solution(ppVector, totalNum, numTimesteps, min_t, max_t);
  pRegularCGrid = new RegularCartesianGrid(xdim, ydim, zdim); 			

  pRegularCGrid->SetBoundary(min_b, max_b);
  pRegularCGrid->SetRealBoundary(realMin_b, realMax_b);

  assert(pSolution != NULL && pRegularCGrid != NULL);
  field = new CVectorField(pRegularCGrid, pSolution, numTimesteps, min_t);

  flowField = field; 
  return(field); 
}