X-Git-Url: https://bilbo.iut-bm.univ-fcomte.fr/and/gitweb/GMRES2stage.git/blobdiff_plain/1ecb79e1234256ff879d1a787113c41fca16a7cc..7aaf6d0080258d3760f65e8ee41da81e373d091e:/code/ex49.c diff --git a/code/ex49.c b/code/ex49.c index b875dd3..b93b5c6 100644 --- a/code/ex49.c +++ b/code/ex49.c @@ -88,7 +88,7 @@ int KrylovMinimize(Mat A, Vec b, Vec x) { //Variables PetscScalar gamma, alpha, oldgamma, beta; - PetscReal norm=20, Eprecision=1e-8, cgprec=1e-40; + PetscReal norm=20, Eprecision=1e-6, cgprec=1e-40; PetscInt giter=0, ColS=8, col=0, Emaxiter=50000000, iter=0, iterations=15, Iiter=0; PetscErrorCode ierr; PetscScalar T1, T2; @@ -152,13 +152,14 @@ int KrylovMinimize(Mat A, Vec b, Vec x) { //Initializations // ierr = KSPGMRESSetRestart(ksp, 16); CHKERRQ(ierr); - ierr = KSPSetTolerances(ksp, 1e-13, 1e-13, PETSC_DEFAULT, 16); CHKERRQ(ierr); + ierr = KSPSetTolerances(ksp, 1e-13, 1e-13, PETSC_DEFAULT, 30); CHKERRQ(ierr); ierr = KSPSetInitialGuessNonzero(ksp, PETSC_TRUE); CHKERRQ(ierr); //GMRES WITH MINIMIZATION T1 = MPI_Wtime(); + ierr = KSPSetUp(ksp);CHKERRQ(ierr); while(giterEprecision ){ for(col=0; colEprecision; col++){ @@ -265,7 +266,7 @@ int KrylovMinimizeLSQR(Mat A, Vec b, Vec x) { //Variables PetscScalar alpha, beta; - PetscReal norm=20, Eprecision=1e-8, tol=1e-40; + PetscReal norm=20, Eprecision=1e-6, tol=1e-40; PetscInt giter=0, ColS=8, col=0, Emaxiter=50000000, iter=0, iterations=15, Iiter=0; PetscErrorCode ierr; PetscScalar T1, T2; @@ -342,7 +343,7 @@ int KrylovMinimizeLSQR(Mat A, Vec b, Vec x) { //Initializations // ierr = KSPGMRESSetRestart(ksp, 16); CHKERRQ(ierr); - ierr = KSPSetTolerances(ksp, 1e-13, 1e-13, PETSC_DEFAULT, 16); CHKERRQ(ierr); + ierr = KSPSetTolerances(ksp, 1e-13, 1e-13, PETSC_DEFAULT, 30); CHKERRQ(ierr); ierr = KSPSetInitialGuessNonzero(ksp, PETSC_TRUE); CHKERRQ(ierr); @@ -350,6 +351,7 @@ int KrylovMinimizeLSQR(Mat A, Vec b, Vec x) { //GMRES WITH MINIMIZATION T1 = MPI_Wtime(); + ierr = KSPSetUp(ksp);CHKERRQ(ierr); while(giterEprecision ){ for(col=0; colEprecision; col++){ @@ -1420,11 +1422,11 @@ static PetscErrorCode solve_elasticity_2d(PetscInt mx,PetscInt my) ierr = DMLocalToGlobalBegin(da_prop,l_properties,ADD_VALUES,properties);CHKERRQ(ierr); ierr = DMLocalToGlobalEnd(da_prop,l_properties,ADD_VALUES,properties);CHKERRQ(ierr); - ierr = PetscOptionsGetBool(NULL,"-no_view",&no_view,NULL);CHKERRQ(ierr); + /* ierr = PetscOptionsGetBool(NULL,"-no_view",&no_view,NULL);CHKERRQ(ierr); if (!no_view) { ierr = DMDAViewCoefficientsGnuplot2d(da_prop,properties,"Coeffcients for elasticity eqn.","properties");CHKERRQ(ierr); ierr = DMDACoordViewGnuplot2d(elas_da,"mesh");CHKERRQ(ierr); - } + }*/ /* Generate a matrix with the correct non-zero pattern of type AIJ. This will work in parallel and serial */ ierr = DMSetMatType(elas_da,MATAIJ);CHKERRQ(ierr); @@ -1445,9 +1447,9 @@ static PetscErrorCode solve_elasticity_2d(PetscInt mx,PetscInt my) ierr = KSPCreate(PETSC_COMM_WORLD,&ksp_E);CHKERRQ(ierr); - ierr = KSPSetOptionsPrefix(ksp_E,"elas_");CHKERRQ(ierr); /* elasticity */ + // ierr = KSPSetOptionsPrefix(ksp_E,"elas_");CHKERRQ(ierr); /* elasticity */ - ierr = PetscOptionsGetBool(NULL,"-use_nonsymbc",&use_nonsymbc,&flg);CHKERRQ(ierr); + //ierr = PetscOptionsGetBool(NULL,"-use_nonsymbc",&use_nonsymbc,&flg);CHKERRQ(ierr); /* solve */ if (!use_nonsymbc) { Mat AA; @@ -1461,12 +1463,23 @@ static PetscErrorCode solve_elasticity_2d(PetscInt mx,PetscInt my) ierr = KSPSetOperators(ksp_E,AA,AA);CHKERRQ(ierr); ierr = KSPSetFromOptions(ksp_E);CHKERRQ(ierr); - ierr = KSPSetFromOptions(ksp_E);CHKERRQ(ierr); PetscScalar T1,T2; - ierr = KSPSetTolerances(ksp_E, 1e-9, 1e-9, PETSC_DEFAULT, 50000000); CHKERRQ(ierr); - T1 = MPI_Wtime(); + ierr = KSPSetTolerances(ksp_E, 1e-7, 1e-7, PETSC_DEFAULT, 50000000); CHKERRQ(ierr); + + + PC pc; + KSPGetPC(ksp_E, &pc); + PCType type; + PCGetType(pc, &type); + + PetscPrintf(PETSC_COMM_WORLD, "PC TYPE %s \n", type); + KSPGetType(ksp_E,&type); + PetscPrintf(PETSC_COMM_WORLD, "SOLVER TYPE %s \n", type); + + T1 = MPI_Wtime(); + ierr = KSPSetUp(ksp_E);CHKERRQ(ierr); ierr = KSPSolve(ksp_E,ff,XX);CHKERRQ(ierr); T2 = MPI_Wtime(); @@ -1538,7 +1551,7 @@ static PetscErrorCode solve_elasticity_2d(PetscInt mx,PetscInt my) ierr = KSPSolve(ksp_E,f,X);CHKERRQ(ierr); } - if (!no_view) {ierr = DMDAViewGnuplot2d(elas_da,X,"Displacement solution for elasticity eqn.","X");CHKERRQ(ierr);} + // if (!no_view) {ierr = DMDAViewGnuplot2d(elas_da,X,"Displacement solution for elasticity eqn.","X");CHKERRQ(ierr);} ierr = KSPDestroy(&ksp_E);CHKERRQ(ierr); ierr = VecDestroy(&X);CHKERRQ(ierr); @@ -1566,6 +1579,12 @@ int main(int argc,char **args) ierr = PetscOptionsGetInt(NULL,"-mx",&mx,NULL);CHKERRQ(ierr); ierr = PetscOptionsGetInt(NULL,"-my",&my,NULL);CHKERRQ(ierr); + + PetscMPIInt size; + MPI_Comm_size(PETSC_COMM_WORLD,&size); + PetscPrintf(PETSC_COMM_WORLD,"Number of processors = %d\n",size); + + ierr = solve_elasticity_2d(mx,my);CHKERRQ(ierr); ierr = PetscFinalize();CHKERRQ(ierr);