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>

Reply via email to