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

Diff for /OpenXM_contrib2/asir2000/engine/mat.c between version 1.12 and 1.15

version 1.12, 2004/08/18 06:30:07 version 1.15, 2005/12/21 23:18:16
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/mat.c,v 1.11 2004/07/26 07:15:46 saito Exp $   * $OpenXM: OpenXM_contrib2/asir2000/engine/mat.c,v 1.14 2005/06/03 07:16:16 saito Exp $
 */  */
 #include "ca.h"  #include "ca.h"
 #include "../parse/parse.h"  #include "../parse/parse.h"
   
 extern int StrassenSize;  extern int StrassenSize;
   /* remove miser type
 void mulmatmat_miser();  void mulmatmat_miser();
   */
   
 void addmat(vl,a,b,c)  void addmat(vl,a,b,c)
 VL vl;  VL vl;
Line 103  MAT a,b,*c;
Line 105  MAT a,b,*c;
   }    }
 }  }
   
   /* remove miser type
 void addmat_miser(vl,a,b,c,ar0,ac0,ar1,ac1,br0,bc0,br1,bc1)  void addmat_miser(vl,a,b,c,ar0,ac0,ar1,ac1,br0,bc0,br1,bc1)
 VL vl;  VL vl;
 MAT a,b,*c;  MAT a,b,*c;
Line 197  int ar0,ac0,ar1,ac1,br0,bc0,br1,bc1;
Line 200  int ar0,ac0,ar1,ac1,br0,bc0,br1,bc1;
     *c = t;      *c = t;
   }    }
 }  }
   */
   
 void mulmat(vl,a,b,c)  void mulmat(vl,a,b,c)
 VL vl;  VL vl;
Line 242  Obj a,b,*c;
Line 246  Obj a,b,*c;
                                         case O_VECT:                                          case O_VECT:
                                                 mulmatvect(vl,(MAT)a,(VECT)b,(VECT *)c); break;                                                  mulmatvect(vl,(MAT)a,(VECT)b,(VECT *)c); break;
                                         case O_MAT:                                          case O_MAT:
                                                   mulmatmat(vl, (MAT)a, (MAT)b, (MAT *)c); break;
   /* remove miser type
                                                 mulmatmat_miser(vl,(MAT)a,(MAT)b,(MAT *)c, 0,0, ((MAT)a)->row-1, ((MAT)a)->col-1, 0,0,((MAT)b)->row-1, ((MAT)b)->col-1); break;                                                  mulmatmat_miser(vl,(MAT)a,(MAT)b,(MAT *)c, 0,0, ((MAT)a)->row-1, ((MAT)a)->col-1, 0,0,((MAT)b)->row-1, ((MAT)b)->col-1); break;
   */
                                         default:                                          default:
                                                 notdef(vl,a,b,c); break;                                                  notdef(vl,a,b,c); break;
                                 }                                  }
Line 366  void mulmatmat(vl,a,b,c)
Line 373  void mulmatmat(vl,a,b,c)
 VL vl;  VL vl;
 MAT a,b,*c;  MAT a,b,*c;
 {  {
 #if 0  
         int arow,bcol,i,j,k,m;  
         MAT t;  
         pointer s,u,v;  
         pointer *ab,*tb;  
   
         /* Mismach col and row */  
         if ( a->col != b->row ) {  
                 *c = 0; error("mulmat : size mismatch");  
         } else {  
                 arow = a->row; m = a->col; bcol = b->col;  
                 MKMAt(t,arow,bcol);  
                 for ( i = 0; i < arow; i++ )  
                         for ( j = 0, ab = BDY(a)[i], tb = BDY(t)[i]; j < bcol; j++ ) {  
                                 for ( k = 0, s = 0; k < m; k++ ) {  
                                         arf_mul(vl,(Obj)ab[k],(Obj)BDY(b)[k][j],(Obj *)&u);  
                                         arf_add(vl,(Obj)s,(Obj)u,(Obj *)&v);  
                                         s = v;  
                                 }  
                                 tb[j] = s;  
                         }  
                 *c = t;  
         }  
 }  
   
 void Strassen(arg, c)  
 NODE arg;  
 Obj *c;  
 {  
   AT a,b;  
         VL vl;  
   
         /* tomo */  
         a = (MAT)ARG0(arg);  
         b = (MAT)ARG1(arg);  
         vl = CO;  
         strassen(CO, a, b, c);  
 }  
   
 void strassen(vl,a,b,c)  
 VL vl;  
 MAT a,b,*c;  
 {  
 #endif  
         int arow,bcol,i,j,k,m, h, arowh, bcolh;          int arow,bcol,i,j,k,m, h, arowh, bcolh;
         MAT t, a11, a12, a21, a22;          MAT t, a11, a12, a21, a22;
         MAT p, b11, b12, b21, b22;          MAT p, b11, b12, b21, b22;
Line 456  MAT a,b,*c;
Line 419  MAT a,b,*c;
                         m++;                          m++;
                         pflag2 = 1;                          pflag2 = 1;
                 }                  }
 /*  
                 MKMAT(aa, arow, m);  
                 for (i = 0; i < a->row; i++) {  
                         for (j = 0; j < a->col; j++) {  
                                 aa->body[i][j] = a->body[i][j];  
                         }  
                 }  
                 i = bcol/2;  
                 j = bcol - i;  
                 if (i != j) {  
                         bcol++;  
                 }  
                 MKMAT(bb, m, bcol);  
                 for (i = 0; i < b->row; i++) {  
                         for ( j = 0; j < b->col; j++) {  
                                 bb->body[i][j] = b->body[i][j];  
                         }  
                 }  
 */  
   
                 /* split matrix A and B */                  /* split matrix A and B */
                 a1row = arow/2; a1col = m/2;                  a1row = arow/2; a1col = m/2;
Line 634  MAT a,b,*c;
Line 578  MAT a,b,*c;
         *c = t;          *c = t;
 }  }
   
   #if 0
   /* remove miser type */
 void mulmatmat_miser(vl,a,b,c,ar0,ac0,ar1,ac1,br0,bc0,br1,bc1)  void mulmatmat_miser(vl,a,b,c,ar0,ac0,ar1,ac1,br0,bc0,br1,bc1)
 VL vl;  VL vl;
 MAT a,b,*c;  MAT a,b,*c;
Line 806  int ar0, ac0, ar1, ac1, br0, bc0, br1, bc1;
Line 752  int ar0, ac0, ar1, ac1, br0, bc0, br1, bc1;
         }          }
         *c = t;          *c = t;
 }  }
   #endif
   
 void mulmatvect(vl,a,b,c)  void mulmatvect(vl,a,b,c)
 VL vl;  VL vl;
Line 823  VECT *c;
Line 770  VECT *c;
         else if ( a->col != b->len ) {          else if ( a->col != b->len ) {
                 *c = 0; error("mulmatvect : size mismatch");                  *c = 0; error("mulmatvect : size mismatch");
         } else {          } else {
   #if 0
                 for ( i = 0; i < b->len; i++ )                  for ( i = 0; i < b->len; i++ )
                         if ( BDY(b)[i] && OID((Obj)BDY(b)[i]) > O_R )                          if ( BDY(b)[i] && OID((Obj)BDY(b)[i]) > O_R )
                                 error("mulmatvect : invalid argument");                                  error("mulmatvect : invalid argument");
   #endif
                 arow = a->row; m = a->col;                  arow = a->row; m = a->col;
                 MKVECT(t,arow);                  MKVECT(t,arow);
                 for ( i = 0; i < arow; i++ ) {                  for ( i = 0; i < arow; i++ ) {

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

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