int main() { int i; int b = 99; int c = 999; //printf("%d\n",copyval(b)); //printf("%d\n",modval(&c)); for(i=1;i<=2 ; i++){ copyval(b); modval(&c); printf("%d\n",b); printf("%d\n",c); } return 0; }
void linearSystemPETSc<fullMatrix<double> >::addToMatrix(int row, int col, const fullMatrix<double> &val) { if (!_entriesPreAllocated) preAllocateEntries(); #ifdef PETSC_USE_COMPLEX fullMatrix<std::complex<double> > modval(val.size1(), val.size2()); for (int ii = 0; ii < val.size1(); ii++) { for (int jj = 0; jj < val.size1(); jj++) { modval(ii, jj) = val (jj, ii); modval(jj, ii) = val (ii, jj); } } #else fullMatrix<double> &modval = *const_cast<fullMatrix<double> *>(&val); for (int ii = 0; ii < val.size1(); ii++) { for (int jj = 0; jj < ii; jj++) { PetscScalar buff = modval(ii, jj); modval(ii, jj) = modval (jj, ii); modval(jj, ii) = buff; } } #endif PetscInt i = row, j = col; MatSetValuesBlocked(_a, 1, &i, 1, &j, &modval(0,0), ADD_VALUES); //transpose back so that the original matrix is not modified #ifndef PETSC_USE_COMPLEX for (int ii = 0; ii < val.size1(); ii++) for (int jj = 0; jj < ii; jj++) { PetscScalar buff = modval(ii,jj); modval(ii, jj) = modval (jj,ii); modval(jj, ii) = buff; } #endif _valuesNotAssembled = true; }