#include	"BSprivate.h"

/*+ BSfold_distr - Fold one the distribution from level into another

    Input Parameters:
.   clique_1_distr - The distribution to be folded into (outer level)
.   inode_distr - the distribution being folded
.   clique_numbering - the numbering of the nodes in the lower level
                       distribution

    Returns:
    the folded distribution

    Notes:
    For example, if one wants to know the number of columns in a
    clique, then one folds the <distribution of columns in the
    inodes> into the <distribution of i-nodes in the cliques>.  This
    may not make much sense and isn't all that important.

+*/
BSdistribution *BSfold_distr(BSdistribution *clique_1_distr,
	BSdistribution *inode_distr, BSnumbering *clique_numbering)
{
	BSdistribution *clique_2_distr;
	int	i;

	clique_2_distr = BSalloc_distribution(clique_1_distr->max); CHKERRN(0);
	for (i=0;i<=clique_2_distr->max;i++) clique_2_distr->distribution[i] = 0;
	for (i=0;i<clique_numbering->length;i++) {
		(clique_2_distr->distribution[clique_numbering->numbers[i]]) += 
			(inode_distr->distribution[i]);
	}
	return(clique_2_distr);
}


syntax highlighted by Code2HTML, v. 0.9.1