Revision 4369 - (hide annotations)
Fri Apr 19 02:32:34 2013 UTC (6 years ago) by jfenwick
File size: 3672 byte(s)
```fix problems revealed on freebsd
```
 1 ksteube 1315 2 jfenwick 3981 /***************************************************************************** 3 ksteube 1811 * 4 jfenwick 4154 * Copyright (c) 2003-2013 by University of Queensland 5 jfenwick 3981 6 ksteube 1811 * 7 * Primary Business: Queensland, Australia 8 * Licensed under the Open Software License version 3.0 9 10 * 11 jfenwick 3981 * Development until 2012 by Earth Systems Science Computational Center (ESSCC) 12 * Development since 2012 by School of Earth Sciences 13 * 14 *****************************************************************************/ 15 ksteube 1315 16 ksteube 1811 17 jfenwick 3981 /*************************************************************************************************/ 18 ksteube 1315 19 gross 1363 /* Paso: SparseMatrix: adds the row entries to an array */ 20 ksteube 1315 21 jfenwick 3981 /*************************************************************************************************/ 22 ksteube 1315 23 gross 1363 /* Author: l.gross@uq.edu.au */ 24 ksteube 1315 25 jfenwick 3981 /************************************************************************************/ 26 ksteube 1315 27 #include "Paso.h" 28 #include "SparseMatrix.h" 29 30 gross 1363 void Paso_SparseMatrix_addRow_CSR_OFFSET0(Paso_SparseMatrix* A, double* array) { 31 phornby 1628 dim_t ir,irow,icb,irb; 32 ksteube 1315 index_t iptr; 33 register double fac; 34 #pragma omp parallel for private(ir,irb,irow,fac,iptr,icb) schedule(static) 35 for (ir=0;ir< A->pattern->numOutput;ir++) { 36 for (irb=0;irb< A->row_block_size;irb++) { 37 irow=irb+A->row_block_size*ir; 38 gross 3005 fac=0.; 39 ksteube 1315 for (iptr=A->pattern->ptr[ir];iptrpattern->ptr[ir+1]; iptr++) { 40 for (icb=0;icb< A->col_block_size;icb++) 41 gross 1363 fac+=A->val[iptr*A->block_size+irb+A->row_block_size*icb]; 42 gross 3005 43 ksteube 1315 } 44 array[irow]+=fac; 45 gross 3005 } 46 ksteube 1315 } 47 } 48 gross 3005 void Paso_SparseMatrix_copyBlockToMainDiagonal(Paso_SparseMatrix * A_p, const double* in) 49 { 50 index_t ir; 51 const dim_t n = A_p->pattern->numOutput; 52 const dim_t nblk = A_p->block_size; 53 const size_t nblk_size=sizeof(double)*nblk ; 54 const index_t* main_ptr=Paso_SparseMatrix_borrowMainDiagonalPointer(A_p); 55 #pragma omp parallel for private(ir) schedule(static) 56 for (ir=0;ir< n;ir++) { 57 memcpy((void *)(&(A_p->val[main_ptr[ir]*nblk])), (void *)( &in[nblk*ir] ), nblk_size); 58 } 59 60 } 61 void Paso_SparseMatrix_copyBlockFromMainDiagonal(Paso_SparseMatrix * A_p, double* out) 62 { 63 index_t ir; 64 const dim_t n = A_p->pattern->numOutput; 65 const dim_t nblk =A_p->block_size; 66 const size_t nblk_size=sizeof(double)*nblk ; 67 const index_t* main_ptr=Paso_SparseMatrix_borrowMainDiagonalPointer(A_p); 68 #pragma omp parallel for private(ir) schedule(static) 69 for (ir=0;ir< n;ir++) { 70 memcpy((void *)( &out[nblk*ir] ), (void *)(&(A_p->val[main_ptr[ir]*nblk])), nblk_size); 71 } 72 } 73 74 void Paso_SparseMatrix_copyFromMainDiagonal(Paso_SparseMatrix * A_p, double* out) 75 { 76 index_t ir, ib; 77 const dim_t n = A_p->pattern->numOutput; 78 const dim_t nblk = A_p->block_size; 79 const dim_t blk = MIN(A_p->row_block_size, A_p->col_block_size); 80 const index_t* main_ptr=Paso_SparseMatrix_borrowMainDiagonalPointer(A_p); 81 #pragma omp parallel for private(ir,ib) schedule(static) 82 for (ir=0;ir< n;ir++) { 83 for (ib=0;ibval[main_ptr[ir]*nblk+ib+A_p->row_block_size*ib]; 85 } 86 } 87 88 } 89 90 void Paso_SparseMatrix_copyToMainDiagonal(Paso_SparseMatrix * A_p, const double* in) 91 { 92 index_t ir, ib; 93 const dim_t n = A_p->pattern->numOutput; 94 const dim_t nblk = A_p->block_size; 95 const dim_t blk = MIN(A_p->row_block_size, A_p->col_block_size); 96 const index_t* main_ptr=Paso_SparseMatrix_borrowMainDiagonalPointer(A_p); 97 #pragma omp parallel for private(ir,ib) schedule(static) 98 for (ir=0;ir< n;ir++) { 99 for (ib=0;ibval[main_ptr[ir]*nblk+ib+A_p->row_block_size*ib] = in[ir*blk+ib]; 101 } 102 } 103 104 jfenwick 4369 } 105

Name Value