PetscErrorCode PCDestroy_MG(PC pc) { PetscErrorCode ierr; PC_MG *mg = (PC_MG*)pc->data; PC_MG_Levels **mglevels = mg->levels; PetscInt i,n; PetscFunctionBegin; ierr = PCReset_MG(pc); CHKERRQ(ierr); if (mglevels) { n = mglevels[0]->levels; for (i=0; i<n; i++) { if (mglevels[i]->smoothd != mglevels[i]->smoothu) { ierr = KSPDestroy(&mglevels[i]->smoothd); CHKERRQ(ierr); } ierr = KSPDestroy(&mglevels[i]->smoothu); CHKERRQ(ierr); ierr = PetscFree(mglevels[i]); CHKERRQ(ierr); } ierr = PetscFree(mg->levels); CHKERRQ(ierr); } ierr = PetscFree(pc->data); CHKERRQ(ierr); PetscFunctionReturn(0); }
static PetscErrorCode KSPDestroy_SpecEst(KSP ksp) { PetscErrorCode ierr; KSP_SpecEst *spec = (KSP_SpecEst*)ksp->data; PetscFunctionBegin; ierr = KSPDestroy(&spec->kspest);CHKERRQ(ierr); ierr = KSPDestroy(&spec->kspcheap);CHKERRQ(ierr); ierr = PCDestroy(&spec->pcnone);CHKERRQ(ierr); ierr = PetscFree(ksp->data);CHKERRQ(ierr); PetscFunctionReturn(0); }
static PetscErrorCode PCReset_PCD_Feelpp(PC pc) { PC_PCD_Feelpp *pcpcd = (PC_PCD_Feelpp*)pc->data; KSPDestroy(&pcpcd->kspAp); KSPDestroy(&pcpcd->kspMp); MatDestroy(&pcpcd->matApLaplacian); MatDestroy(&pcpcd->matMp); MatDestroy(&pcpcd->matFp); MatDestroy(&pcpcd->matApBTBt); MatDestroy(&pcpcd->matMv); VecDestroy(&pcpcd->x1); VecDestroy(&pcpcd->x2); VecDestroy(&pcpcd->MvDiag); PetscFunctionReturn(0); }
static PetscErrorCode KSPChebyshevEstEigSet_Chebyshev(KSP ksp,PetscReal a,PetscReal b,PetscReal c,PetscReal d) { KSP_Chebyshev *cheb = (KSP_Chebyshev*)ksp->data; PetscErrorCode ierr; PetscFunctionBegin; if (a != 0.0 || b != 0.0 || c != 0.0 || d != 0.0) { if (!cheb->kspest) { /* should this block of code be moved to KSPSetUp_Chebyshev()? */ ierr = KSPCreate(PetscObjectComm((PetscObject)ksp),&cheb->kspest);CHKERRQ(ierr); ierr = PetscObjectIncrementTabLevel((PetscObject)cheb->kspest,(PetscObject)ksp,1);CHKERRQ(ierr); ierr = KSPSetOptionsPrefix(cheb->kspest,((PetscObject)ksp)->prefix);CHKERRQ(ierr); ierr = KSPAppendOptionsPrefix(cheb->kspest,"esteig_");CHKERRQ(ierr); ierr = KSPSetSkipPCSetFromOptions(cheb->kspest,PETSC_TRUE);CHKERRQ(ierr); ierr = KSPSetPC(cheb->kspest,ksp->pc);CHKERRQ(ierr); ierr = KSPSetComputeEigenvalues(cheb->kspest,PETSC_TRUE);CHKERRQ(ierr); /* We cannot turn off convergence testing because GMRES will break down if you attempt to keep iterating after a zero norm is obtained */ ierr = KSPSetTolerances(cheb->kspest,1.e-12,PETSC_DEFAULT,PETSC_DEFAULT,cheb->eststeps);CHKERRQ(ierr); } if (a >= 0) cheb->tform[0] = a; if (b >= 0) cheb->tform[1] = b; if (c >= 0) cheb->tform[2] = c; if (d >= 0) cheb->tform[3] = d; cheb->amatid = 0; cheb->pmatid = 0; cheb->amatstate = -1; cheb->pmatstate = -1; } else { ierr = KSPDestroy(&cheb->kspest);CHKERRQ(ierr); } PetscFunctionReturn(0); }
int main(int argc,char **argv) { PetscErrorCode ierr; KSP ksp; DM da,shell; PetscInt levels; PetscInitialize(&argc,&argv,(char*)0,help); ierr = KSPCreate(PETSC_COMM_WORLD,&ksp);CHKERRQ(ierr); ierr = DMDACreate1d(PETSC_COMM_WORLD,DM_BOUNDARY_NONE,-129,1,1,0,&da);CHKERRQ(ierr); ierr = MyDMShellCreate(PETSC_COMM_WORLD,da,&shell);CHKERRQ(ierr); /* these two lines are not needed but allow PCMG to automatically know how many multigrid levels the user wants */ ierr = DMGetRefineLevel(da,&levels);CHKERRQ(ierr); ierr = DMSetRefineLevel(shell,levels);CHKERRQ(ierr); ierr = KSPSetDM(ksp,shell);CHKERRQ(ierr); ierr = KSPSetComputeRHS(ksp,ComputeRHS,NULL);CHKERRQ(ierr); ierr = KSPSetComputeOperators(ksp,ComputeMatrix,NULL);CHKERRQ(ierr); ierr = KSPSetFromOptions(ksp);CHKERRQ(ierr); ierr = KSPSolve(ksp,NULL,NULL);CHKERRQ(ierr); ierr = KSPDestroy(&ksp);CHKERRQ(ierr); ierr = DMDestroy(&shell);CHKERRQ(ierr); ierr = DMDestroy(&da);CHKERRQ(ierr); ierr = PetscFinalize(); return 0; }
PetscErrorCode efs_destroy(efs *slv) { PetscErrorCode ierr; int i; ierr = ef_boundary_destroy(slv->boundary);CHKERRQ(ierr); ierr = ef_operator_destroy(slv->op);CHKERRQ(ierr); free(slv->op); ierr = ef_fd_destroy(slv->fd);CHKERRQ(ierr); free(slv->fd); ef_dmap_destroy(slv->dmap); free(slv->dmap); if (slv->options.galerkin) { ierr = ef_metric_destroy(slv->levels[0].metric);CHKERRQ(ierr); free(slv->levels[0].metric); } else { for (i = 0; i < slv->options.levels; i++) { ierr = ef_metric_destroy(slv->levels[i].metric);CHKERRQ(ierr); free(slv->levels[i].metric); } } free(slv->levels); free(slv->callback); ierr = DMDestroy(&slv->dm);CHKERRQ(ierr); ierr = KSPDestroy(&slv->ksp);CHKERRQ(ierr); return 0; }
int main(int argc, char **argv) { Mat A; KSP ksp; DM shell; Vec *left, *right; MPI_Comm c; PetscErrorCode ierr; ierr = PetscInitialize(&argc, &argv, NULL, NULL);if (ierr) return ierr; c = PETSC_COMM_WORLD; ierr = MatCreate(c, &A); CHKERRQ(ierr); ierr = MatSetSizes(A, 1, 1, PETSC_DECIDE, PETSC_DECIDE); CHKERRQ(ierr); ierr = MatSetFromOptions(A); CHKERRQ(ierr); ierr = MatSetUp(A); CHKERRQ(ierr); ierr = KSPCreate(c, &ksp); CHKERRQ(ierr); ierr = KSPSetOperators(ksp, A, A); CHKERRQ(ierr); ierr = KSPSetFromOptions(ksp); CHKERRQ(ierr); ierr = DMShellCreate(c, &shell); CHKERRQ(ierr); ierr = DMSetFromOptions(shell); CHKERRQ(ierr); ierr = DMSetUp(shell); CHKERRQ(ierr); ierr = KSPSetDM(ksp, shell); CHKERRQ(ierr); ierr = KSPCreateVecs(ksp, 1, &right, 1, &left); CHKERRQ(ierr); ierr = VecView(right[0], PETSC_VIEWER_STDOUT_(c));CHKERRQ(ierr); ierr = VecDestroyVecs(1,&right); CHKERRQ(ierr); ierr = VecDestroyVecs(1,&left); CHKERRQ(ierr); ierr = DMDestroy(&shell); CHKERRQ(ierr); ierr = KSPDestroy(&ksp); CHKERRQ(ierr); ierr = MatDestroy(&A); CHKERRQ(ierr); PetscFinalize(); return 0; }
int main(int argc,char **argv) { KSP ksp; DM da; UserContext user; PetscErrorCode ierr; ierr = PetscInitialize(&argc,&argv,(char*)0,help);if (ierr) return ierr; ierr = KSPCreate(PETSC_COMM_WORLD,&ksp);CHKERRQ(ierr); ierr = DMDACreate2d(PETSC_COMM_WORLD, DM_BOUNDARY_PERIODIC, DM_BOUNDARY_MIRROR,DMDA_STENCIL_STAR,11,11,PETSC_DECIDE,PETSC_DECIDE,1,1,NULL,NULL,&da);CHKERRQ(ierr); ierr = DMSetFromOptions(da);CHKERRQ(ierr); ierr = DMSetUp(da);CHKERRQ(ierr); ierr = KSPSetDM(ksp,(DM)da);CHKERRQ(ierr); ierr = DMSetApplicationContext(da,&user);CHKERRQ(ierr); user.uu = 1.0; user.tt = 1.0; ierr = KSPSetComputeRHS(ksp,ComputeRHS,&user);CHKERRQ(ierr); ierr = KSPSetComputeOperators(ksp,ComputeJacobian,&user);CHKERRQ(ierr); ierr = KSPSetFromOptions(ksp);CHKERRQ(ierr); ierr = KSPSolve(ksp,NULL,NULL);CHKERRQ(ierr); ierr = DMDestroy(&da);CHKERRQ(ierr); ierr = KSPDestroy(&ksp);CHKERRQ(ierr); ierr = PetscFinalize(); return ierr; }
/*@C DMMGDestroy - Destroys a DA based multigrid solver object. Collective on DMMG Input Parameter: . - the context Level: advanced .seealso DMMGCreate() @*/ PetscErrorCode PETSCSNES_DLLEXPORT DMMGDestroy(DMMG *dmmg) { PetscErrorCode ierr; PetscInt i,nlevels = dmmg[0]->nlevels; PetscFunctionBegin; if (!dmmg) SETERRQ(PETSC_ERR_ARG_NULL,"Passing null as DMMG"); for (i=1; i<nlevels; i++) { if (dmmg[i]->R) {ierr = MatDestroy(dmmg[i]->R);CHKERRQ(ierr);} } for (i=0; i<nlevels; i++) { ierr = PetscStrfree(dmmg[i]->prefix);CHKERRQ(ierr); ierr = PetscStrfree(dmmg[i]->mtype);CHKERRQ(ierr); if (dmmg[i]->dm) {ierr = DMDestroy(dmmg[i]->dm);CHKERRQ(ierr);} if (dmmg[i]->x) {ierr = VecDestroy(dmmg[i]->x);CHKERRQ(ierr);} if (dmmg[i]->b) {ierr = VecDestroy(dmmg[i]->b);CHKERRQ(ierr);} if (dmmg[i]->r) {ierr = VecDestroy(dmmg[i]->r);CHKERRQ(ierr);} if (dmmg[i]->work1) {ierr = VecDestroy(dmmg[i]->work1);CHKERRQ(ierr);} if (dmmg[i]->w) {ierr = VecDestroy(dmmg[i]->w);CHKERRQ(ierr);} if (dmmg[i]->work2) {ierr = VecDestroy(dmmg[i]->work2);CHKERRQ(ierr);} if (dmmg[i]->lwork1) {ierr = VecDestroy(dmmg[i]->lwork1);CHKERRQ(ierr);} if (dmmg[i]->B) {ierr = MatDestroy(dmmg[i]->B);CHKERRQ(ierr);} if (dmmg[i]->J) {ierr = MatDestroy(dmmg[i]->J);CHKERRQ(ierr);} if (dmmg[i]->Rscale) {ierr = VecDestroy(dmmg[i]->Rscale);CHKERRQ(ierr);} if (dmmg[i]->fdcoloring){ierr = MatFDColoringDestroy(dmmg[i]->fdcoloring);CHKERRQ(ierr);} if (dmmg[i]->ksp && !dmmg[i]->snes) {ierr = KSPDestroy(dmmg[i]->ksp);CHKERRQ(ierr);} if (dmmg[i]->snes) {ierr = PetscObjectDestroy((PetscObject)dmmg[i]->snes);CHKERRQ(ierr);} if (dmmg[i]->inject) {ierr = VecScatterDestroy(dmmg[i]->inject);CHKERRQ(ierr);} ierr = PetscFree(dmmg[i]);CHKERRQ(ierr); } ierr = PetscFree(dmmg);CHKERRQ(ierr); PetscFunctionReturn(0); }
int main(int argc,char **argv) { PetscErrorCode ierr; PetscInt i; KSP ksp; DM da; Vec x; PetscInitialize(&argc,&argv,(char*)0,help); ierr = KSPCreate(PETSC_COMM_WORLD,&ksp);CHKERRQ(ierr); ierr = DMDACreate1d(PETSC_COMM_WORLD,DMDA_BOUNDARY_PERIODIC,-3,2,1,0,&da);CHKERRQ(ierr); ierr = KSPSetDM(ksp,da);CHKERRQ(ierr); ierr = KSPSetComputeRHS(ksp,ComputeRHS,NULL);CHKERRQ(ierr); ierr = KSPSetComputeOperators(ksp,ComputeMatrix,NULL);CHKERRQ(ierr); ierr = KSPSetFromOptions(ksp);CHKERRQ(ierr); ierr = DMCreateGlobalVector(da,&x);CHKERRQ(ierr); ierr = ComputeInitialSolution(da,x);CHKERRQ(ierr); ierr = DMSetApplicationContext(da,x);CHKERRQ(ierr); ierr = KSPSetUp(ksp);CHKERRQ(ierr); ierr = VecView(x,PETSC_VIEWER_DRAW_WORLD);CHKERRQ(ierr); for (i=0; i<10; i++) { ierr = KSPSolve(ksp,NULL,x);CHKERRQ(ierr); ierr = VecView(x,PETSC_VIEWER_DRAW_WORLD);CHKERRQ(ierr); } ierr = VecDestroy(&x);CHKERRQ(ierr); ierr = KSPDestroy(&ksp);CHKERRQ(ierr); ierr = DMDestroy(&da);CHKERRQ(ierr); ierr = PetscFinalize(); return 0; }
PETSc::~PETSc() { if(x!=NULL) { VecDestroy(&x); x = NULL; } if(b!=NULL) { VecDestroy(&b); b = NULL; } if(A!=NULL) { MatDestroy(&A); A = NULL; } if(ksp!=NULL) { KSPDestroy(&ksp); ksp = NULL; } if(nullsp!=NULL) { MatNullSpaceDestroy(&nullsp); nullsp = NULL; } }
~DistributedCSR() { MatDestroy(&_petsc); for(int i = 0; i < _S.size(); ++i) MatDestroy(&_S[i]); KSPDestroy(&_ksp); if(_exchange) { _exchange[0]->clearBuffer(); delete _exchange[0]; if(_exchange[1]) { _exchange[1]->clearBuffer(); delete _exchange[1]; } delete [] _exchange; } if(_A) { if(!std::is_same<HpddmType, HpSchwarz<PetscScalar>>::value) VecScatterDestroy(&_scatter); else _A->clearBuffer(); delete _A; _A = nullptr; } delete [] _num; _num = nullptr; }
void IBImplicitModHelmholtzPETScLevelSolver::deallocateSolverState() { if (!d_is_initialized) return; IBAMR_TIMER_START(t_deallocate_solver_state); // Deallocate PETSc objects. int ierr; ierr = KSPDestroy(d_petsc_ksp); IBTK_CHKERRQ(ierr); ierr = MatDestroy(d_petsc_mat); IBTK_CHKERRQ(ierr); ierr = VecDestroy(d_petsc_x); IBTK_CHKERRQ(ierr); ierr = VecDestroy(d_petsc_b); IBTK_CHKERRQ(ierr); d_dof_index_fill.setNull(); d_petsc_ksp = PETSC_NULL; d_petsc_mat = PETSC_NULL; d_petsc_x = PETSC_NULL; d_petsc_b = PETSC_NULL; // Deallocate DOF index data. Pointer<PatchLevel<NDIM> > level = d_hierarchy->getPatchLevel(d_level_num); if (level->checkAllocated(d_dof_index_idx)) level->deallocatePatchData(d_dof_index_idx); // Indicate that the solver is NOT initialized. d_is_initialized = false; IBAMR_TIMER_STOP(t_deallocate_solver_state); return; }// deallocateSolverState
int main(int argc,char **argv) { KSP ksp; DM da; UserContext user; PetscInt bc; PetscErrorCode ierr; PetscInitialize(&argc,&argv,(char *)0,help); ierr = KSPCreate(PETSC_COMM_WORLD,&ksp);CHKERRQ(ierr); ierr = DMDACreate2d(PETSC_COMM_WORLD, DMDA_BOUNDARY_NONE, DMDA_BOUNDARY_NONE,DMDA_STENCIL_STAR,-11,-11,PETSC_DECIDE,PETSC_DECIDE,1,1,PETSC_NULL,PETSC_NULL,&da);CHKERRQ(ierr); ierr = KSPSetDM(ksp,(DM)da); ierr = DMSetApplicationContext(da,&user);CHKERRQ(ierr); user.uu = 1.0; user.tt = 1.0; bc = (PetscInt)NEUMANN; // Use Neumann Boundary Conditions user.bcType = (BCType)bc; ierr = KSPSetComputeRHS(ksp,ComputeRHS,&user);CHKERRQ(ierr); ierr = KSPSetComputeOperators(ksp,ComputeJacobian,&user);CHKERRQ(ierr); ierr = KSPSetFromOptions(ksp);CHKERRQ(ierr); ierr = KSPSolve(ksp,PETSC_NULL,PETSC_NULL);CHKERRQ(ierr); ierr = DMDestroy(&da);CHKERRQ(ierr); ierr = KSPDestroy(&ksp);CHKERRQ(ierr); ierr = PetscFinalize();CHKERRQ(ierr); return 0; }
int main(int argc,char **args) { KSP ksp; /* linear solver context */ Mat A; /* matrix */ Vec x,b; /* approx solution, RHS, exact solution */ PetscViewer fd; /* viewer */ PetscErrorCode ierr; PetscInitialize(&argc,&args,(char *)0,help); fd = PETSC_VIEWER_SOCKET_WORLD; ierr = VecCreate(PETSC_COMM_WORLD,&b);CHKERRQ(ierr); ierr = VecLoad(b,fd);CHKERRQ(ierr); ierr = MatCreate(PETSC_COMM_WORLD,&A);CHKERRQ(ierr); ierr = MatLoad(A,fd);CHKERRQ(ierr); ierr = VecDuplicate(b,&x);CHKERRQ(ierr); ierr = KSPCreate(PETSC_COMM_WORLD,&ksp);CHKERRQ(ierr); ierr = KSPSetOperators(ksp,A,A,SAME_NONZERO_PATTERN);CHKERRQ(ierr); ierr = KSPSetFromOptions(ksp);CHKERRQ(ierr); ierr = KSPSetUp(ksp);CHKERRQ(ierr); ierr = KSPSolve(ksp,b,x);CHKERRQ(ierr); ierr = VecView(x,fd);CHKERRQ(ierr); ierr = MatDestroy(&A);CHKERRQ(ierr); ierr = VecDestroy(&b);CHKERRQ(ierr); ierr = VecDestroy(&x);CHKERRQ(ierr); ierr = KSPDestroy(&ksp);CHKERRQ(ierr); ierr = PetscFinalize(); return 0; }
PetscErrorCode NavierStokesSolver::finalize() { PetscErrorCode ierr; // DMs if(pda != PETSC_NULL) {ierr = DMDestroy(&pda); CHKERRQ(ierr);} if(uda != PETSC_NULL) {ierr = DMDestroy(&uda); CHKERRQ(ierr);} if(vda != PETSC_NULL) {ierr = DMDestroy(&vda); CHKERRQ(ierr);} if(qPack != PETSC_NULL) {ierr = DMDestroy(&qPack); CHKERRQ(ierr);} if(lambdaPack != PETSC_NULL) {ierr = DMDestroy(&lambdaPack); CHKERRQ(ierr);} //Vecs if(q != PETSC_NULL) {ierr = VecDestroy(&q); CHKERRQ(ierr);} if(qStar != PETSC_NULL) {ierr = VecDestroy(&qStar); CHKERRQ(ierr);} if(qxLocal != PETSC_NULL) {ierr = VecDestroy(&qxLocal); CHKERRQ(ierr);} if(qyLocal != PETSC_NULL) {ierr = VecDestroy(&qyLocal); CHKERRQ(ierr);} if(H != PETSC_NULL) {ierr = VecDestroy(&H); CHKERRQ(ierr);} if(rn != PETSC_NULL) {ierr = VecDestroy(&rn); CHKERRQ(ierr);} if(bc1 != PETSC_NULL) {ierr = VecDestroy(&bc1); CHKERRQ(ierr);} if(rhs1 != PETSC_NULL) {ierr = VecDestroy(&rhs1); CHKERRQ(ierr);} if(temp != PETSC_NULL) {ierr = VecDestroy(&temp); CHKERRQ(ierr);} if(lambda != PETSC_NULL) {ierr = VecDestroy(&lambda); CHKERRQ(ierr);} if(bc2 != PETSC_NULL) {ierr = VecDestroy(&bc2); CHKERRQ(ierr);} if(rhs2 != PETSC_NULL) {ierr = VecDestroy(&rhs2); CHKERRQ(ierr);} if(uMapping != PETSC_NULL) {ierr = VecDestroy(&uMapping); CHKERRQ(ierr);} if(vMapping != PETSC_NULL) {ierr = VecDestroy(&vMapping); CHKERRQ(ierr);} if(pMapping != PETSC_NULL) {ierr = VecDestroy(&pMapping); CHKERRQ(ierr);} if(MHat != PETSC_NULL) {ierr = VecDestroy(&MHat); CHKERRQ(ierr);} if(RInv != PETSC_NULL) {ierr = VecDestroy(&RInv); CHKERRQ(ierr);} if(BN != PETSC_NULL) {ierr = VecDestroy(&BN); CHKERRQ(ierr);} //Mats if(A!=PETSC_NULL) {ierr = MatDestroy(&A); CHKERRQ(ierr);} if(QT != PETSC_NULL) {ierr = MatDestroy(&QT); CHKERRQ(ierr);} if(BNQ != PETSC_NULL) {ierr = MatDestroy(&BNQ); CHKERRQ(ierr);} if(QTBNQ != PETSC_NULL) {ierr = MatDestroy(&QTBNQ); CHKERRQ(ierr);} //KSPs if(ksp1 != PETSC_NULL) {ierr = KSPDestroy(&ksp1); CHKERRQ(ierr);} if(ksp2 != PETSC_NULL) {ierr = KSPDestroy(&ksp2); CHKERRQ(ierr);} return 0; }
int main(int argc,char **argv) { KSP ksp; DM da; UserContext user; const char *bcTypes[2] = {"dirichlet","neumann"}; PetscErrorCode ierr; PetscInt bc; Vec b,x; PetscInitialize(&argc,&argv,(char *)0,help); ierr = KSPCreate(PETSC_COMM_WORLD,&ksp); CHKERRQ(ierr); ierr = DMDACreate2d(PETSC_COMM_WORLD, DMDA_BOUNDARY_NONE, DMDA_BOUNDARY_NONE,DMDA_STENCIL_STAR,-3,-3,PETSC_DECIDE,PETSC_DECIDE,1,1,0,0,&da); CHKERRQ(ierr); ierr = DMDASetUniformCoordinates(da,0,1,0,1,0,0); CHKERRQ(ierr); ierr = DMDASetFieldName(da,0,"Pressure"); CHKERRQ(ierr); ierr = PetscOptionsBegin(PETSC_COMM_WORLD, "", "Options for the inhomogeneous Poisson equation", "DMqq"); user.rho = 1.0; ierr = PetscOptionsReal("-rho", "The conductivity", "ex29.c", user.rho, &user.rho, PETSC_NULL); CHKERRQ(ierr); user.nu = 0.1; ierr = PetscOptionsReal("-nu", "The width of the Gaussian source", "ex29.c", user.nu, &user.nu, PETSC_NULL); CHKERRQ(ierr); bc = (PetscInt)DIRICHLET; ierr = PetscOptionsEList("-bc_type","Type of boundary condition","ex29.c",bcTypes,2,bcTypes[0],&bc,PETSC_NULL); CHKERRQ(ierr); user.bcType = (BCType)bc; ierr = PetscOptionsEnd(); ierr = KSPSetComputeRHS(ksp,ComputeRHS,&user); CHKERRQ(ierr); ierr = KSPSetComputeOperators(ksp,ComputeMatrix,&user); CHKERRQ(ierr); ierr = KSPSetDM(ksp,da); CHKERRQ(ierr); ierr = KSPSetFromOptions(ksp); CHKERRQ(ierr); ierr = KSPSetUp(ksp); CHKERRQ(ierr); ierr = KSPSolve(ksp,PETSC_NULL,PETSC_NULL); CHKERRQ(ierr); ierr = KSPGetSolution(ksp,&x); CHKERRQ(ierr); ierr = KSPGetRhs(ksp,&b); CHKERRQ(ierr); ierr = DMDestroy(&da); CHKERRQ(ierr); ierr = KSPDestroy(&ksp); CHKERRQ(ierr); ierr = PetscFinalize(); return 0; }
Field_solver::~Field_solver() { PetscErrorCode ierr; ierr = VecDestroy( &phi_vec ); CHKERRXX( ierr ); ierr = VecDestroy( &rhs ); CHKERRXX( ierr ); ierr = MatDestroy( &A ); CHKERRXX( ierr ); ierr = KSPDestroy( &ksp ); CHKERRXX( ierr ); }
int main(int argc,char **argv) { PetscErrorCode ierr; KSP ksp; PetscReal norm; DM da; Vec x,b,r; Mat A; PetscInitialize(&argc,&argv,(char *)0,help); ierr = KSPCreate(PETSC_COMM_WORLD,&ksp); CHKERRQ(ierr); ierr = DMDACreate3d(PETSC_COMM_WORLD,DMDA_BOUNDARY_NONE,DMDA_BOUNDARY_NONE,DMDA_BOUNDARY_NONE,DMDA_STENCIL_STAR,-7,-7,-7,PETSC_DECIDE,PETSC_DECIDE,PETSC_DECIDE,1,1,0,0,0,&da); CHKERRQ(ierr); ierr = DMSetInitialGuess(da,ComputeInitialGuess); CHKERRQ(ierr); ierr = KSPSetComputeRHS(ksp,ComputeRHS,PETSC_NULL); CHKERRQ(ierr); ierr = KSPSetComputeOperators(ksp,ComputeMatrix,PETSC_NULL); CHKERRQ(ierr); ierr = KSPSetDM(ksp,da); CHKERRQ(ierr); ierr = DMDestroy(&da); CHKERRQ(ierr); ierr = KSPSetFromOptions(ksp); CHKERRQ(ierr); ierr = KSPSolve(ksp,PETSC_NULL,PETSC_NULL); CHKERRQ(ierr); ierr = KSPGetSolution(ksp,&x); CHKERRQ(ierr); ierr = KSPGetRhs(ksp,&b); CHKERRQ(ierr); ierr = VecDuplicate(b,&r); CHKERRQ(ierr); ierr = KSPGetOperators(ksp,&A,PETSC_NULL,PETSC_NULL); CHKERRQ(ierr); ierr = MatMult(A,x,r); CHKERRQ(ierr); ierr = VecAXPY(r,-1.0,b); CHKERRQ(ierr); ierr = VecNorm(r,NORM_2,&norm); CHKERRQ(ierr); ierr = PetscPrintf(PETSC_COMM_WORLD,"Residual norm %G\n",norm); CHKERRQ(ierr); ierr = VecDestroy(&r); CHKERRQ(ierr); ierr = KSPDestroy(&ksp); CHKERRQ(ierr); ierr = PetscFinalize(); return 0; }
long finalize() { ierr = VecDestroy(x);CHKERRQ(ierr); // ierr = VecDestroy(u);CHKERRQ(ierr); ierr = VecDestroy(b);CHKERRQ(ierr); ierr = MatDestroy(A);CHKERRQ(ierr); ierr = KSPDestroy(ksp);CHKERRQ(ierr); ierr = PetscFinalize();CHKERRQ(ierr); return 0; }
/* Default destroy, if it has never been setup */ static PetscErrorCode PCReset_KSP(PC pc) { PC_KSP *jac = (PC_KSP*)pc->data; PetscErrorCode ierr; PetscFunctionBegin; ierr = KSPDestroy(&jac->ksp);CHKERRQ(ierr); PetscFunctionReturn(0); }
PetscErrorCode RunTest(void) { PetscInt N = 100; PetscBool draw = PETSC_FALSE; PetscReal rnorm; Mat A; Vec b,x,r; KSP ksp; PC pc; PetscErrorCode ierr; PetscFunctionBegin; ierr = PetscOptionsGetInt(0,"-N",&N,NULL);CHKERRQ(ierr); ierr = PetscOptionsGetBool(0,"-draw",&draw,NULL);CHKERRQ(ierr); ierr = MatCreate(PETSC_COMM_WORLD,&A);CHKERRQ(ierr); ierr = MatSetSizes(A,PETSC_DECIDE,PETSC_DECIDE,N,N);CHKERRQ(ierr); ierr = MatSetType(A,MATPYTHON);CHKERRQ(ierr); ierr = MatPythonSetType(A,"example1.py:Laplace1D");CHKERRQ(ierr); ierr = MatSetUp(A);CHKERRQ(ierr); ierr = MatGetVecs(A,&x,&b);CHKERRQ(ierr); ierr = VecSet(b,1);CHKERRQ(ierr); ierr = KSPCreate(PETSC_COMM_WORLD,&ksp);CHKERRQ(ierr); ierr = KSPSetType(ksp,KSPPYTHON);CHKERRQ(ierr); ierr = KSPPythonSetType(ksp,"example1.py:ConjGrad");CHKERRQ(ierr); ierr = KSPGetPC(ksp,&pc);CHKERRQ(ierr); ierr = PCSetType(pc,PCPYTHON);CHKERRQ(ierr); ierr = PCPythonSetType(pc,"example1.py:Jacobi");CHKERRQ(ierr); ierr = KSPSetOperators(ksp,A,A);CHKERRQ(ierr); ierr = KSPSetFromOptions(ksp);CHKERRQ(ierr); ierr = KSPSolve(ksp,b,x);CHKERRQ(ierr); ierr = VecDuplicate(b,&r);CHKERRQ(ierr); ierr = MatMult(A,x,r);CHKERRQ(ierr); ierr = VecAYPX(r,-1,b);CHKERRQ(ierr); ierr = VecNorm(r,NORM_2,&rnorm);CHKERRQ(ierr); ierr = PetscPrintf(PETSC_COMM_WORLD,"error norm = %g\n",rnorm);CHKERRQ(ierr); if (draw) { ierr = VecView(x,PETSC_VIEWER_DRAW_WORLD);CHKERRQ(ierr); ierr = PetscSleep(2);CHKERRQ(ierr); } ierr = VecDestroy(&x);CHKERRQ(ierr); ierr = VecDestroy(&b);CHKERRQ(ierr); ierr = VecDestroy(&r);CHKERRQ(ierr); ierr = MatDestroy(&A);CHKERRQ(ierr); ierr = KSPDestroy(&ksp);CHKERRQ(ierr); PetscFunctionReturn(0); }
PetscErrorCode PressurePoisson( UserContext *uc ) { Mat A; Vec b, px, py, p, u, v, ss, c; KSP ksp; PetscErrorCode ierr; PetscFunctionBegin; PetscLogEventBegin(EVENT_PressurePoisson,0,0,0,0); PetscLogEventRegister(&EVENT_PressurePoisson,"PressurePoisson", 0); /* Assemble and Solve for pressure */ ierr = PetscPrintf(PETSC_COMM_WORLD, "***********************\nPRESSURE\n"); CHKERRQ(ierr); ierr = AssemblePressureMatrx( uc ); CHKERRQ(ierr); ierr = AssemblePressureRHS( uc ); CHKERRQ(ierr); ierr = SolvePressure( uc ); CHKERRQ(ierr); ierr = WriteResult( uc, uc->p, "p_pressure" ); CHKERRQ(ierr); /* Assemble and Solve for Velocity */ ierr = PetscPrintf(PETSC_COMM_WORLD, "***********************\nVELOCITY\n"); CHKERRQ(ierr); ierr = AssembleVelocityRHS( uc ); CHKERRQ(ierr); ierr = AssembleVelocityMatrix( uc ); CHKERRQ(ierr); ierr = KSPSetOperators(uc->ksp,uc->A, uc->A, SAME_PRECONDITIONER); CHKERRQ(ierr); ierr = KSPSolve(uc->ksp,uc->px,uc->u);CHKERRQ(ierr); ierr = KSPSolve(uc->ksp,uc->py,uc->v);CHKERRQ(ierr); ierr = WriteResult( uc, uc->u, "u_velocity" ); CHKERRQ(ierr); ierr = WriteResult( uc, uc->v, "v_velocity" ); CHKERRQ(ierr); ierr = ComputeShearStress(uc); CHKERRQ(ierr); ierr = WriteResult( uc, uc->ss,"shear_stress" ); CHKERRQ(ierr); ierr = ConservationTest(uc); CHKERRQ(ierr); /* Output indexing */ PetscReal *idx; VecGetArray(uc->b,&idx); for( int i = 0; i < uc->numNodes; i++) idx[i] = i; VecRestoreArray(uc->b,&idx); WriteResult(uc, uc->b, "indexes"); VecSet(uc->b, 0.); ierr = VecDestroy(uc->c); CHKERRQ(ierr); ierr = VecDestroy(uc->ss); CHKERRQ(ierr); ierr = MatDestroy(uc->A); CHKERRQ(ierr); ierr = KSPDestroy(uc->ksp); CHKERRQ(ierr); ierr = VecDestroy(uc->b); CHKERRQ(ierr); ierr = VecDestroy(uc->p); CHKERRQ(ierr); ierr = VecDestroy(uc->px); CHKERRQ(ierr); ierr = VecDestroy(uc->py); CHKERRQ(ierr); ierr = VecDestroy(uc->u); CHKERRQ(ierr); ierr = VecDestroy(uc->v); CHKERRQ(ierr); PetscLogEventEnd(EVENT_PressurePoisson,0,0,0,0); PetscFunctionReturn(0); }
static PetscErrorCode PCDestroy_KSP(PC pc) { PC_KSP *jac = (PC_KSP*)pc->data; PetscErrorCode ierr; PetscFunctionBegin; if (jac->ksp) {ierr = KSPDestroy(jac->ksp);CHKERRQ(ierr);} ierr = PetscFree(jac);CHKERRQ(ierr); PetscFunctionReturn(0); }
/* PCISDestroy - */ PetscErrorCode PCISDestroy(PC pc) { PC_IS *pcis = (PC_IS*)(pc->data); PetscErrorCode ierr; PetscFunctionBegin; ierr = ISDestroy(&pcis->is_B_local);CHKERRQ(ierr); ierr = ISDestroy(&pcis->is_I_local);CHKERRQ(ierr); ierr = ISDestroy(&pcis->is_B_global);CHKERRQ(ierr); ierr = ISDestroy(&pcis->is_I_global);CHKERRQ(ierr); ierr = MatDestroy(&pcis->A_II);CHKERRQ(ierr); ierr = MatDestroy(&pcis->A_IB);CHKERRQ(ierr); ierr = MatDestroy(&pcis->A_BI);CHKERRQ(ierr); ierr = MatDestroy(&pcis->A_BB);CHKERRQ(ierr); ierr = VecDestroy(&pcis->D);CHKERRQ(ierr); ierr = KSPDestroy(&pcis->ksp_N);CHKERRQ(ierr); ierr = KSPDestroy(&pcis->ksp_D);CHKERRQ(ierr); ierr = VecDestroy(&pcis->vec1_N);CHKERRQ(ierr); ierr = VecDestroy(&pcis->vec2_N);CHKERRQ(ierr); ierr = VecDestroy(&pcis->vec1_D);CHKERRQ(ierr); ierr = VecDestroy(&pcis->vec2_D);CHKERRQ(ierr); ierr = VecDestroy(&pcis->vec3_D);CHKERRQ(ierr); ierr = VecDestroy(&pcis->vec4_D);CHKERRQ(ierr); ierr = VecDestroy(&pcis->vec1_B);CHKERRQ(ierr); ierr = VecDestroy(&pcis->vec2_B);CHKERRQ(ierr); ierr = VecDestroy(&pcis->vec3_B);CHKERRQ(ierr); ierr = VecDestroy(&pcis->vec1_global);CHKERRQ(ierr); ierr = VecScatterDestroy(&pcis->global_to_D);CHKERRQ(ierr); ierr = VecScatterDestroy(&pcis->N_to_B);CHKERRQ(ierr); ierr = VecScatterDestroy(&pcis->N_to_D);CHKERRQ(ierr); ierr = VecScatterDestroy(&pcis->global_to_B);CHKERRQ(ierr); ierr = PetscFree(pcis->work_N);CHKERRQ(ierr); if (pcis->n_neigh > -1) { ierr = ISLocalToGlobalMappingRestoreInfo(pcis->mapping,&(pcis->n_neigh),&(pcis->neigh),&(pcis->n_shared),&(pcis->shared));CHKERRQ(ierr); } ierr = ISLocalToGlobalMappingDestroy(&pcis->mapping);CHKERRQ(ierr); ierr = ISLocalToGlobalMappingDestroy(&pcis->BtoNmap);CHKERRQ(ierr); ierr = PetscObjectComposeFunction((PetscObject)pc,"PCISSetUseStiffnessScaling_C",NULL);CHKERRQ(ierr); ierr = PetscObjectComposeFunction((PetscObject)pc,"PCISSetSubdomainScalingFactor_C",NULL);CHKERRQ(ierr); ierr = PetscObjectComposeFunction((PetscObject)pc,"PCISSetSubdomainDiagonalScaling_C",NULL);CHKERRQ(ierr); PetscFunctionReturn(0); }
VentilationProblem::~VentilationProblem() { /* Remove the PETSc context used in the iterative solver */ if (mTerminalInteractionMatrix) { PetscTools::Destroy(mTerminalInteractionMatrix); PetscTools::Destroy(mTerminalFluxChangeVector); PetscTools::Destroy(mTerminalPressureChangeVector); KSPDestroy(PETSC_DESTROY_PARAM(mTerminalKspSolver)); } }
static PetscErrorCode PCKSPSetKSP_KSP(PC pc,KSP ksp) { PC_KSP *jac = (PC_KSP*)pc->data; PetscErrorCode ierr; PetscFunctionBegin; ierr = PetscObjectReference((PetscObject)ksp);CHKERRQ(ierr); ierr = KSPDestroy(&jac->ksp);CHKERRQ(ierr); jac->ksp = ksp; PetscFunctionReturn(0); }
static PetscErrorCode PCDestroy_KSP(PC pc) { PC_KSP *jac = (PC_KSP*)pc->data; PetscErrorCode ierr; PetscFunctionBegin; ierr = KSPDestroy(&jac->ksp);CHKERRQ(ierr); ierr = PetscObjectComposeFunction((PetscObject)pc,"PCKSPGetKSP_C",NULL);CHKERRQ(ierr); ierr = PetscObjectComposeFunction((PetscObject)pc,"PCKSPSetKSP_C",NULL);CHKERRQ(ierr); ierr = PetscFree(pc->data);CHKERRQ(ierr); PetscFunctionReturn(0); }
static PetscErrorCode PCDestroy_Redundant(PC pc) { PC_Redundant *red = (PC_Redundant*)pc->data; PetscErrorCode ierr; PetscFunctionBegin; ierr = PCReset_Redundant(pc);CHKERRQ(ierr); ierr = KSPDestroy(&red->ksp);CHKERRQ(ierr); ierr = PetscSubcommDestroy(&red->psubcomm);CHKERRQ(ierr); ierr = PetscFree(pc->data);CHKERRQ(ierr); PetscFunctionReturn(0); }
int TaoLinearSolverPetsc::SetKSP(KSP ksp2){ int info; PetscFunctionBegin; if (ksp2){ PetscValidHeaderSpecific(ksp2,KSP_COOKIE,1); PetscObjectReference((PetscObject)ksp2); } if (ksp){ info=KSPDestroy(ksp); CHKERRQ(info); } ksp=ksp2; PetscFunctionReturn(0); }