Changeset 12475 for issm/trunk-jpl/src/c/shared/Matrix/MatrixUtils.cpp
- Timestamp:
- 06/20/12 12:10:48 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/shared/Matrix/MatrixUtils.cpp
r12441 r12475 17 17 18 18 /*FUNCTION TripleMultiply {{{*/ 19 int TripleMultiply( double* a, int nrowa, int ncola, int itrna, double* b, int nrowb, int ncolb, int itrnb, double* c, int nrowc, int ncolc, int itrnc, double* d, int iaddd){19 int TripleMultiply( IssmDouble* a, int nrowa, int ncola, int itrna, IssmDouble* b, int nrowb, int ncolb, int itrnb, IssmDouble* c, int nrowc, int ncolc, int itrnc, IssmDouble* d, int iaddd){ 20 20 /*TripleMultiply Perform triple matrix product a*b*c+d.*/ 21 21 22 22 int idima,idimb,idimc,idimd; 23 double* dtemp;23 IssmDouble* dtemp; 24 24 25 25 /* set up dimensions for triple product */ … … 62 62 /* perform the matrix triple product in the order that minimizes the 63 63 number of multiplies and the temporary space used, noting that 64 (a*b)*c requires ac(b+d) multiplies and ac doubles, and a*(b*c)65 requires bd(a+c) multiplies and bd doubles (both are the same for64 (a*b)*c requires ac(b+d) multiplies and ac IssmDoubles, and a*(b*c) 65 requires bd(a+c) multiplies and bd IssmDoubles (both are the same for 66 66 a symmetric triple product) */ 67 67 … … 69 69 70 70 if (idima*idimc*(idimb+idimd) <= idimb*idimd*(idima+idimc)) { 71 dtemp=xNew< double>(idima*idimc);71 dtemp=xNew<IssmDouble>(idima*idimc); 72 72 73 73 MatrixMultiply(a,nrowa,ncola,itrna,b,nrowb,ncolb,itrnb,dtemp,0); 74 74 MatrixMultiply(dtemp,idima,idimc,0,c,nrowc,ncolc,itrnc,d,iaddd); 75 xDelete< double>(dtemp);75 xDelete<IssmDouble>(dtemp); 76 76 } 77 77 … … 79 79 80 80 else { 81 dtemp=xNew< double>(idimb*idimd);81 dtemp=xNew<IssmDouble>(idimb*idimd); 82 82 83 83 MatrixMultiply(b,nrowb,ncolb,itrnb,c,nrowc,ncolc,itrnc,dtemp,0); 84 84 MatrixMultiply(a,nrowa,ncola,itrna,dtemp,idimb,idimd,0,d,iaddd); 85 xDelete< double>(dtemp);85 xDelete<IssmDouble>(dtemp); 86 86 } 87 87 … … 89 89 }/*}}}*/ 90 90 /*FUNCTION MatrixMuliply {{{*/ 91 int MatrixMultiply( double* a, int nrowa, int ncola, int itrna, double* b, int nrowb, int ncolb, int itrnb, double* c, int iaddc ){91 int MatrixMultiply( IssmDouble* a, int nrowa, int ncola, int itrna, IssmDouble* b, int nrowb, int ncolb, int itrnb, IssmDouble* c, int iaddc ){ 92 92 /*MatrixMultiply Perform matrix multiplication a*b+c.*/ 93 93 int noerr=1; … … 158 158 }/*}}}*/ 159 159 /*FUNCTION MatrixInverse {{{*/ 160 int MatrixInverse( double* a, int ndim, int nrow, double* b, int nvec, double* pdet ){160 int MatrixInverse( IssmDouble* a, int ndim, int nrow, IssmDouble* b, int nvec, IssmDouble* pdet ){ 161 161 /* MatrixInverse Perform matrix inversion and linear equation solution. 162 162 … … 172 172 int i,j,k,ipt,jpt,irow,icol,ipiv,ncol; 173 173 int *pivrc1,*pivrc2,*pindx; 174 double pivot,det,dtemp;174 IssmDouble pivot,det,dtemp; 175 175 176 176 if (!b && nvec) { … … 333 333 return noerr; 334 334 }/*}}}*/ 335 /*FUNCTION Matrix2x2Determinant( double* Adet,double* A) {{{*/336 void Matrix2x2Determinant( double* Adet,double* A){335 /*FUNCTION Matrix2x2Determinant(IssmDouble* Adet,IssmDouble* A) {{{*/ 336 void Matrix2x2Determinant(IssmDouble* Adet,IssmDouble* A){ 337 337 /*Compute determinant of a 2x2 matrix*/ 338 338 … … 341 341 } 342 342 /*}}}*/ 343 /*FUNCTION Matrix2x2Invert( double* Ainv,double* A) {{{*/344 void Matrix2x2Invert( double* Ainv,double* A){343 /*FUNCTION Matrix2x2Invert(IssmDouble* Ainv,IssmDouble* A) {{{*/ 344 void Matrix2x2Invert(IssmDouble* Ainv,IssmDouble* A){ 345 345 346 346 /*Intermediaries*/ 347 double det;347 IssmDouble det; 348 348 349 349 /*Compute determinant*/ … … 358 358 359 359 }/*}}}*/ 360 /*FUNCTION Matrix3x3Determinant( double* Adet,double* A) {{{*/361 void Matrix3x3Determinant( double* Adet,double* A){360 /*FUNCTION Matrix3x3Determinant(IssmDouble* Adet,IssmDouble* A) {{{*/ 361 void Matrix3x3Determinant(IssmDouble* Adet,IssmDouble* A){ 362 362 /*Compute determinant of a 3x3 matrix*/ 363 363 … … 366 366 } 367 367 /*}}}*/ 368 /*FUNCTION Matrix3x3Invert( double* Ainv,double* A) {{{*/369 void Matrix3x3Invert( double* Ainv,double* A){368 /*FUNCTION Matrix3x3Invert(IssmDouble* Ainv,IssmDouble* A) {{{*/ 369 void Matrix3x3Invert(IssmDouble* Ainv,IssmDouble* A){ 370 370 371 371 /*Intermediaries*/ 372 double det;372 IssmDouble det; 373 373 374 374 /*Compute determinant*/ … … 388 388 389 389 }/*}}}*/ 390 /*FUNCTION MatrixTranspose( double* Adet,double* A) {{{*/391 void MatrixTranspose( double* tA,double* A, int nrows, int ncols){390 /*FUNCTION MatrixTranspose(IssmDouble* Adet,IssmDouble* A) {{{*/ 391 void MatrixTranspose(IssmDouble* tA,IssmDouble* A, int nrows, int ncols){ 392 392 /*Transpose a n*m matrix*/ 393 393
Note:
See TracChangeset
for help on using the changeset viewer.