static PetscErrorCode KSPDestroy_PIPEFCG(KSP ksp) { PetscErrorCode ierr; PetscInt i; KSP_PIPEFCG *pipefcg; PetscFunctionBegin; pipefcg = (KSP_PIPEFCG*)ksp->data; /* Destroy "standard" work vecs */ VecDestroyVecs(ksp->nwork,&ksp->work); /* Destroy vectors of old directions and the arrays that manage pointers to them */ if(pipefcg->nvecs){ for(i=0;i<pipefcg->nchunks;++i){ ierr = VecDestroyVecs(pipefcg->chunksizes[i],&pipefcg->pPvecs[i]);CHKERRQ(ierr); ierr = VecDestroyVecs(pipefcg->chunksizes[i],&pipefcg->pSvecs[i]);CHKERRQ(ierr); ierr = VecDestroyVecs(pipefcg->chunksizes[i],&pipefcg->pQvecs[i]);CHKERRQ(ierr); ierr = VecDestroyVecs(pipefcg->chunksizes[i],&pipefcg->pZETAvecs[i]);CHKERRQ(ierr); } } ierr = PetscFree4(pipefcg->Pvecs,pipefcg->Svecs,pipefcg->pPvecs,pipefcg->pSvecs);CHKERRQ(ierr); ierr = PetscFree4(pipefcg->Qvecs,pipefcg->ZETAvecs,pipefcg->pQvecs,pipefcg->pZETAvecs);CHKERRQ(ierr); ierr = PetscFree4(pipefcg->Pold,pipefcg->Sold,pipefcg->Qold,pipefcg->ZETAold);CHKERRQ(ierr); ierr = PetscFree(pipefcg->chunksizes);CHKERRQ(ierr); ierr = PetscFree3(pipefcg->dots,pipefcg->etas,pipefcg->redux);CHKERRQ(ierr); ierr = KSPDestroyDefault(ksp);CHKERRQ(ierr); PetscFunctionReturn(0); }
PetscErrorCode KSPDestroy_FCG(KSP ksp) { PetscErrorCode ierr; PetscInt i; KSP_FCG *fcg = (KSP_FCG*)ksp->data; PetscFunctionBegin; /* Destroy "standard" work vecs */ VecDestroyVecs(ksp->nwork,&ksp->work); /* Destroy P and C vectors and the arrays that manage pointers to them */ if (fcg->nvecs){ for (i=0;i<fcg->nchunks;++i){ ierr = VecDestroyVecs(fcg->chunksizes[i],&fcg->pPvecs[i]);CHKERRQ(ierr); ierr = VecDestroyVecs(fcg->chunksizes[i],&fcg->pCvecs[i]);CHKERRQ(ierr); } } ierr = PetscFree5(fcg->Pvecs,fcg->Cvecs,fcg->pPvecs,fcg->pCvecs,fcg->chunksizes);CHKERRQ(ierr); /* free space used for singular value calculations */ if (ksp->calc_sings) { ierr = PetscFree4(fcg->e,fcg->d,fcg->ee,fcg->dd);CHKERRQ(ierr); } ierr = KSPDestroyDefault(ksp);CHKERRQ(ierr); PetscFunctionReturn(0); }
static PetscErrorCode KSPDestroy_GCR(KSP ksp) { PetscErrorCode ierr; PetscFunctionBegin; ierr = KSPReset_GCR(ksp);CHKERRQ(ierr); ierr = KSPDestroyDefault(ksp);CHKERRQ(ierr); PetscFunctionReturn(0); }
PetscErrorCode KSPDestroy_Richardson(KSP ksp) { PetscErrorCode ierr; PetscFunctionBegin; ierr = PetscObjectComposeFunction((PetscObject)ksp,"KSPRichardsonSetScale_C",NULL);CHKERRQ(ierr); ierr = KSPDestroyDefault(ksp);CHKERRQ(ierr); PetscFunctionReturn(0); }
PetscErrorCode KSPDestroy_QCG(KSP ksp) { PetscErrorCode ierr; PetscFunctionBegin; ierr = PetscObjectComposeFunction((PetscObject)ksp,"KSPQCGGetQuadratic_C",NULL);CHKERRQ(ierr); ierr = PetscObjectComposeFunction((PetscObject)ksp,"KSPQCGGetTrialStepNorm_C",NULL);CHKERRQ(ierr); ierr = PetscObjectComposeFunction((PetscObject)ksp,"KSPQCGSetTrustRegionRadius_C",NULL);CHKERRQ(ierr); ierr = KSPDestroyDefault(ksp);CHKERRQ(ierr); PetscFunctionReturn(0); }
PetscErrorCode KSPDestroy_CG(KSP ksp) { KSP_CG *cg = (KSP_CG*)ksp->data; PetscErrorCode ierr; PetscFunctionBegin; /* free space used for singular value calculations */ if (ksp->calc_sings) { ierr = PetscFree4(cg->e,cg->d,cg->ee,cg->dd);CHKERRQ(ierr); } ierr = KSPDestroyDefault(ksp);CHKERRQ(ierr); ierr = PetscObjectComposeFunction((PetscObject)ksp,"KSPCGSetType_C",NULL);CHKERRQ(ierr); ierr = PetscObjectComposeFunction((PetscObject)ksp,"KSPCGUseSingleReduction_C",NULL);CHKERRQ(ierr); PetscFunctionReturn(0); }
static PetscErrorCode KSPDestroy_Chebyshev(KSP ksp) { KSP_Chebyshev *cheb = (KSP_Chebyshev*)ksp->data; PetscErrorCode ierr; PetscFunctionBegin; ierr = KSPDestroy(&cheb->kspest);CHKERRQ(ierr); ierr = PetscRandomDestroy(&cheb->random);CHKERRQ(ierr); ierr = PetscObjectComposeFunction((PetscObject)ksp,"KSPChebyshevSetEigenvalues_C",NULL);CHKERRQ(ierr); ierr = PetscObjectComposeFunction((PetscObject)ksp,"KSPChebyshevEstEigSet_C",NULL);CHKERRQ(ierr); ierr = PetscObjectComposeFunction((PetscObject)ksp,"KSPChebyshevEstEigSetRandom_C",NULL);CHKERRQ(ierr); ierr = PetscObjectComposeFunction((PetscObject)ksp,"KSPChebyshevEstEigGetKSP_C",NULL);CHKERRQ(ierr); ierr = KSPDestroyDefault(ksp);CHKERRQ(ierr); PetscFunctionReturn(0); }
PetscErrorCode KSPDestroy_STCG(KSP ksp) { PetscErrorCode ierr; /***************************************************************************/ /* Clear composed functions */ /***************************************************************************/ PetscFunctionBegin; ierr = PetscObjectComposeFunction((PetscObject)ksp,"KSPSTCGSetRadius_C",NULL);CHKERRQ(ierr); ierr = PetscObjectComposeFunction((PetscObject)ksp,"KSPSTCGGetNormD_C",NULL);CHKERRQ(ierr); ierr = PetscObjectComposeFunction((PetscObject)ksp,"KSPSTCGGetObjFcn_C",NULL);CHKERRQ(ierr); /***************************************************************************/ /* Destroy KSP object. */ /***************************************************************************/ ierr = KSPDestroyDefault(ksp);CHKERRQ(ierr); PetscFunctionReturn(0); }