[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