[petsc-users] parallel PCASM

Reza Madankan rm93 at buffalo.edu
Wed Dec 21 15:30:17 CST 2011


Hi Matthew;
Thank you for you quick reply.
Sorry for the wrong terminology, it's just few days I started working with
Petsc.
The whole story is that I have a linear system Ax = b which I want to solve
it using different preconditioners just to see the effect of each of those
on the solution and residual error. I have already used PCJACOBI and PCILU
to find the solution. I also would like to see the effect of using  PCASM.
PCASM on a single processor performs like PCILU, but its result will be
different from PCILU if I implement it on multiple processors. So, I am
trying to get it run for multiple processors case using the following
command:

mpiexec -np 2 ./pcasm

but I get the error message that I showed before. Now my question is that
how I can implement PCASM on multiple processors?

Thanks again
Reza



On Wed, Dec 21, 2011 at 3:19 PM, Matthew Knepley <knepley at gmail.com> wrote:

> On Wed, Dec 21, 2011 at 2:12 PM, Reza Madankan <rm93 at buffalo.edu> wrote:
>
>> Hello,
>> I am trying to parallelize the ASM preconditioner while solving a linear
>> system. For more detail, I have printed relevant parts of code in the
>> following:
>>
>
> I have no idea what "parallelize ASM" might mean.
>
> Below you likely have a bad value in b, the rhs you pass to the solver on
> line 487 of your code.
>
>   Matt
>
>
>> *static char help[]="Reading in a matrix\n";*
>> *
>> *
>> * #include<stdio.h>*
>> *
>> *
>> * #include<math.h>*
>> *
>> *
>> * #include<stdlib.h>*
>> *
>> *
>> * #include "petscvec.h" /* This enables us to use vectors. */*
>> *
>> *
>> * #include "petscmat.h" /* This enables us to use Matrices. It includes
>> the*
>> * petscvec header file*/*
>> *
>> *
>> * #include "petscksp.h" /* Now we can solve linear systems. Solvers used
>> are*
>> * KSP. */*
>> *
>> *
>> * extern PetscErrorCode MyKSPMonitor(KSP,PetscInt,PetscReal,void*);*
>> *
>> *
>> * int main(int argc, char **argv)*
>> *
>> *
>> * {*
>> *
>> *
>> * /* Declaration of Matrix A and some vectors x*/*
>> *
>> *
>> * Vec  w, ypcq, mean_tmp, x, PzyTvec;*
>> * Mat Ym, Y, Mean, Ypcq, YpcqT, Pzz, InnProd, Para, Pzy, PzyT,PzzT,K,
>> KT, PK, PzzTMP, Pmat, XYmat, KY;*
>> *
>> *
>> * FILE *fp, *fp1, *fp2, *fp3;*
>> *
>> *
>> * PetscInt index,i,j,k, ns=16, nw=100, tindex_f=120, col,tind, mz, nz,
>> its;*
>> */* *
>> *printf("Enter number of sensors (ns):\n");*
>> *scanf("%d",&ns);*
>> *
>> *
>> *printf("Enter number of time steps (tindex_f):\n");*
>> *scanf("%d",&tindex_f);*
>> **/*
>> * PetscMPIInt size;*
>> *
>> *
>> * PC pc;*
>> * KSP ksp;*
>> * PetscReal norm, tol=1.e-14;*
>> * PetscBool nonzeroguess = PETSC_FALSE;*
>> * PetscViewer mviewer;*
>> *
>> *
>> *
>> *
>> * PetscScalar scalar,rhsy[ns*tindex_f*nw],rhsym[ns*tindex_f], rhsw[nw],
>> Ymat[tindex_f*ns][nw], tmp, rhsp[2*nw], xvec[ns*tindex_f], pmat[4],
>> xymat[2], rnorm;*
>> *
>> *
>> * PetscErrorCode ierr;*
>> *
>> *
>> * /* This part is needed for the help flag supplied at run-time*/*
>> *
>> *
>> * ierr = PetscInitialize(&argc,&argv,(char*)0,help);CHKERRQ(ierr);*
>> * *
>> * ierr = MPI_Comm_size(PETSC_COMM_WORLD, &size);CHKERRQ(ierr);*
>> * //if (size != 1) SETERRQ(PETSC_COMM_WORLD,1,"This is a uniprocessor
>> example");*
>> *PetscPrintf(PETSC_COMM_WORLD,"size is: %D\n",size);*
>> *int nstindex_f=ns*tindex_f;*
>> *ierr =
>> PetscOptionsGetInt(PETSC_NULL,"-n",&nstindex_f,PETSC_NULL);CHKERRQ(ierr);
>> *
>> *
>> *
>> *.*
>> *.*
>> *.*
>> *
>> *
>> *
>> *
>> *// Solution for K:*
>> *// --------------*
>> *
>> *
>> *    ierr = MPI_Comm_size(PETSC_COMM_WORLD, &size);CHKERRQ(ierr);*
>> *    ierr =
>> PetscOptionsGetInt(PETSC_NULL,"-n",&nstindex_f,PETSC_NULL);CHKERRQ(ierr);
>> *
>> *    ierr =
>> PetscOptionsGetBool(PETSC_NULL,"-nonzero_guess",&nonzeroguess,PETSC_NULL);
>> CHKERRQ(ierr);*
>> *
>> *
>> *
>> *
>> *// KSPMonitorSet(ksp,MyKSPMonitor,PETSC_NULL,0);*
>> *
>> *
>> *
>> *
>> *    ierr = VecCreate(PETSC_COMM_WORLD,&x);CHKERRQ(ierr);*
>> *    ierr = PetscObjectSetName((PetscObject) x,
>> "Solution");CHKERRQ(ierr);*
>> *    ierr = VecSetSizes(x,PETSC_DECIDE,ns*tindex_f);CHKERRQ(ierr);*
>> *    ierr = VecSetFromOptions(x);CHKERRQ(ierr);*
>> *    ierr = KSPCreate(PETSC_COMM_WORLD,&ksp);CHKERRQ(ierr);*
>> *    *
>> *
>> *
>> *// ierr = KSPMonitorSet(ksp,PetscInt n,PetscReal rnorm, void *); *
>> *// ierr = monitor(ksp,Int it,PetscReal rnorm,);*
>> *    *
>> *
>> *
>> *    ierr = MatTranspose(Pzz,MAT_INITIAL_MATRIX,&PzzT);*
>> *    MatAssemblyBegin(PzzT,MAT_FINAL_ASSEMBLY);*
>> *    MatAssemblyEnd(PzzT,MAT_FINAL_ASSEMBLY);*
>> *    ierr =
>> KSPSetOperators(ksp,PzzT,PzzT,DIFFERENT_NONZERO_PATTERN);CHKERRQ(ierr);*
>> *
>> *
>> *    ierr = KSPGetPC(ksp,&pc);CHKERRQ(ierr);*
>> *    ierr = PCSetType(pc,PCASM);CHKERRQ(ierr);*
>> *    ierr =
>> KSPSetTolerances(ksp,1e-6,PETSC_DEFAULT,PETSC_DEFAULT,1e+9);CHKERRQ(ierr);
>> *
>> *    ierr = KSPSetFromOptions(ksp);CHKERRQ(ierr);*
>> *    if (nonzeroguess)*
>> *    {*
>> *         PetscScalar p = 0.5;*
>> *         ierr = VecSet(x,p);CHKERRQ(ierr);*
>> *         ierr = KSPSetInitialGuessNonzero(ksp,PETSC_TRUE);CHKERRQ(ierr);
>> *
>> *    }*
>> *    ierr = MatTranspose(Pzy,MAT_INITIAL_MATRIX,&PzyT);*
>> *    MatAssemblyBegin(PzyT,MAT_FINAL_ASSEMBLY);*
>> *    MatAssemblyEnd(PzyT,MAT_FINAL_ASSEMBLY);*
>> *    ierr = MatCreate(PETSC_COMM_WORLD,&KT);CHKERRQ(ierr);*
>> *    ierr =
>> MatSetSizes(KT,PETSC_DECIDE,PETSC_DECIDE,ns*tindex_f,2);CHKERRQ(ierr);*
>> *    ierr = MatSetFromOptions(KT);CHKERRQ(ierr);*
>> *    int ctr=0;*
>> *    for (ctr=0; ctr<2; ctr++)*
>> *    {*
>> *    ierr = VecCreate(PETSC_COMM_WORLD,&PzyTvec);*
>> *    ierr = VecSetSizes(PzyTvec,PETSC_DECIDE,ns*tindex_f);*
>> *    ierr = VecSetFromOptions(PzyTvec);*
>> *    ierr = MatGetColumnVector(PzyT,PzyTvec,ctr);*
>> *
>> *
>> *    ierr = KSPSolve(ksp,PzyTvec,x);CHKERRQ(ierr);*
>> *    ierr = KSPGetIterationNumber(ksp,&its);CHKERRQ(ierr);*
>> *       ierr = KSPGetResidualNorm(ksp,& norm);    *
>> *    printf("residual norm is=%e\n",norm);*
>> *      printf("iteration number is=%d\n",its);*
>> *    ierr = KSPView(ksp,PETSC_VIEWER_STDOUT_WORLD);CHKERRQ(ierr);*
>> *    *
>> *// printf("%d\n", ctr);*
>> *    for (i=0; i<ns*tindex_f; i++)*
>> *    {*
>> *    ierr = VecGetValues(x,1,&i,&xvec[i]);*
>> *    ierr = MatSetValues(KT,1,&i,1,&ctr,&xvec[i],INSERT_VALUES);*
>> *    }*
>> *    }*
>> *    MatAssemblyBegin(KT,MAT_FINAL_ASSEMBLY);*
>> *    MatAssemblyEnd(KT,MAT_FINAL_ASSEMBLY);*
>> *    MatTranspose(KT,MAT_INITIAL_MATRIX,&K);*
>> *    MatAssemblyBegin(K,MAT_FINAL_ASSEMBLY);*
>> *    MatAssemblyEnd(K,MAT_FINAL_ASSEMBLY);*
>> *
>> *
>> *    MatPtAP(Pzz,KT,MAT_INITIAL_MATRIX,1.0,&PK);*
>> *//MatCopy(Pzz,PzzTMP,SAME_NONZERO_PATTERN);*
>> *           ierr = MatAXPY(Pmat,-1,PK,DIFFERENT_NONZERO_PATTERN);*
>> *    MatView(Pmat,PETSC_VIEWER_STDOUT_WORLD);*
>> *
>> *
>> *           ierr = MatAXPY(Ym,-1,Mean,DIFFERENT_NONZERO_PATTERN);*
>> *    MatAssemblyBegin(Ym,MAT_FINAL_ASSEMBLY);*
>> *           MatAssemblyEnd(Ym,MAT_FINAL_ASSEMBLY);*
>> *
>> *
>> *    ierr = MatMatMult(K,Ym,MAT_INITIAL_MATRIX,PETSC_DEFAULT,&KY);*
>> *    ierr = MatAssemblyBegin(KY,MAT_FINAL_ASSEMBLY);*
>> *    ierr = MatAssemblyEnd(KY,MAT_FINAL_ASSEMBLY);*
>> *       ierr = MatAXPY(XYmat,1,KY,DIFFERENT_NONZERO_PATTERN);*
>> *    MatView(XYmat,PETSC_VIEWER_STDOUT_WORLD);*
>> *
>> *
>> *ierr = MatDestroy(&Mean);*
>> *
>> *
>> *ierr=PetscFinalize();CHKERRQ(ierr);*
>> *
>> *
>> * return 0;*
>> *
>> *
>> * }*
>> *
>> *
>>
>>
>> I am using the following commands to compile and run the code:
>>
>> *mpicc pcasm.c -o pcasm -l petsc*
>> *mpiexec -np 2 ./pcasm*
>>
>> But when I run the code I get the following error message which I don't
>> know what it means.
>>
>>
>> [0]PETSC ERROR: --------------------- Error Message
>> ------------------------------------
>> [0]PETSC ERROR: Floating point exception!
>> [0]PETSC ERROR: Infinite or not-a-number generated in norm!
>> [0]PETSC ERROR:
>> ------------------------------------------------------------------------
>> [0]PETSC ERROR: Petsc Release Version 3.2.0, Patch 3, Fri Sep 30 10:28:33
>> CDT 2011
>> [0]PETSC ERROR: See docs/changes/index.html for recent updates.
>> [0]PETSC ERROR: See docs/faq.html for hints about trouble shooting.
>> [0]PETSC ERROR: See docs/index.html for manual pages.
>> [0]PETSC ERROR:
>> ------------------------------------------------------------------------
>> [0]PETSC ERROR: ./pcasm on a linux-imp named k07n14.ccr.buffalo.edu by
>> rm93 Wed Dec 21 15:05:33 2011
>> [0]PETSC ERROR: Libraries linked from
>> /util/petsc/petsc-3.2-p3/linux-impi-mkl/lib
>> [0]PETSC ERROR: Configure run at Fri Oct 21 08:36:23 2011
>> [0]PETSC ERROR: Configure options --CC=/util/intel/impi/
>> 4.0.3.008/intel64/bin/mpiicc --FC=/util/intel/impi/
>> 4.0.3.008/intel64/bin/mpiifort --CXX=/util/intel/impi/
>> 4.0.3.008/intel64/bin/mpiicpc--with-blas-lapack-dir=/util/intel/composer_xe_2011_sp1/mkl/lib/intel64
>> --download-hypre=1 --with-debugging=0 -PETSC_ARCH=linux-impi-mkl
>> --with-shared-libraries=1
>> [0]PETSC ERROR:
>> ------------------------------------------------------------------------
>> [0]PETSC ERROR: VecNorm() line 167 in src/vec/vec/interface/rvector.c
>> [0]PETSC ERROR: VecNormalize() line 261 in src/vec/vec/interface/rvector.c
>> [0]PETSC ERROR: GMREScycle() line 128 in src/ksp/ksp/impls/gmres/gmres.c
>> [0]PETSC ERROR: KSPSolve_GMRES() line 231 in
>> src/ksp/ksp/impls/gmres/gmres.c
>> [0]PETSC ERROR: KSPSolve() line 423 in src/ksp/ksp/interface/itfunc.c
>> [0]PETSC ERROR: main() line 487 in "unknowndirectory/"pcasm.c
>> application called MPI_Abort(MPI_COMM_WORLD, 72) - process 0
>> rank 0 in job 2  k07n14.ccr.buffalo.edu_51735   caused collective abort
>> of all ranks
>>   exit status of rank 0: return code 72
>>
>>
>>
>>
>>
>>
>> Could anyone help me on this problem? Thanks in advance for any help.
>>
>>
>>
>>
>
>
> --
> What most experimenters take for granted before they begin their
> experiments is infinitely more interesting than any results to which their
> experiments lead.
> -- Norbert Wiener
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20111221/76eb0506/attachment.htm>


More information about the petsc-users mailing list