Changeset 7674cc3 in tol
- Timestamp:
- Sep 3, 2009, 10:46:33 PM (17 years ago)
- Branches:
- 1941-docker-image-to-test, devel, master
- Children:
- c6a1d6d
- Parents:
- 233738e
- File:
-
- 1 edited
-
tol/btol/vmatrix_type/vmat_arith.cpp (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
tol/btol/vmatrix_type/vmat_arith.cpp
r233738e r7674cc3 296 296 //////////////////////////////////////////////////////////////////////////////// 297 297 { 298 int result = 0; 299 C.Delete(); 298 300 if(!A_.CheckDefined(fName)) { return(-1); } 299 301 if(!B_.CheckDefined(fName)) { return(-1); } … … 307 309 { 308 310 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_; 318 314 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 } 350 356 if(A__!=&A_) { delete A__; } 351 357 if(B__!=&B_) { delete B__; }
Note: See TracChangeset
for help on using the changeset viewer.
