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