1 #include <../../nrnconf.h> 34 static char rcsid[] =
"pxop.c,v 1.1 1997/12/04 17:55:44 hines Exp";
54 for ( n--; n>=0; n-- )
57 if ( i < 0 ) p[
n] = -1 -
i;
63 if ( i < 0 || i >= out->size )
65 j = p[
i]; p[
i] = -1 -
k;
83 if ( px1->size != px2->size )
85 if ( px1 == out || px2 == out )
87 if ( out==(
PERM *)NULL || out->
size < px1->size )
91 for ( i=0; i<size; i++ )
92 if ( px2->pe[i] >= size )
95 out->pe[
i] = px1->pe[px2->pe[
i]];
110 if ( px->size > vector->
dim )
112 if ( out==(
VEC *)NULL || out->
dim < vector->
dim )
117 return v_copy(vector,out);
120 for ( i=0; i<size; i++ )
121 if ( px->pe[i] >= size )
124 out->
ve[
i] = vector->
ve[px->pe[
i]];
129 while ( start < size )
141 vector->
ve[old_i] = vector->
ve[
i];
142 px->pe[old_i] = i+size;
149 vector->
ve[old_i] = tmp;
150 px->pe[old_i] = i+size;
157 for ( i = 0; i < size; i++ )
158 if ( px->pe[i] < size )
161 px->pe[
i] = px->pe[
i]-size;
176 if ( px->size > x->
dim )
180 if ( ! out || out->
dim < x->
dim )
188 for ( i=0; i<size; i++ )
189 if ( px->pe[i] >= size )
192 out->
ve[px->pe[
i]] = x->
ve[
i];
217 if ( i1 < px->size && i2 < px->size )
220 px->pe[i1] = px->pe[i2];
239 i = 0; j = num; v = a[0];
261 numswaps +=
myqsort(&a[j+1],num-(j+1));
281 return ( numtransp % 2 ) ? -1 : 1;
291 int i,
j, m,
n, px_j;
292 Real **A_me, **out_me;
301 if ( px->size != A->
n )
306 if ( ! out || out->
m != m || out->
n != n )
308 A_me = A->
me; out_me = out->
me;
310 for ( j = 0; j <
n; j++ )
315 for ( i = 0; i < m; i++ )
316 out_me[i][px_j] = A_me[i][j];
328 int i,
j, m,
n, px_i;
329 Real **A_me, **out_me;
338 if ( px->size != A->
m )
343 if ( ! out || out->
m != m || out->
n != n )
345 A_me = A->
me; out_me = out->
me;
347 for ( i = 0; i < m; i++ )
352 for ( j = 0; j <
n; j++ )
353 out_me[i][j] = A_me[px_i][j];
static Object ** v_resize(void *v)
PERM * px_copy(PERM *in, PERM *out)
PERM * px_mlt(PERM *px1, PERM *px2, PERM *out)
MAT * px_cols(PERM *px, MAT *A, MAT *out)
static philox4x32_key_t k
VEC * pxinv_vec(PERM *px, VEC *x, VEC *out)
PERM * px_inv(PERM *px, PERM *out)
int const size_t const size_t n
PERM * px_resize(PERM *, int)
MAT * px_rows(PERM *px, MAT *A, MAT *out)
static int myqsort(int *a, int num)
PERM * px_transp(PERM *px, u_int i1, u_int i2)
#define error(err_num, fn_name)
VEC * px_vec(PERM *px, VEC *vector, VEC *out)