[petsc-users] petsc does not solve this [A][x] = [b] problem in parallel.....
Ravi Kannan
rxk at cfdrc.com
Sat Mar 23 17:31:45 CDT 2013
Dear All,
This is Ravi Kannan from CFD Research Corporation.
I am trying to solve this Ax=b problem in parallel and serial with no preconditioner. The A matrix is 3x3. The matrices are identical, as shown by the PETSCViewerAsciiFormat.
The serial one solves to nearly machine zero in one iteration. The parallel residual is much higher than zero. MORE IMPORTANTLY, the ghost values are not updated after the Ksp solve!
Here is the code snippet:
int PetSc::solving(std::vector<double>& sol)
{
#ifdef TIMING_STUDY_ON
bool solver_timing_study=true;
#else
bool solver_timing_study=false;
#endif
PetscLogDouble startsolvingfunc, endsolvingfunc;
_ierr = PetscGetTime(&startsolvingfunc);
VecSetValues(_x,_size,&_id[0],&sol[0],INSERT_VALUES);
PetscLogDouble start, end;
_ierr = PetscGetTime(&start);
_assemblySystem();
_ierr = PetscGetTime(&end);
if(_LSType != mf_base::DIRECT) KSPSetInitialGuessNonzero(_ksp, PETSC_TRU
E);
_ierr = KSPSetTolerances(_ksp,_resNob2,_abstol,1.e+30,_maxits);
PetscLogDouble v1,v2;
_ierr = PetscGetTime(&v1);//CHKERRQ(_ierr);
_ierr = KSPSolve(_ksp,_b,_x);//CHKERRQ(_ierr);
_ierr = PetscGetTime(&v2);//CHKERRQ(_ierr);
_elapsed_time = fabs(v2 - v1);
VecGhostUpdateBegin(_x,INSERT_VALUES,SCATTER_FORWARD);
VecGhostUpdateEnd(_x,INSERT_VALUES,SCATTER_FORWARD);
// z = A*x
_ierr = MatMult(_A,_x,_z);
// z = z - b (which is Ax-b)
_ierr = VecAXPY(_z,-1.0,_b);
_ierr = VecNorm(_z,NORM_2,&_norm);CHKERRQ(_ierr);
_ierr = KSPGetIterationNumber(_ksp,&_iters);CHKERRQ(_ierr);
double flops;
_ierr = PetscGetFlops(&flops); CHKERRQ(_ierr);
// SVM changes 04/02/07
Vec lx;
_ierr = VecGhostGetLocalForm(_x,&lx);
PetscScalar *xx;
//VecGetArray(Vec x,PetscScalar *a[]) :Remove this later
VecGetArray(lx,&xx); // SVM changes 04/02/07
for(int i=0;i<sol.size();++i){sol[i]=xx[i];}
VecRestoreArray(lx,&xx); // SVM changes 04/02/07
_ierr = VecGhostRestoreLocalForm(_x,&lx);
_ierr = MatZeroEntries(_A);
_ierr = PetscGetTime(&endsolvingfunc);
return 0;
}
Anything wrong with this?
Thanks
Ravi
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20130323/21eaa73e/attachment.html>
More information about the petsc-users
mailing list