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); }
////////////////////////////////////////////////////////////////// // // 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); }