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 )
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 )
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];
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];
PERM * px_copy(PERM *in, PERM *out)
#define error(err_num, fn_name)
static Object ** v_resize(void *v)
PERM * px_resize(PERM *, int)
int const size_t const size_t n
static philox4x32_key_t k
PERM * px_mlt(PERM *px1, PERM *px2, PERM *out)
MAT * px_rows(PERM *px, MAT *A, MAT *out)
VEC * px_vec(PERM *px, VEC *vector, VEC *out)
PERM * px_inv(PERM *px, PERM *out)
VEC * pxinv_vec(PERM *px, VEC *x, VEC *out)
static int myqsort(int *a, int num)
PERM * px_transp(PERM *px, u_int i1, u_int i2)
MAT * px_cols(PERM *px, MAT *A, MAT *out)