Changeset 7674cc3 in tol


Ignore:
Timestamp:
Sep 3, 2009, 10:46:33 PM (17 years ago)
Author:
Víctor de Buen <vdebuen@…>
Branches:
1941-docker-image-to-test, devel, master
Children:
c6a1d6d
Parents:
233738e
Message:

Fixed bugs in BVMat::sum

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

File:
1 edited

Legend:

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

    r233738e r7674cc3  
    296296////////////////////////////////////////////////////////////////////////////////
    297297{
     298  int result = 0;
     299  C.Delete();
    298300  if(!A_.CheckDefined(fName)) { return(-1); }
    299301  if(!B_.CheckDefined(fName)) { return(-1); }
    … …  
    307309  {
    308310    err_invalid_dimensions(fName,A_,B_);
    309     return(-1);
    310   }
    311   C.Delete();
    312   BVMat* A__, *B__;
    313   if(convertIfNeeded_all2bRd(A_,B_,A__,B__,fName,false)==0)
    314   {
    315     convertIfNeeded_all2cRs(A_,B_,A__,B__,fName,false);
    316   }
    317 
     311    result = -1;
     312  }
     313  BVMat* A__=(BVMat*)&A_, *B__=(BVMat*)&B_;
    318314  BVMat &A = *A__,  &B = *B__;
    319   int result = 0;
    320   if(A.code_!=B.code_)
    321   {
    322     err_invalid_subtypes(fName,A,B);
    323     result = -2;
    324   }
    325   int k, n;
    326   const double* Bx;
    327         double* Cx;
    328   switch(A.code_) {
    329   case(ESC_blasRdense  ) :
    330     C.Copy(A);
    331     n = A.s_.blasRdense_->nzmax;
    332     Bx = (const double*)B.s_.blasRdense_->x;
    333     Cx = (      double*)C.s_.blasRdense_->x;
    334     for(k=0; k<n; k++)
    335     {
    336       Cx[k] += b*Bx[k];
    337     };
    338     break;
    339   case(ESC_chlmRsparse) :
    340     C.code_ = ESC_chlmRsparse;
    341     C.s_.chlmRsparse_= cholmod_add
    342     (
    343       A.s_.chlmRsparse_, B.s_.chlmRsparse_,
    344       a_, b_, 1, 1, common_
    345     );
    346     break;
    347   default:
    348     err_invalid_subtype(fName,A);
    349     result=-3; }
     315  if(result==0)
     316  {
     317    if(convertIfNeeded_all2bRd(A_,B_,A__,B__,fName,false)==0)
     318    {
     319      convertIfNeeded_all2cRs(A_,B_,A__,B__,fName,true);
     320    }
     321    A = *A__; B = *B__;
     322    if(A.code_!=B.code_)
     323    {
     324      err_invalid_subtypes(fName,A,B);
     325      result = -2;
     326    }
     327  }
     328  if(result==0)
     329  {
     330    int k, n;
     331    const double* Bx;
     332          double* Cx;
     333    switch(A.code_) {
     334    case(ESC_blasRdense  ) :
     335      C.Copy(A);
     336      n = A.s_.blasRdense_->nzmax;
     337      Bx = (const double*)B.s_.blasRdense_->x;
     338      Cx = (      double*)C.s_.blasRdense_->x;
     339      for(k=0; k<n; k++)
     340      {
     341        Cx[k] += b*Bx[k];
     342      };
     343      break;
     344    case(ESC_chlmRsparse) :
     345      C.code_ = ESC_chlmRsparse;
     346      C.s_.chlmRsparse_= cholmod_add
     347      (
     348        A.s_.chlmRsparse_, B.s_.chlmRsparse_,
     349        a_, b_, 1, 1, common_
     350      );
     351      break;
     352    default:
     353      err_invalid_subtype(fName,A);
     354      result=-3; }
     355  }
    350356  if(A__!=&A_) { delete A__; }
    351357  if(B__!=&B_) { delete B__; }
Note: See TracChangeset for help on using the changeset viewer.