| version 1.70, 2017/01/08 03:05:39 |
version 1.71, 2017/02/21 09:20:23 |
|
|
| * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, |
* DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, |
| * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. |
* PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. |
| * |
* |
| * $OpenXM: OpenXM_contrib2/asir2000/builtin/array.c,v 1.69 2015/09/03 23:05:35 noro Exp $ |
* $OpenXM: OpenXM_contrib2/asir2000/builtin/array.c,v 1.70 2017/01/08 03:05:39 noro Exp $ |
| */ |
*/ |
| #include "ca.h" |
#include "ca.h" |
| #include "base.h" |
#include "base.h" |
|
|
| extern int DP_Print; /* XXX */ |
extern int DP_Print; /* XXX */ |
| |
|
| |
|
| void Pnewvect(), Pnewmat(), Psepvect(), Psize(), Pdet(), Pleqm(), Pleqm1(), Pgeninvm(); |
void Pnewvect(), Pnewmat(), Psepvect(), Psize(), Pdet(), Pleqm(), Pleqm1(), Pgeninvm(), Ptriangleq(); |
| void Pinvmat(); |
void Pinvmat(); |
| void Pnewbytearray(),Pmemoryplot_to_coord(); |
void Pnewbytearray(),Pmemoryplot_to_coord(); |
| |
|
| Line 151 struct ftab array_tab[] = { |
|
| Line 151 struct ftab array_tab[] = { |
|
| {"mat_col",Pmat_col,2}, |
{"mat_col",Pmat_col,2}, |
| {"lusolve_prep",Plusolve_prep,1}, |
{"lusolve_prep",Plusolve_prep,1}, |
| {"lusolve_main",Plusolve_main,1}, |
{"lusolve_main",Plusolve_main,1}, |
| |
{"triangleq",Ptriangleq,1}, |
| {0,0,0}, |
{0,0,0}, |
| }; |
}; |
| |
|
| Line 2359 void red_by_vect_sf(int m,unsigned int *p,unsigned int |
|
| Line 2360 void red_by_vect_sf(int m,unsigned int *p,unsigned int |
|
| *p = _addsf(_mulsf(*r,hc),*p); |
*p = _addsf(_mulsf(*r,hc),*p); |
| } |
} |
| |
|
| |
extern GZ current_mod_lf; |
| |
extern int current_mod_lf_size; |
| |
|
| void red_by_vect_lf(mpz_t *p,mpz_t *r,mpz_t hc,int len) |
void red_by_vect_lf(mpz_t *p,mpz_t *r,mpz_t hc,int len) |
| { |
{ |
| mpz_set_ui(*p++,0); r++; len--; |
mpz_set_ui(*p++,0); r++; len--; |
| for ( ; len; len--, r++, p++ ) |
for ( ; len; len--, r++, p++ ) { |
| mpz_addmul(*p,*r,hc); |
mpz_addmul(*p,*r,hc); |
| |
#if 0 |
| |
if ( mpz_size(*p) > current_mod_lf_size ) |
| |
mpz_mod(*p,*p,BDY(current_mod_lf)); |
| |
#endif |
| |
} |
| } |
} |
| |
|
| |
|
| Line 3838 void Pmat_col(NODE arg,VECT *rp) |
|
| Line 3847 void Pmat_col(NODE arg,VECT *rp) |
|
| BDY(vect)[i] = BDY(mat)[i][j]; |
BDY(vect)[i] = BDY(mat)[i][j]; |
| } |
} |
| *rp = vect; |
*rp = vect; |
| |
} |
| |
|
| |
NODE triangleq(NODE e) |
| |
{ |
| |
int n,i,k; |
| |
V v; |
| |
VL vl; |
| |
P *p; |
| |
NODE r,r1; |
| |
|
| |
n = length(e); |
| |
p = (P *)MALLOC(n*sizeof(P)); |
| |
for ( i = 0; i < n; i++, e = NEXT(e) ) p[i] = (P)BDY(e); |
| |
i = 0; |
| |
while ( 1 ) { |
| |
for ( ; i < n && !p[i]; i++ ); |
| |
if ( i == n ) break; |
| |
if ( OID(p[i]) == O_N ) return 0; |
| |
v = p[i]->v; |
| |
for ( k = i+1; k < n; k++ ) |
| |
if ( p[k] ) { |
| |
if ( OID(p[k]) == O_N ) return 0; |
| |
if ( p[k]->v == v ) p[k] = 0; |
| |
} |
| |
i++; |
| |
} |
| |
for ( r = 0, i = 0; i < n; i++ ) { |
| |
if ( p[i] ) { |
| |
MKNODE(r1,p[i],r); r = r1; |
| |
} |
| |
} |
| |
return r; |
| |
} |
| |
|
| |
void Ptriangleq(NODE arg,LIST *rp) |
| |
{ |
| |
NODE ret; |
| |
|
| |
asir_assert(ARG0(arg),O_LIST,"sparseleq"); |
| |
ret = triangleq(BDY((LIST)ARG0(arg))); |
| |
MKLIST(*rp,ret); |
| } |
} |