Changeset af58f78 in tol


Ignore:
Timestamp:
Mar 19, 2009, 9:03:11 AM (18 years ago)
Author:
Víctor de Buen <vdebuen@…>
Branches:
1941-docker-image-to-test, devel, master
Children:
845146f
Parents:
bc58504
Message:

Simplified cycles in BPol2sparse
Fixes #663

git-svn-id: ​https://www.tol-project.org/svn/tolp/trunk@773 be4846ae-f051-483a-831f-b64e7d08527f

File:
1 edited

Legend:

Unmodified
Added
Removed
  • tol/btol/vmatrix_type/vmat_convert.cpp

    rbc58504 raf58f78  
    613613  register int n = Minimum(nrow,ncol);
    614614  register int nnz = 0;
    615   register int i, j, k, h, d, jMin, jMax;
     615  register int i, j, k, h, d;
    616616  register double c;
    617617  register BPolyn<BDat> pol = pol_;
    … …  
    619619  register int s=pol.Size();
    620620  register const BMonome<BDat>* mon = pol.Buffer();
     621
    621622  for(k=0; k<s; k++)
    622623  {
    623624    d = mon->Degree();
    624     jMin = Maximum(0,-d);
    625     jMax = Minimum(nrow-d-1,ncol-1);
    626     if(jMax<jMin)
    627     {
    628       s=k;
    629       break;
     625    if(d>=0)
     626    {
     627      for(i=d; (i<nrow)&&(i-d<ncol); i++)
     628      {
     629        nnz++;
     630      }
    630631    }
    631632    else
    632633    {
    633       nnz += Maximum(0,jMax-jMin+1);
    634       mon++;
    635     }
     634      for(j=-d; (j<ncol)&&(j+d<nrow); j++)
     635      {
     636        nnz++;
     637      }
     638    }
     639    mon++;
    636640  }
    637641  mon = pol.Buffer();
    … …  
    646650    d = mon->Degree();
    647651    c = mon->Coef().Value();
    648     jMin = Maximum(0,-d);
    649     jMax = Minimum(nrow-d-1,ncol-1);
    650     assert(jMax>=jMin);
    651     for(j=jMin; j<=jMax; j++, h++)
    652     {
    653       i=j+d;
    654       assert((i>=0)&&(i<nrow));
    655       assert((j>=0)&&(j<ncol));
    656       assert(h<nnz);
    657       r_[h] = i;
    658       c_[h] = j;
    659       x_[h] = c;
     652    if(d>=0)
     653    {
     654      for(i=d; (i<nrow)&&(i-d<ncol); i++, h++)
     655      {
     656        r_[h] = i;
     657        c_[h] = i-d;
     658        x_[h] = c;
     659      }
     660    }
     661    else
     662    {
     663      for(j=-d; (j<ncol)&&(j+d<nrow); j++, h++)
     664      {
     665        r_[h] = j+d;
     666        c_[h] = j;
     667        x_[h] = c;
     668      }
    660669    }
    661670    mon++;
    662671  }
     672
    663673  s_.chlmRsparse_ = cholmod_triplet_to_sparse(triplet, nnz, common_);
    664674  cholmod_free_triplet(&triplet,common_);
Note: See TracChangeset for help on using the changeset viewer.