/* * pOctant Zoltan_Oct_POct_nextDfs(pOctant octant) * * returns the next octant in a DFS ordering */ pOctant Zoltan_Oct_POct_nextDfs(OCT_Global_Info *OCT_info, pOctant octant) { pOctant parent, /* parent of an octant */ child; /* child of an octant */ int pid; int i; /* index counter */ if (!octant) return(NULL); for (i=0; i<8; i++) { child = Zoltan_Oct_child(octant,i); pid = Zoltan_Oct_Cpid(octant,i); if ((pid == OCT_info->OCT_localpid) && child) return(child); /* Go down */ } parent = Zoltan_Oct_parent(octant); pid = Zoltan_Oct_Ppid(octant); while ((pid == OCT_info->OCT_localpid) && parent) { for (i=octant->which; i<7; i++) { child = Zoltan_Oct_child(parent,i+1); pid = Zoltan_Oct_Cpid(parent, i+1); if ((pid == OCT_info->OCT_localpid) && child) return(child); } octant=parent; /* Go up */ parent = Zoltan_Oct_parent(octant); pid = Zoltan_Oct_Ppid(octant); } return(NULL); /* no more octants remain in dfs ordering */ }
/* * int Zoltan_Oct_dfs_SetIds(pOctant octant, int number_of_previous_octants) * * sets the ids of all the octants so that there is a global numbering */ static int Zoltan_Oct_dfs_SetIds(OCT_Global_Info *OCT_info, pOctant oct, int nprevoct) { int id, /* the id number of an octant */ i; /* index counter */ int pid; pOctant child; /* ith child of an octant */ if(Zoltan_Oct_isTerminal(oct)) { id = Zoltan_Oct_id(oct); Zoltan_Oct_setID(oct, id+nprevoct); /* now have global id's */ } else { for(i=0; i<8; i++) { child = Zoltan_Oct_child(oct, i); pid = Zoltan_Oct_Cpid(oct,i); if ((pid == OCT_info->OCT_localpid) && child != NULL) Zoltan_Oct_dfs_SetIds(OCT_info,child, nprevoct); } id = Zoltan_Oct_id(oct); Zoltan_Oct_setID(oct, id+nprevoct); /* now have global id's */ } return 0; }