1 #include	"BSprivate.h"
2 
3 /*+ BSperm_ivec - Permute an integer vector according to a permutation
4 
5     Input Parameters:
6 .   in_vec - the vector to permute
7 .   permutation - the permutation
8 
9     Output Parameters:
10 .   out_vec - the permuted vector
11 
12     Returns:
13     void
14 
15  +*/
BSperm_ivec(int * in_vec,int * out_vec,BSpermutation * permutation)16 void	BSperm_ivec(int *in_vec, int *out_vec, BSpermutation *permutation)
17 {
18 	int	i;
19 
20 	for (i=0;i<permutation->length;i++) {
21 		out_vec[permutation->perm[i]] = in_vec[i];
22 	}
23 }
24 
25 /*+ BSiperm_ivec - Permute an integer vector according to an inverse permutation
26 
27     Input Parameters:
28 .   in_vec - the vector to permute
29 .   permutation - the permutation
30 
31     Output Parameters:
32 .   out_vec - the permuted vector
33 
34     Returns:
35     void
36 
37  +*/
BSiperm_ivec(int * in_vec,int * out_vec,BSpermutation * permutation)38 void	BSiperm_ivec(int *in_vec, int *out_vec, BSpermutation *permutation)
39 {
40 	int	i;
41 
42 	for (i=0;i<permutation->length;i++) {
43 		out_vec[i] = in_vec[permutation->perm[i]];
44 	}
45 }
46 
47 /*+ BSperm_dvec - Permute a DP vector according to a permutation
48 
49     Input Parameters:
50 .   in_vec - the vector to permute
51 .   permutation - the permutation
52 
53     Output Parameters:
54 .   out_vec - the permuted vector
55 
56     Returns:
57     void
58 
59  +*/
BSperm_dvec(FLOAT * in_vec,FLOAT * out_vec,BSpermutation * permutation)60 void	BSperm_dvec(FLOAT *in_vec, FLOAT *out_vec, BSpermutation *permutation)
61 {
62 	int	i;
63 
64 	for (i=0;i<permutation->length;i++) {
65 		out_vec[permutation->perm[i]] = in_vec[i];
66 	}
67 }
68 
69 /*+ BSiperm_dvec - Permute a DP vector according to an inverse permutation
70 
71     Input Parameters:
72 .   in_vec - the vector to permute
73 .   permutation - the permutation
74 
75     Output Parameters:
76 .   out_vec - the permuted vector
77 
78     Returns:
79     void
80 
81  +*/
BSiperm_dvec(FLOAT * in_vec,FLOAT * out_vec,BSpermutation * permutation)82 void	BSiperm_dvec(FLOAT *in_vec, FLOAT *out_vec, BSpermutation *permutation)
83 {
84 	int	i;
85 
86 	for (i=0;i<permutation->length;i++) {
87 		out_vec[i] = in_vec[permutation->perm[i]];
88 	}
89 }
90 
91 /*+ BSperm2iperm - Compute an inverse permutation from a permutation
92 
93     Input Parameters:
94 .   permutation - the permutation
95 
96     Output Parameters:
97 .   permutation - the inverse permutation
98 
99     Returns:
100     void
101 
102  +*/
BSperm2iperm(BSpermutation * permutation,BSpermutation * inv_permutation)103 void	BSperm2iperm(BSpermutation *permutation, BSpermutation *inv_permutation)
104 {
105 	int	i;
106 
107 	for (i=0;i<permutation->length;i++) {
108 		inv_permutation->perm[permutation->perm[i]] = i;
109 	}
110 }
111