[BACK]Return to dist.c CVS log [TXT][DIR] Up to [local] / OpenXM_contrib2 / asir2000 / engine

Diff for /OpenXM_contrib2/asir2000/engine/dist.c between version 1.48 and 1.51

version 1.48, 2014/08/19 06:35:01 version 1.51, 2015/09/24 04:43:13
Line 45 
Line 45 
  * 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/engine/dist.c,v 1.47 2013/12/20 02:02:24 noro Exp $   * $OpenXM: OpenXM_contrib2/asir2000/engine/dist.c,v 1.50 2014/10/10 09:02:25 noro Exp $
 */  */
 #include "ca.h"  #include "ca.h"
   
Line 71  int (*cmpdl)()=cmpdl_revgradlex;
Line 71  int (*cmpdl)()=cmpdl_revgradlex;
 int (*cmpdl_tie_breaker)();  int (*cmpdl_tie_breaker)();
 int (*primitive_cmpdl[3])() = {cmpdl_revgradlex,cmpdl_gradlex,cmpdl_lex};  int (*primitive_cmpdl[3])() = {cmpdl_revgradlex,cmpdl_gradlex,cmpdl_lex};
   
   Obj current_top_weight;
   int current_top_weight_len;
   
 int do_weyl;  int do_weyl;
   
 int dp_nelim,dp_fcoeffs;  int dp_nelim,dp_fcoeffs;
Line 124  int has_sfcoef_p(P f)
Line 127  int has_sfcoef_p(P f)
         }          }
 }  }
   
 extern Obj current_top_weight;  extern Obj nd_top_weight;
 int current_top_weight_len;  
   
   void reset_top_weight()
   {
           cmpdl = cmpdl_tie_breaker;
           cmpdl_tie_breaker = 0;
           nd_top_weight = 0;
           current_top_weight = 0;
           current_top_weight_len = 0;
   }
   
 void initd(struct order_spec *spec)  void initd(struct order_spec *spec)
 {  {
         int len,i,k,row;          int len,i,k,row;
Line 181  void initd(struct order_spec *spec)
Line 192  void initd(struct order_spec *spec)
                 cmpdl_tie_breaker = cmpdl;                  cmpdl_tie_breaker = cmpdl;
                 cmpdl = cmpdl_top_weight;                  cmpdl = cmpdl_top_weight;
                 if ( OID(current_top_weight) == O_VECT ) {                  if ( OID(current_top_weight) == O_VECT ) {
                    mat = (Q **)&BDY((MAT)current_top_weight);                     mat = (Q **)&BDY((VECT)current_top_weight);
                    row = 1;                     row = 1;
                 } else {                  } else {
                    mat = (Q **)BDY((MAT)current_top_weight);                     mat = (Q **)BDY((MAT)current_top_weight);
Line 852  void weyl_muld(VL vl,DP p1,DP p2,DP *pr)
Line 863  void weyl_muld(VL vl,DP p1,DP p2,DP *pr)
                 bzero(w,l*sizeof(MP));                  bzero(w,l*sizeof(MP));
                 *pr = s;                  *pr = s;
         }          }
   }
   
   void actm(VL vl,int nv,MP m1,MP m2,DP *pr)
   {
     DL d1,d2,d;
     int n2,i,j,k;
     Q jq,c,c1;
     MP m;
     P t;
   
     d1 = m1->dl;
     d2 = m2->dl;
     for ( i = 0; i < nv; i++ )
       if ( d1->d[i] > d2->d[i] ) {
         *pr = 0; return;
       }
     NEWDL(d,nv);
     c = ONE;
     for ( i = 0; i < nv; i++ ) {
       for ( j = d2->d[i], k = d1->d[i]; k > 0; k--, j-- ) {
         STOQ(j,jq); mulq(c,jq,&c1); c = c1;
       }
       d->d[i] = d2->d[i]-d1->d[i];
     }
     mulp(vl,C(m1),C(m2),&t);
     NEWMP(m);
     mulp(vl,(P)c,t,&C(m));
     m->dl = d;
     MKDP(nv,m,*pr);
   }
   
   void weyl_actd(VL vl,DP p1,DP p2,DP *pr)
   {
     int n;
     MP m1,m2;
     DP d,r,s;
   
     if ( !p1 || !p2 ) *pr = 0;
     else {
       n = NV(p1);
       r = 0;
       for ( m1 = BDY(p1); m1; m1 = NEXT(m1) )
         for ( m2 = BDY(p2); m2; m2 = NEXT(m2) ) {
           actm(vl,n,m1,m2,&d);
           addd(vl,r,d,&s); r = s;
         }
       *pr = r;
     }
 }  }
   
 /* monomial * polynomial */  /* monomial * polynomial */

Legend:
Removed from v.1.48  
changed lines
  Added in v.1.51

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>