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

Diff for /OpenXM_contrib2/asir2000/engine/nd.c between version 1.205 and 1.206

version 1.205, 2013/09/09 09:47:09 version 1.206, 2013/09/10 02:10:00
Line 1 
Line 1 
 /* $OpenXM: OpenXM_contrib2/asir2000/engine/nd.c,v 1.204 2013/09/09 07:29:25 noro Exp $ */  /* $OpenXM: OpenXM_contrib2/asir2000/engine/nd.c,v 1.205 2013/09/09 09:47:09 noro Exp $ */
   
 #include "nd.h"  #include "nd.h"
   
Line 6681  void ndv_save(NDV p,int index)
Line 6681  void ndv_save(NDV p,int index)
     fclose(s);      fclose(s);
 }  }
   
   void nd_save_mod(ND p,int index)
   {
       FILE *s;
       char name[BUFSIZ];
       int nv,sugar,len,c;
       NM m;
   
       sprintf(name,"%s/%d",Demand,index);
       s = fopen(name,"w");
       if ( !p ) {
                   len = 0;
           write_int(s,&len);
                   fclose(s);
           return;
       }
       nv = NV(p);
       sugar = SG(p);
       len = LEN(p);
       write_int(s,&nv); write_int(s,&sugar); write_int(s,&len);
           for ( m = BDY(p); m; m = NEXT(m) ) {
             c = CM(m); write_int(s,&c);
             write_intarray(s,DL(m),nd_wpd);
           }
       fclose(s);
   }
   
 NDV ndv_load(int index)  NDV ndv_load(int index)
 {  {
     FILE *s;      FILE *s;
Line 6725  NDV ndv_load(int index)
Line 6751  NDV ndv_load(int index)
     return d;      return d;
 }  }
   
   ND nd_load_mod(int index)
   {
       FILE *s;
       char name[BUFSIZ];
       int nv,sugar,len,i,c;
           ND d;
       NM m0,m;
   
       sprintf(name,"%s/%d",Demand,index);
       s = fopen(name,"r");
           /* if the file does not exist, it means p[index]=0 */
       if ( !s ) return 0;
   
       read_int(s,&nv);
           if ( !nv ) { fclose(s); return 0; }
   
       read_int(s,&sugar);
       read_int(s,&len);
           for ( m0 = 0, i = 0; i < len; i++ ) {
                   NEXTNM(m0,m);
                   read_int(s,&c); CM(m) = c;
                   read_intarray(s,DL(m),nd_wpd);
           }
           NEXT(m) = 0;
       MKND(nv,m0,len,d);
       SG(d) = sugar;
           fclose(s);
       return d;
   }
   
 void nd_det(int mod,MAT f,P *rp)  void nd_det(int mod,MAT f,P *rp)
 {  {
     VL fv,tv;      VL fv,tv;
Line 7309  ND *recompute_trace(NODE ti,ND **p,int nb,int mod)
Line 7365  ND *recompute_trace(NODE ti,ND **p,int nb,int mod)
 ND recompute_trace_one(NODE ti,ND *p,int nb,int mod)  ND recompute_trace_one(NODE ti,ND *p,int nb,int mod)
 {  {
   PGeoBucket r;    PGeoBucket r;
   int i,ci;    int i,ci,j;
   NODE t,s;    NODE t,s;
   ND m,tp;    ND m,tp;
   ND pi,rd;    ND pi,rd;
Line 7323  ND recompute_trace_one(NODE ti,ND *p,int nb,int mod)
Line 7379  ND recompute_trace_one(NODE ti,ND *p,int nb,int mod)
           ptomp(mod,(P)HCQ(m),&c);            ptomp(mod,(P)HCQ(m),&c);
           if ( ci = ((MQ)c)->cont ) {            if ( ci = ((MQ)c)->cont ) {
             HCM(m) = ci;              HCM(m) = ci;
             pi = p[QTOS((Q)ARG1(s))];              pi = p[j=QTOS((Q)ARG1(s))];
                 tp = nd_mul_nm(mod,BDY(m),pi);                  if ( !pi ) {
             add_pbucket(mod,r,tp);                    pi = nd_load_mod(j);
                     tp = nd_mul_nm(mod,BDY(m),pi);
                     nd_free(pi);
                 add_pbucket(mod,r,tp);
                   } else {
                     tp = nd_mul_nm(mod,BDY(m),pi);
                 add_pbucket(mod,r,tp);
               }
           }            }
           ci = 1;            ci = 1;
     } else {      } else {
Line 7334  ND recompute_trace_one(NODE ti,ND *p,int nb,int mod)
Line 7397  ND recompute_trace_one(NODE ti,ND *p,int nb,int mod)
         }          }
   }    }
   rd = normalize_pbucket(mod,r);    rd = normalize_pbucket(mod,r);
     free_pbucket(r);
   if ( ci != 1 ) nd_mul_c(mod,rd,ci);    if ( ci != 1 ) nd_mul_c(mod,rd,ci);
   return rd;    return rd;
 }  }
Line 7464  VECT nd_btog_one(LIST f,LIST v,int mod,struct order_sp
Line 7528  VECT nd_btog_one(LIST f,LIST v,int mod,struct order_sp
         printf("%d ",i); fflush(stdout);          printf("%d ",i); fflush(stdout);
     ti = BDY((LIST)BDY(t));      ti = BDY((LIST)BDY(t));
     p[j=QTOS((Q)ARG0(ti))] = recompute_trace_one(BDY((LIST)ARG1(ti)),p,nb,mod);      p[j=QTOS((Q)ARG0(ti))] = recompute_trace_one(BDY((LIST)ARG1(ti)),p,nb,mod);
       if ( Demand ) {
           nd_save_mod(p[j],j); nd_free(p[j]); p[j] = 0;
           }
   }    }
   for ( t = intred, i=0; t; t = NEXT(t), i++ ) {    for ( t = intred, i=0; t; t = NEXT(t), i++ ) {
         printf("%d ",i); fflush(stdout);          printf("%d ",i); fflush(stdout);
     ti = BDY((LIST)BDY(t));      ti = BDY((LIST)BDY(t));
     p[j=QTOS((Q)ARG0(ti))] = recompute_trace_one(BDY((LIST)ARG1(ti)),p,nb,mod);      p[j=QTOS((Q)ARG0(ti))] = recompute_trace_one(BDY((LIST)ARG1(ti)),p,nb,mod);
       if ( Demand ) {
           nd_save_mod(p[j],j); nd_free(p[j]); p[j] = 0;
           }
   }    }
   m = length(ind);    m = length(ind);
   MKVECT(vect,m);    MKVECT(vect,m);
   for ( j = 0, t = ind; j < m; j++, t = NEXT(t) )    for ( j = 0, t = ind; j < m; j++, t = NEXT(t) ) {
         BDY(vect)[j] = ndtodp(mod,p[QTOS((Q)BDY(t))]);          u = p[QTOS((Q)BDY(t))];
           if ( !u ) {
             u = nd_load_mod(QTOS((Q)BDY(t)));
             BDY(vect)[j] = ndtodp(mod,u);
             nd_free(u);
           } else
             BDY(vect)[j] = ndtodp(mod,u);
     }
   return vect;    return vect;
 }  }

Legend:
Removed from v.1.205  
changed lines
  Added in v.1.206

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