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

Diff for /OpenXM_contrib2/asir2018/engine/dist.c between version 1.12 and 1.14

version 1.12, 2019/11/12 07:47:45 version 1.14, 2019/11/12 22:27:04
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/asir2018/engine/dist.c,v 1.11 2019/11/01 04:28:53 noro Exp $   * $OpenXM: OpenXM_contrib2/asir2018/engine/dist.c,v 1.13 2019/11/12 12:50:40 noro Exp $
 */  */
 #include "ca.h"  #include "ca.h"
   
Line 2654  int dpm_base_ordtype;;
Line 2654  int dpm_base_ordtype;;
 DMMstack push_schreyer_order(LIST data,DMMstack stack)  DMMstack push_schreyer_order(LIST data,DMMstack stack)
 {  {
   DMMstack t;    DMMstack t;
   int len,i;    DP dp;
     MP mp;
     DMM m0,m1;
     DPM dpm0,dpm1;
     int len,i,nv;
   NODE in,t1;    NODE in,t1;
   LIST l;    LIST l;
   
Line 2666  DMMstack push_schreyer_order(LIST data,DMMstack stack)
Line 2670  DMMstack push_schreyer_order(LIST data,DMMstack stack)
   NEWDMMstack(t);    NEWDMMstack(t);
   t->rank = len;    t->rank = len;
   t->in = (DMM *)MALLOC((len+1)*sizeof(DMM));    t->in = (DMM *)MALLOC((len+1)*sizeof(DMM));
     t->sum = (DMM *)MALLOC((len+1)*sizeof(DMM));
   if ( stack ) {    if ( stack ) {
     MKNODE(t1,data,BDY(stack->obj)); MKLIST(l,t1); t->obj = l;      MKNODE(t1,data,BDY(stack->obj)); MKLIST(l,t1); t->obj = l;
       for ( i = 1; i <= len; i++, in = NEXT(in) ) {
          m1 = t->in[i] = BDY((DPM)BDY(in));
          NEWMP(mp); mp->dl = m1->dl; mp->c = m1->c; NEXT(mp) = 0;
          nv = ((DPM)BDY(in))->nv;
          MKDP(nv,mp,dp); dp->sugar = mp->dl->td;
          m0 = stack->sum[m1->pos]; MKDPM(nv,m0,dpm0);
          mulobjdpm(CO,(Obj)dp,dpm0,&dpm1);
          t->sum[i] = BDY(dpm1);
       }
   } else {    } else {
     MKNODE(t1,data,0); MKLIST(l,t1); t->obj = l;      MKNODE(t1,data,0); MKLIST(l,t1); t->obj = l;
       for ( i = 1; i <= len; i++, in = NEXT(in) ) {
         t->sum[i] = t->in[i] = BDY((DPM)BDY(in));
       }
   }    }
   for ( i = 1; i <= len; i++, in = NEXT(in) ) {  
     t->in[i] = BDY((DPM)BDY(in));  
   }  
   t->next = stack;;    t->next = stack;;
   dpm_ordtype = 3;    dpm_ordtype = 3;
   return t;    return t;
Line 2716  void dpm_sp(DPM p1,DPM p2,DPM *sp,DP *t1,DP *t2);
Line 2730  void dpm_sp(DPM p1,DPM p2,DPM *sp,DP *t1,DP *t2);
 DPM dpm_nf_and_quotient3(DPM sp,VECT psv,DPM *nf,P *dn);  DPM dpm_nf_and_quotient3(DPM sp,VECT psv,DPM *nf,P *dn);
 DPM dpm_nf_and_quotient4(DPM sp,DPM *ps,VECT psiv,DPM head,DPM *nf,P *dn);  DPM dpm_nf_and_quotient4(DPM sp,DPM *ps,VECT psiv,DPM head,DPM *nf,P *dn);
 DPM dpm_sp_nf(VECT psv,VECT psiv,int i,int j,DPM *nf);  DPM dpm_sp_nf(VECT psv,VECT psiv,int i,int j,DPM *nf);
   DPM dpm_sp_nf_asir(VECT psv,int i,int j,DPM *nf);
 void dpm_sort(DPM p,DPM *r);  void dpm_sort(DPM p,DPM *r);
   
 extern int DP_Multiple;  extern int DP_Multiple;
Line 2951  void dpm_schreyer_base(LIST g,LIST *s)
Line 2966  void dpm_schreyer_base(LIST g,LIST *s)
   DPM quo;    DPM quo;
   DP **m;    DP **m;
   NODE *psi;    NODE *psi;
   struct oEGT eg0,eg1;    NODE n1,n2,n3;
     int p1,p2,p3;
     struct oEGT eg0,eg1,egsp,egnf;
   extern struct oEGT egred;    extern struct oEGT egred;
   
   init_eg(&egra);    init_eg(&egra);
     init_eg(&egsp);
     init_eg(&egnf);
   nd = BDY(g);    nd = BDY(g);
   n = length(nd);    n = length(nd);
   MKVECT(psv,n+1);    MKVECT(psv,n+1);
Line 2971  void dpm_schreyer_base(LIST g,LIST *s)
Line 2990  void dpm_schreyer_base(LIST g,LIST *s)
   nv = ps[1]->nv;    nv = ps[1]->nv;
   m = (DP **)almat_pointer(n+1,n+1);    m = (DP **)almat_pointer(n+1,n+1);
   b0 = 0;    b0 = 0;
     get_eg(&eg0);
     for ( i = 1; i <= max; i++ ) {
       for ( n1 = psi[i]; n1; n1 = NEXT(n1) ) {
         p1 = (long)BDY(n1);
         for ( n2 = NEXT(n1); n2; n2 = NEXT(n2) ) {
           p2 = (long)BDY(n2);
           m[p1][p2] = dpm_sp_hm(ps[p1],ps[p2]);
         }
       }
       for ( n1 = psi[i]; n1; n1 = NEXT(n1) ) {
         p1 = (long)BDY(n1);
         for ( n2 = NEXT(n1); n2; n2 = NEXT(n2) ) {
           p2 = (long)BDY(n2);
           if ( !m[p1][p2] ) continue;
           for ( h = m[p1][p2], n3 = NEXT(n1); n3; n3 = NEXT(n3) ) {
             p3 = (long)BDY(n3);
             if ( n3 != n2 && m[p1][p3] && dp_redble(m[p1][p3],h) ) m[p1][p3] = 0;
           }
         }
       }
     }
     get_eg(&eg1); add_eg(&egsp,&eg0,&eg1); print_eg("SP",&egsp);
     get_eg(&eg0);
   for ( i = 1; i <= n; i++ ) {    for ( i = 1; i <= n; i++ ) {
     // sp(ps[i],ps[j]) = ti*ps[i]-tj*ps[j] => m[i][j] = ti  
     for ( j = i+1; j <= n; j++ ) m[i][j] = dpm_sp_hm(ps[i],ps[j]);  
     for ( j = i+1; j <= n; j++ ) {      for ( j = i+1; j <= n; j++ ) {
       if ( !m[i][j] ) continue;  
       for ( h = m[i][j], k = i+1; k <= n; k++ )  
         if ( k != j && m[i][k] && dp_redble(m[i][k],h) ) m[i][k] = 0;  
     }  
     for ( j = i+1; j <= n; j++ ) {  
       if ( m[i][j] ) {        if ( m[i][j] ) {
         quo = dpm_sp_nf(psv,psiv,i,j,&nf);          quo = dpm_sp_nf(psv,psiv,i,j,&nf);
         if ( nf )          if ( nf )
Line 2988  void dpm_schreyer_base(LIST g,LIST *s)
Line 3023  void dpm_schreyer_base(LIST g,LIST *s)
       }        }
     }      }
   }    }
     get_eg(&eg1); add_eg(&egnf,&eg0,&eg1); print_eg("NF",&egnf); printf("\n");
   if ( b0 ) NEXT(b) = 0;    if ( b0 ) NEXT(b) = 0;
   for ( t0 = t, nd = BDY(g); nd; nd = NEXT(nd) ) {    for ( t0 = t, nd = BDY(g); nd; nd = NEXT(nd) ) {
     dpm_ht((DPM)BDY(nd),&dpm); NEXTNODE(t0,t); BDY(t) = (pointer)dpm;      dpm_ht((DPM)BDY(nd),&dpm); NEXTNODE(t0,t); BDY(t) = (pointer)dpm;
Line 2999  void dpm_schreyer_base(LIST g,LIST *s)
Line 3035  void dpm_schreyer_base(LIST g,LIST *s)
 //    dpm_sort((DPM)BDY(t),&dpm);  //    dpm_sort((DPM)BDY(t),&dpm);
 //    BDY(t) = (pointer)dpm;  //    BDY(t) = (pointer)dpm;
 //  }  //  }
     b0 = dpm_sort_list(b0);  //    b0 = dpm_sort_list(b0);
 //  get_eg(&eg0);  //  get_eg(&eg0);
 //  b0 = dpm_reduceall(b0);  //  b0 = dpm_reduceall(b0);
 //  get_eg(&eg1); add_eg(&egra,&eg0,&eg1); print_eg("RA",&egra);  //  get_eg(&eg1); add_eg(&egra,&eg0,&eg1); print_eg("RA",&egra);

Legend:
Removed from v.1.12  
changed lines
  Added in v.1.14

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