19 #include "order/order_internal.h"
72 peritab[index] = max_number[0]--;
166 for (i=x0; i<xn; i++){
167 for (j=y0; j<yn; j++){
168 for (k=z0; k<zn; k++){
170 peritab[index] = max_number[0] - current;
176 treetab[current_rangtab[0]] = current_treetab;
177 rangtab[current_rangtab[0]] = max_number[0];
178 max_number[0] -= current;
179 current_rangtab[0]++;
190 if ((nz > nx) && (nz > ny)) {
196 treetab[current_rangtab[0]] = current_treetab;
197 rangtab[current_rangtab[0]] = max_number[0];
198 current_rangtab[0]++;
201 peritab_separator = peritab + x0 + nx/2;
209 x0, x0 + nx/2, y0, yn, z0, zn, max_number,
211 treetab, current_treetab+1,
215 x0+nx/2+1, xn, y0, yn, z0, zn, max_number,
217 treetab, current_treetab+1,
224 treetab[current_rangtab[0]] = current_treetab;
225 rangtab[current_rangtab[0]] = max_number[0];
226 current_rangtab[0]++;
229 peritab_separator = peritab + ldax * (y0 + ny / 2);
237 x0, xn, y0, y0+ny/2, z0, zn, max_number,
239 treetab, current_treetab+1,
243 x0, xn, y0+ny/2+1, yn, z0, zn, max_number,
245 treetab, current_treetab+1,
252 treetab[current_rangtab[0]] = current_treetab;
253 rangtab[current_rangtab[0]] = max_number[0];
254 current_rangtab[0]++;
257 peritab_separator = peritab + ldax * lday * (z0 + nz/2);
265 x0, xn, y0, yn, z0, z0+nz/2, max_number,
267 treetab, current_treetab+1,
271 x0, xn, y0, yn, z0+nz/2+1, zn, max_number,
273 treetab, current_treetab+1,
328 if (nx == ny && ny == nz){
330 while (i != nx && i < nx+1){
334 pastix_print_warning(
"The given graph size is not correct for optimal manual ordering on 2D regular grid or 3D regular cube. Closer valid sizes are %ld %ld\n",
335 (
long)i, (
long)(2*i+1));
343 0, nx, 0, ny, 0, nz, ¤t_number, ¤t_rangtab,
348 peritab[permtab[i]] = i;
357 for (i=0; i<ordemesh->
cblknbr; i++){
358 rangtab[i+1] = saved_rangtab[ordemesh->
cblknbr - i - 1]+1;
359 treetab[i] = saved_treetab[ordemesh->
cblknbr - i - 1];
364 for (i=0; i<ordemesh->
cblknbr-1; i++){
366 for (j=i+1; j<ordemesh->
cblknbr; j++){
367 if (treetab[j] < treetab[i]){
373 treetab[ordemesh->
cblknbr-1] = -1;
BEGIN_C_DECLS typedef int pastix_int_t
int pastixOrderAlloc(pastix_order_t *ordeptr, pastix_int_t vertnbr, pastix_int_t cblknbr)
Allocate the order structure.
int pastixOrderGrid(pastix_order_t **myorder, pastix_int_t nx, pastix_int_t ny, pastix_int_t nz)
void order_grid2D_classic(pastix_int_t *peritab, pastix_int_t x0, pastix_int_t xn, pastix_int_t y0, pastix_int_t yn, pastix_int_t *max_number, pastix_int_t ldax, pastix_int_t lday)
void order_grid3D_classic(pastix_int_t *rangtab, pastix_int_t *peritab, pastix_int_t *cblknbr, pastix_int_t x0, pastix_int_t xn, pastix_int_t y0, pastix_int_t yn, pastix_int_t z0, pastix_int_t zn, pastix_int_t *max_number, pastix_int_t *current_rangtab, pastix_int_t *treetab, pastix_int_t current_treetab, pastix_int_t ldax, pastix_int_t lday, pastix_int_t ldaz)