21#include "order/order_internal.h"
51 for(i=0; i<order->
cblknbr; i++, enode++)
56 assert(fathnum < (order->
cblknbr+1) );
107 if ( order == NULL ) {
108 pastix_print_error(
"orderApplyLevelOrder: invalid order pointer" );
113 pastix_print_error(
"orderApplyLevelOrder: invalid order->permtab pointer" );
116 if ( order->
rangtab == NULL ) {
117 pastix_print_error(
"orderApplyLevelOrder: invalid order->rangtab pointer" );
121 pastix_print_error(
"orderApplyLevelOrder: invalid order->treetab pointer" );
126 pastix_print_error(
"orderApplyLevelOrder: invalid nunber of column blocks" );
131 pastix_print_error(
"orderApplyLevelOrder: invalid vertex node base number" );
140 assert( baseval == order->
rangtab[0] );
160 if ( level_tasks2d < 0 )
168 MALLOC_INTERN(is_2D, order->
cblknbr, int8_t);
169 memset(is_2D, 0, order->
cblknbr *
sizeof(int8_t));
171#if defined(PASTIX_BLEND_DEEPEST_DISTRIB)
172 for(node=0; node<order->
cblknbr; node++ ){
174 if (is_2D[node] == 1) {
181 if ( size >= width_tasks2d )
185 for(i=0; i<sonsnbr; i++) {
194 while( (fathnum != -1) && (is_2D[fathnum] == 0) ) {
198 for(i=0; i<sonsnbr; i++) {
212 for(node=order->
cblknbr-1; node>-1; node--) {
218 if ( (size >= width_tasks2d) &&
220 ((is_2D[fathnum] == 1) && (etree->
nodetab[fathnum].
sonsnbr == 2))) )
234 for (i=0; i<sonsnbr; i++) {
237 sorted[pos_2D] = node;
241 sorted[pos_1D] = node;
247 for(i=0; i<order->
cblknbr; i++) {
257 for(s=0; s<sonsnbr; s++) {
263 sons1D = sonsnbr - sons2D;
270 for(s=0; s<sonsnbr; s++) {
273 sorted[pos_2D + sons2D - current_2D - 1] = son;
277 sorted[pos_1D + sons1D - current_1D - 1] = son;
296 for(i=0; i<order->
cblknbr; i++) {
304 for(s=0; s<sonsnbr; s++) {
306 sorted[ pos + sonsnbr-1-s ] = son;
317 for(i=0; i<order->
cblknbr; i++ ) {
321 ofcol = oldorder.
rangtab[ node ];
323 order->
rangtab[ i+1 ] = nfcol + size;
331 for (i=0; i<order->
vertnbr; i++) {
BEGIN_C_DECLS typedef int pastix_int_t
static pastix_int_t eTreeSonI(const EliminTree *etree, pastix_int_t node, pastix_int_t i)
Return the i^{th} son of a given node.
void eTreeSetSons(EliminTree *)
Set the fsonnum fields base on the initialized sonsnbr.
EliminTree * eTreeInit(pastix_int_t)
Initialize the elimination tree structure.
void eTreeExit(EliminTree *)
Free the elimination tree structure.
Node of the elimination tree.
EliminTree * orderBuildEtree(const pastix_order_t *order)
This routine build the elimination tree associated to an ordering.
@ PASTIX_ERR_BADPARAMETER
int pastixOrderAlloc(pastix_order_t *ordeptr, pastix_int_t vertnbr, pastix_int_t cblknbr)
Allocate the order structure.
int orderApplyLevelOrder(pastix_order_t *order, pastix_int_t level_tasks2d, pastix_int_t width_tasks2d)
This routine reorder the elimination tree nodes per level.
void pastixOrderExit(pastix_order_t *ordeptr)
Free the arrays initialized in the order structure.