Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void Process_MainInputForNumberOfOctrees()
- {
- //
- ///* find number of octrees needed */
- if(glo_EFieldSolver==0)
- {
- double length[3];
- double min_length = 1000;
- length[0] = glo_max_pos[0] - glo_min_pos[0];
- length[1] = glo_max_pos[1] - glo_min_pos[1];
- length[2] = glo_max_pos[2] - glo_min_pos[2];
- if(length[0]<min_length)
- {
- min_length = length[0];
- }
- if(length[1]<min_length)
- {
- min_length = length[1];
- }
- if(length[2]<min_length)
- {
- min_length = length[2];
- }
- // cout << "Length : " <<length[0] <<" " << length[1] << " " << length[2] << endl;
- // cout << "min_length " << min_length << endl;
- double dbl_num_x_queen = (length[0]/min_length);
- double dbl_num_y_queen = (length[1]/min_length);
- double dbl_num_z_queen = (length[2]/min_length);
- cout << " dbl num z queen " << dbl_num_z_queen << endl;
- int num_x_queenCells;
- int num_y_queenCells;
- int num_z_queenCells;
- if(dbl_num_x_queen==1)
- {
- num_x_queenCells = 1;
- }
- else if(dbl_num_x_queen==2)
- {
- num_x_queenCells = 2;
- }
- else
- {
- if(fmod(length[0]*1.0E+07,(2*min_length*1.0E+07))==0)
- {
- num_x_queenCells = int(dbl_num_x_queen)/2;
- }
- else if(fabs(fmod(length[0]*1.0E+07,min_length*1.0E+07))<1E-17)
- {
- num_x_queenCells = dbl_num_x_queen;
- }
- }
- if(dbl_num_y_queen==1)
- {
- num_y_queenCells = 1;
- }
- else if(dbl_num_y_queen==2)
- {
- num_y_queenCells = 2;
- }
- else
- {
- if(fmod(length[1]*1.0E+07,(2*min_length*1.0E+7))==0)
- {
- num_y_queenCells = ceil(dbl_num_y_queen/2);
- }
- else if(fabs(fmod(length[1]*1.0E+07,min_length*1.0E+07))<1E-17)
- {
- num_y_queenCells = dbl_num_y_queen;
- }
- }
- if(dbl_num_z_queen==1)
- {
- num_z_queenCells = 1;
- }
- else if(dbl_num_z_queen==2)
- {
- num_z_queenCells = 2;
- }
- else
- {
- if(fmod(length[2]*1.0E+7,(2*min_length)*1.0E+7)==0)
- {
- num_z_queenCells = int(dbl_num_z_queen)/2;
- cout << "first case " << endl;
- }
- else if(fabs(fmod(length[2]*1.0e+07,min_length)*1.0E+7)<1E-17)
- {
- num_z_queenCells = dbl_num_z_queen;
- cout << "second case " << num_z_queenCells << endl;
- }
- else
- {
- cout << "third case " << length[2] <<" " << min_length << " " << fmod(length[2]*1.0E+6,min_length*1.0E+6)<< endl;
- num_z_queenCells = dbl_num_z_queen;
- }
- }
- // cout << "num x queen " << dbl_num_x_queen << " ";
- // cout <<"num_y_queen " << dbl_num_y_queen << " ";
- // cout <<"num_y_queen " << dbl_num_z_queen << endl;
- glo_queen_dx = length[0]/num_x_queenCells;
- glo_queen_dy = length[1]/num_y_queenCells;
- glo_queen_dz = length[2]/num_z_queenCells;
- cout <<"glo_queen_dx " << glo_queen_dx << " ";
- cout <<"glo_queen_dx " << glo_queen_dy << " ";
- cout <<"glo_queen_dx " << glo_queen_dz << endl;
- glo_num_octrees = num_x_queenCells * num_y_queenCells * num_z_queenCells;
- glo_num_x_queenCells = num_x_queenCells;
- glo_num_y_queenCells = num_y_queenCells;
- glo_num_z_queenCells = num_z_queenCells;
- cout <<"num_octrees :" <<glo_num_octrees <<endl;
- cout << "num_x_queenCells : " <<glo_num_x_queenCells <<endl;
- cout << "num_y_queenCells : " <<glo_num_y_queenCells <<endl;
- cout << "num_z_queenCells : " <<glo_num_z_queenCells <<endl;
- cout << glo_MPI_PROC_ID << " num procs : " << glo_num_MPI_PROCS << endl;
- double RootFactorTemp;
- RootFactorTemp = double(glo_num_MPI_PROCS)/double(glo_num_octrees);
- cout << glo_MPI_PROC_ID << " root factor temp: " << RootFactorTemp << endl;
- double checkVal = pow(RootFactorTemp,double(1.0)/double(3.0)) - floor(pow(RootFactorTemp,double(1.0)/double(3.0))) ;
- int RootFactor;
- if(checkVal<=0.5)
- {
- // RootFactor = floor(pow(RootFactorTemp,double(1.0)/double(3.0)));
- RootFactor = ceil(pow(RootFactorTemp,double(1.0)/double(3.0)));
- }
- else
- {
- RootFactor = ceil(pow(RootFactorTemp,double(1.0)/double(3.0)));
- }
- // Increasing roots by a factor of 2 //
- RootFactor = RootFactor*8;
- cout << glo_MPI_PROC_ID << " root factor : " << RootFactor << endl;
- glo_num_x_queenCells = glo_num_x_queenCells * RootFactor;
- glo_num_y_queenCells = glo_num_y_queenCells * RootFactor;
- glo_num_z_queenCells = glo_num_z_queenCells * RootFactor;
- glo_num_octrees = glo_num_x_queenCells*glo_num_y_queenCells*glo_num_z_queenCells;
- cout <<" ** num_octrees** :" <<glo_num_octrees <<endl;
- cout << " **num_x_queenCells** : " <<glo_num_x_queenCells <<endl;
- cout << " **num_y_queenCells** : " <<glo_num_y_queenCells <<endl;
- cout << " **num_z_queenCells** : " <<glo_num_z_queenCells <<endl;
- glo_queen_gridpts[0] = glo_num_x_queenCells + 1;
- glo_queen_gridpts[1] = glo_num_y_queenCells + 1;
- glo_queen_gridpts[2] = glo_num_z_queenCells + 1;
- glo_queen_dx = length[0]/glo_num_x_queenCells;
- glo_queen_dy = length[1]/glo_num_y_queenCells;
- glo_queen_dz = length[2]/glo_num_z_queenCells;
- /* Determine which root goes to which proc */
- int ceil_value;
- int floor_value;
- int numProcsWithCeilVal ;
- int numProcsWithFloorVal;
- double diff_val;
- if(glo_num_octrees>=glo_num_MPI_PROCS)
- {
- /*1. divide N_roots/N_procs = quotient_val */
- double RootsPerProc = double(glo_num_octrees)/double(glo_num_MPI_PROCS);
- // cout << glo_MPI_PROC_ID << " roots per proc : " << RootsPerProc << endl;
- /*2. ceil_int = ceil(quotient_val) && floor_int = floor(quotient_val) */
- ceil_value = ceil(RootsPerProc);
- glo_NumRootsCeil = ceil_value;
- floor_value = floor(RootsPerProc);
- glo_NumRootsFloor = floor_value;
- /*3. diff_val = quotient_val - floor_int */
- diff_val = RootsPerProc - floor_value;
- /*4. num_procs_to_get_ceil_values = diff_val*total_num_procs */
- numProcsWithCeilVal = diff_val*glo_num_MPI_PROCS;
- /*5. remainig procs get floor value */
- numProcsWithFloorVal = glo_num_MPI_PROCS - numProcsWithCeilVal;
- glo_NumProcsWithCeilNumRoots = numProcsWithCeilVal;
- glo_NumProcsWithFloorNumRoots = numProcsWithFloorVal;
- /*6. these values are equal to the num_octree_roots that belong to this proc
- and will remain the same throughout the computation */
- }
- else if(glo_num_octrees<glo_num_MPI_PROCS)
- {
- ceil_value = 1;
- floor_value = 0;
- glo_NumRootsCeil = ceil_value;
- glo_NumRootsFloor = floor_value;
- numProcsWithCeilVal = glo_num_octrees;
- numProcsWithFloorVal = glo_num_MPI_PROCS - glo_num_octrees;
- glo_NumProcsWithCeilNumRoots = numProcsWithCeilVal;
- glo_NumProcsWithFloorNumRoots = numProcsWithFloorVal;
- }
- // cout << glo_MPI_PROC_ID << " ceilVal: " << ceil_value << " " << glo_NumRootsCeil << " floow val : " << floor_value << " " << glo_NumRootsFloor << endl;
- // cout << glo_MPI_PROC_ID << " diff_val : " << diff_val << endl;
- // cout << glo_MPI_PROC_ID << " numprocswithCeil : " << numProcsWithCeilVal << " " << glo_NumProcsWithCeilNumRoots;
- // cout << " numprocs with floor " << numProcsWithFloorVal << " " << glo_NumProcsWithFloorNumRoots<< endl;
- }
- else if(glo_EFieldSolver==1)
- {
- double length[3];
- double min_length = 1000;
- length[0] = glo_max_pos[0] - glo_min_pos[0];
- length[1] = glo_max_pos[1] - glo_min_pos[1];
- length[2] = glo_max_pos[2] - glo_min_pos[2];
- // for wider domain //
- if(length[0]<min_length)
- {
- min_length = length[0];
- }
- if(length[1]<min_length)
- {
- min_length = length[1];
- }
- if(length[2]<min_length)
- {
- min_length = length[2];
- }
- bool WiderDomain = 0;
- if( (min_length+1E-6)<length[0])
- {
- WiderDomain = 1;
- }
- if( (min_length+1E-6)<length[1])
- {
- WiderDomain = 1;
- }
- if( (min_length+1E-6)<length[2])
- {
- WiderDomain = 1;
- }
- if(WiderDomain==1)
- {
- cout << " ========== Processing Queen cells ========== " << endl ;
- cout << min_length << endl;
- double dbl_num_x_queen = ceil((length[0]/min_length));
- double dbl_num_y_queen = ceil((length[1]/min_length));
- double dbl_num_z_queen = ceil((length[2]/min_length));
- cout << " dbl num z queen " << dbl_num_z_queen << endl;
- cout << " dbl num y queen " << dbl_num_y_queen << endl;
- cout << " dbl num x queen " << dbl_num_x_queen << endl;
- int num_x_queenCells;
- int num_y_queenCells;
- int num_z_queenCells;
- if(dbl_num_x_queen==1)
- {
- num_x_queenCells = 1;
- }
- else if(dbl_num_x_queen==2)
- {
- num_x_queenCells = 2;
- }
- if(dbl_num_y_queen==1)
- {
- num_y_queenCells = 1;
- }
- else if(dbl_num_y_queen==2)
- {
- num_y_queenCells = 2;
- }
- // else if(dbl_num_y_queen==4)
- // {
- // num_y_queenCells = 4;
- // }
- // else if(dbl_num_y_queen==8)
- // {
- // num_y_queenCells = 8;
- // }
- // else if(dbl_num_y_queen==16)
- // {
- // num_y_queenCells = 16;
- // }
- // else if(dbl_num_y_queen==32)
- // {
- // num_y_queenCells = 32;
- // }
- if(dbl_num_z_queen==1)
- {
- num_z_queenCells = 1;
- }
- else if(dbl_num_z_queen==2)
- {
- num_z_queenCells = 2;
- }
- // else if(dbl_num_z_queen==4)
- // {
- // num_z_queenCells = 4;
- // }
- // else if(dbl_num_z_queen==8)
- // {
- // num_z_queenCells = 8;
- // }
- // else if(dbl_num_z_queen==12)
- // {
- // num_z_queenCells = 12;
- // }
- // else if(dbl_num_z_queen==16)
- // {
- // num_z_queenCells = 16;
- // }
- // else if(dbl_num_z_queen==32)
- // {
- // num_z_queenCells = 32;
- // }
- // else if(dbl_num_z_queen==64)
- // {
- // num_z_queenCells = 64;
- // }
- // else if(dbl_num_z_queen==128)
- // {
- // num_z_queenCells = 128;
- // }
- cout << " X QUEEN CELLS = " << num_x_queenCells << " length x =" << length[0] << endl ;
- cout << " Y QUEEN CELLS = " << num_y_queenCells << " length y =" << length[1] << endl ;
- cout << " Z QUEEN CELLS = " << num_z_queenCells << " length z =" << length[2] << endl ;
- glo_queen_dx = length[0]/num_x_queenCells;
- glo_queen_dy = length[1]/num_y_queenCells;
- glo_queen_dz = length[2]/num_z_queenCells;
- cout <<"glo_queen_dx " << glo_queen_dx << " ";
- cout <<"glo_queen_dy " << glo_queen_dy << " ";
- cout <<"glo_queen_dz " << glo_queen_dz << endl;
- glo_num_octrees = num_x_queenCells * num_y_queenCells * num_z_queenCells;
- glo_num_x_queenCells = num_x_queenCells;
- glo_num_y_queenCells = num_y_queenCells;
- glo_num_z_queenCells = num_z_queenCells;
- cout <<"num_octrees :" <<glo_num_octrees <<endl;
- cout << "num_x_queenCells : " <<glo_num_x_queenCells <<endl;
- cout << "num_y_queenCells : " <<glo_num_y_queenCells <<endl;
- cout << "num_z_queenCells : " <<glo_num_z_queenCells <<endl;
- cout << glo_MPI_PROC_ID << " num procs : " << glo_num_MPI_PROCS << endl;
- double RootFactorTemp;
- RootFactorTemp = double(glo_num_MPI_PROCS)/double(glo_num_octrees);
- cout << glo_MPI_PROC_ID << " root factor temp: " << RootFactorTemp << endl;
- double checkVal = pow(RootFactorTemp,double(1.0)/double(3.0)) - floor(pow(RootFactorTemp,double(1.0)/double(3.0))) ;
- int RootFactor;
- if(checkVal<=0.5)
- {
- // RootFactor = floor(pow(RootFactorTemp,double(1.0)/double(3.0)));
- RootFactor = ceil(pow(RootFactorTemp,double(1.0)/double(3.0)));
- }
- else
- {
- RootFactor = ceil(pow(RootFactorTemp,double(1.0)/double(3.0)));
- }
- // Increasing roots by a factor of 2 //
- // RootFactor = RootFactor;
- // cout << glo_MPI_PROC_ID << " root factor : " << RootFactor << endl;
- // glo_num_x_queenCells = glo_num_x_queenCells * RootFactor;
- // glo_num_y_queenCells = glo_num_y_queenCells * RootFactor;
- // glo_num_z_queenCells = glo_num_z_queenCells * RootFactor;
- // glo_num_octrees = glo_num_x_queenCells*glo_num_y_queenCells*glo_num_z_queenCells;
- // cout <<" ** num_octrees** :" <<glo_num_octrees <<endl;
- // cout << " **num_x_queenCells** : " <<glo_num_x_queenCells <<endl;
- // cout << " **num_y_queenCells** : " <<glo_num_y_queenCells <<endl;
- // cout << " **num_z_queenCells** : " <<glo_num_z_queenCells <<endl;
- // glo_queen_gridpts[0] = glo_num_x_queenCells + 1;
- // glo_queen_gridpts[1] = glo_num_y_queenCells + 1;
- // glo_queen_gridpts[2] = glo_num_z_queenCells + 1;
- // glo_queen_dx = length[0]/glo_num_x_queenCells;
- // glo_queen_dy = length[1]/glo_num_y_queenCells;
- // glo_queen_dz = length[2]/glo_num_z_queenCells;
- }
- else
- {
- double ExpValue = ceil(log(glo_num_MPI_PROCS)/log(8));
- cout << glo_MPI_PROC_ID << " exp value " << ExpValue << endl;
- int RootFactor = double(pow(8,ExpValue))/double(glo_num_MPI_PROCS) ;
- // Rootfactor //
- RootFactor = RootFactor * 4 ;
- cout << glo_MPI_PROC_ID << " Rootfactor " << RootFactor << endl;
- glo_num_octrees = glo_num_MPI_PROCS * RootFactor;
- glo_num_x_queenCells = pow(glo_num_octrees,(double(1.0)/double(3.0)));
- glo_num_y_queenCells = pow(glo_num_octrees,(double(1.0)/double(3.0)));
- glo_num_z_queenCells = pow(glo_num_octrees,(double(1.0)/double(3.0)));
- // glo_num_octrees = glo_num_x_queenCells*glo_num_y_queenCells*glo_num_z_queenCells;
- cout <<" ** num_octrees** :" <<glo_num_octrees <<endl;
- cout << " **num_x_queenCells** : " <<glo_num_x_queenCells <<endl;
- cout << " **num_y_queenCells** : " <<glo_num_y_queenCells <<endl;
- cout << " **num_z_queenCells** : " <<glo_num_z_queenCells <<endl;
- glo_queen_gridpts[0] = glo_num_x_queenCells + 1;
- glo_queen_gridpts[1] = glo_num_y_queenCells + 1;
- glo_queen_gridpts[2] = glo_num_z_queenCells + 1;
- cout << " **num_x_queengrid** : " << glo_queen_gridpts[0] <<endl;
- cout << " **num_y_queengrid** : " << glo_queen_gridpts[1] <<endl;
- cout << " **num_z_queengrid** : " << glo_queen_gridpts[2] <<endl;
- glo_queen_dx = length[0]/glo_num_x_queenCells;
- glo_queen_dy = length[1]/glo_num_y_queenCells;
- glo_queen_dz = length[2]/glo_num_z_queenCells;
- cout << " **queendx** : " <<glo_queen_dx <<endl;
- cout << " **queendx** : " <<glo_queen_dx <<endl;
- cout << " **queendx** : " <<glo_queen_dx <<endl;
- }
- /* Determine which root goes to which proc */
- int ceil_value;
- int floor_value;
- int numProcsWithCeilVal ;
- int numProcsWithFloorVal;
- double diff_val;
- if(glo_num_octrees>=glo_num_MPI_PROCS)
- {
- /*1. divide N_roots/N_procs = quotient_val */
- double RootsPerProc = double(glo_num_octrees)/double(glo_num_MPI_PROCS);
- // cout << glo_MPI_PROC_ID << " roots per proc : " << RootsPerProc << endl;
- /*2. ceil_int = ceil(quotient_val) && floor_int = floor(quotient_val) */
- ceil_value = ceil(RootsPerProc);
- glo_NumRootsCeil = ceil_value;
- floor_value = floor(RootsPerProc);
- glo_NumRootsFloor = floor_value;
- /*3. diff_val = quotient_val - floor_int */
- diff_val = RootsPerProc - floor_value;
- /*4. num_procs_to_get_ceil_values = diff_val*total_num_procs */
- numProcsWithCeilVal = diff_val*glo_num_MPI_PROCS;
- /*5. remainig procs get floor value */
- numProcsWithFloorVal = glo_num_MPI_PROCS - numProcsWithCeilVal;
- glo_NumProcsWithCeilNumRoots = numProcsWithCeilVal;
- glo_NumProcsWithFloorNumRoots = numProcsWithFloorVal;
- /*6. these values are equal to the num_octree_roots that belong to this proc
- and will remain the same throughout the computation */
- }
- else
- {
- cout << " PLEASE CHANGE THE NUMBER OF PROCESSORS TO A MULTIPLE OF 8. Thank you! " << endl;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement