static PetscErrorCode VecSetFromOptions_MPI(PetscOptionItems *PetscOptionsObject,Vec X) { PetscErrorCode ierr; PetscBool flg = PETSC_FALSE,set; PetscFunctionBegin; ierr = PetscOptionsHead(PetscOptionsObject,"VecMPI Options");CHKERRQ(ierr); ierr = PetscOptionsBool("-vec_assembly_bts","Use BuildTwoSided version of assembly","",flg,&flg,&set);CHKERRQ(ierr); if (set) { X->ops->assemblybegin = flg ? VecAssemblyBegin_MPI_BTS : VecAssemblyBegin_MPI; X->ops->assemblyend = flg ? VecAssemblyEnd_MPI_BTS : VecAssemblyEnd_MPI; } ierr = PetscOptionsTail();CHKERRQ(ierr); PetscFunctionReturn(0); }
static PetscErrorCode SNESSetFromOptions_LS(SNES snes) { PetscErrorCode ierr; SNESLineSearch linesearch; PetscFunctionBegin; ierr = PetscOptionsHead("SNESLS options");CHKERRQ(ierr); ierr = PetscOptionsTail();CHKERRQ(ierr); /* set the default line search type */ if (!snes->linesearch) { ierr = SNESGetSNESLineSearch(snes, &linesearch);CHKERRQ(ierr); ierr = SNESLineSearchSetType(linesearch, SNESLINESEARCHBT);CHKERRQ(ierr); } PetscFunctionReturn(0); }
PetscErrorCode KSPSetFromOptions_CG(PetscOptions *PetscOptionsObject,KSP ksp) { PetscErrorCode ierr; KSP_CG *cg = (KSP_CG*)ksp->data; PetscFunctionBegin; ierr = PetscOptionsHead(PetscOptionsObject,"KSP CG and CGNE options");CHKERRQ(ierr); #if defined(PETSC_USE_COMPLEX) ierr = PetscOptionsEnum("-ksp_cg_type","Matrix is Hermitian or complex symmetric","KSPCGSetType",KSPCGTypes,(PetscEnum)cg->type, (PetscEnum*)&cg->type,NULL);CHKERRQ(ierr); #endif ierr = PetscOptionsBool("-ksp_cg_single_reduction","Merge inner products into single MPI_Allreduce()","KSPCGUseSingleReduction",cg->singlereduction,&cg->singlereduction,NULL);CHKERRQ(ierr); ierr = PetscOptionsTail();CHKERRQ(ierr); PetscFunctionReturn(0); }
static PetscErrorCode SNESLineSearchSetFromOptions_BT(SNESLineSearch linesearch) { PetscErrorCode ierr; SNESLineSearch_BT *bt; PetscFunctionBegin; bt = (SNESLineSearch_BT*)linesearch->data; ierr = PetscOptionsHead("SNESLineSearch BT options");CHKERRQ(ierr); ierr = PetscOptionsReal("-snes_linesearch_alpha", "Descent tolerance", "SNESLineSearchBT", bt->alpha, &bt->alpha, NULL);CHKERRQ(ierr); ierr = PetscOptionsTail();CHKERRQ(ierr); PetscFunctionReturn(0); }
PetscErrorCode SVDSetFromOptions_TRLanczos(SVD svd) { PetscErrorCode ierr; PetscBool set,val; SVD_TRLANCZOS *lanczos = (SVD_TRLANCZOS*)svd->data; PetscFunctionBegin; ierr = PetscOptionsHead("SVD TRLanczos Options");CHKERRQ(ierr); ierr = PetscOptionsBool("-svd_trlanczos_oneside","Lanczos one-side reorthogonalization","SVDTRLanczosSetOneSide",lanczos->oneside,&val,&set);CHKERRQ(ierr); if (set) { ierr = SVDTRLanczosSetOneSide(svd,val);CHKERRQ(ierr); } ierr = PetscOptionsTail();CHKERRQ(ierr); PetscFunctionReturn(0); }
PetscErrorCode DMSetFromOptions_Complex(DM dm) { DM_Complex *mesh = (DM_Complex *) dm->data; PetscErrorCode ierr; PetscFunctionBegin; PetscValidHeaderSpecific(dm, DM_CLASSID, 1); ierr = PetscOptionsHead("DMComplex Options");CHKERRQ(ierr); /* Handle DMComplex refinement */ /* Handle associated vectors */ /* Handle viewing */ ierr = PetscOptionsBool("-dm_complex_print_set_values", "Output all set values info", "DMView", PETSC_FALSE, &mesh->printSetValues, PETSC_NULL);CHKERRQ(ierr); ierr = PetscOptionsTail();CHKERRQ(ierr); PetscFunctionReturn(0); }
static PetscErrorCode KSPCGSetFromOptions_NASH(PetscOptionItems *PetscOptionsObject,KSP ksp) { PetscErrorCode ierr; KSPCG_NASH *cg = (KSPCG_NASH*)ksp->data; PetscFunctionBegin; ierr = PetscOptionsHead(PetscOptionsObject,"KSPCG NASH options");CHKERRQ(ierr); ierr = PetscOptionsReal("-ksp_cg_radius", "Trust Region Radius", "KSPCGSetRadius", cg->radius, &cg->radius, NULL);CHKERRQ(ierr); ierr = PetscOptionsEList("-ksp_cg_dtype", "Norm used for direction", "", DType_Table, NASH_DIRECTION_TYPES, DType_Table[cg->dtype], &cg->dtype, NULL);CHKERRQ(ierr); ierr = PetscOptionsTail();CHKERRQ(ierr); PetscFunctionReturn(0); }
PetscErrorCode KSPSetFromOptions_PIPEFGMRES(PetscOptionItems *PetscOptionsObject,KSP ksp) { PetscErrorCode ierr; KSP_PIPEFGMRES *pipefgmres = (KSP_PIPEFGMRES*)ksp->data; PetscBool flg; PetscScalar shift; PetscFunctionBegin; ierr = KSPSetFromOptions_GMRES(PetscOptionsObject,ksp);CHKERRQ(ierr); ierr = PetscOptionsHead(PetscOptionsObject,"KSP pipelined FGMRES Options");CHKERRQ(ierr); ierr = PetscOptionsScalar("-ksp_pipefgmres_shift","shift parameter","KSPPIPEFGMRESSetShift",pipefgmres->shift,&shift,&flg);CHKERRQ(ierr); if (flg) { ierr = KSPPIPEFGMRESSetShift(ksp,shift);CHKERRQ(ierr); } ierr = PetscOptionsTail();CHKERRQ(ierr); PetscFunctionReturn(0); }
PetscErrorCode KSPSetFromOptions_FGMRES(KSP ksp) { PetscErrorCode ierr; PetscBool flg; PetscFunctionBegin; ierr = KSPSetFromOptions_GMRES(ksp);CHKERRQ(ierr); ierr = PetscOptionsHead("KSP flexible GMRES Options");CHKERRQ(ierr); ierr = PetscOptionsBoolGroupBegin("-ksp_fgmres_modifypcnochange","do not vary the preconditioner","KSPFGMRESSetModifyPC",&flg);CHKERRQ(ierr); if (flg) {ierr = KSPFGMRESSetModifyPC(ksp,KSPFGMRESModifyPCNoChange,0,0);CHKERRQ(ierr);} ierr = PetscOptionsBoolGroupEnd("-ksp_fgmres_modifypcksp","vary the KSP based preconditioner","KSPFGMRESSetModifyPC",&flg);CHKERRQ(ierr); if (flg) {ierr = KSPFGMRESSetModifyPC(ksp,KSPFGMRESModifyPCKSP,0,0);CHKERRQ(ierr);} ierr = PetscOptionsTail();CHKERRQ(ierr); PetscFunctionReturn(0); }
PetscErrorCode KSPSetFromOptions_BCGSL(KSP ksp) { KSP_BCGSL *bcgsl = (KSP_BCGSL *)ksp->data; PetscErrorCode ierr; PetscInt this_ell; PetscReal delta; PetscTruth flga = PETSC_FALSE, flg; PetscFunctionBegin; /* PetscOptionsBegin/End are called in KSPSetFromOptions. They don't need to be called here. */ ierr = PetscOptionsHead("KSP BiCGStab(L) Options"); CHKERRQ(ierr); /* Set number of search directions */ ierr = PetscOptionsInt("-ksp_bcgsl_ell","Number of Krylov search directions","KSPBCGSLSetEll",bcgsl->ell,&this_ell,&flg); CHKERRQ(ierr); if (flg) { ierr = KSPBCGSLSetEll(ksp, this_ell); CHKERRQ(ierr); } /* Set polynomial type */ ierr = PetscOptionsTruth("-ksp_bcgsl_cxpoly", "Polynomial part of BiCGStabL is MinRes + OR", "KSPBCGSLSetPol", flga,&flga,PETSC_NULL); CHKERRQ(ierr); if (flga) { ierr = KSPBCGSLSetPol(ksp, PETSC_TRUE); CHKERRQ(ierr); } else { flg = PETSC_FALSE; ierr = PetscOptionsTruth("-ksp_bcgsl_mrpoly", "Polynomial part of BiCGStabL is MinRes", "KSPBCGSLSetPol", flg,&flg,PETSC_NULL); CHKERRQ(ierr); ierr = KSPBCGSLSetPol(ksp, PETSC_FALSE); CHKERRQ(ierr); } /* Will computed residual be refreshed? */ ierr = PetscOptionsReal("-ksp_bcgsl_xres", "Threshold used to decide when to refresh computed residuals", "KSPBCGSLSetXRes", bcgsl->delta, &delta, &flg); CHKERRQ(ierr); if (flg) { ierr = KSPBCGSLSetXRes(ksp, delta); CHKERRQ(ierr); } ierr = PetscOptionsTail(); CHKERRQ(ierr); PetscFunctionReturn(0); }
PetscErrorCode TaoSetFromOptions_NM(Tao tao) { TAO_NelderMead *nm = (TAO_NelderMead*)tao->data; PetscBool flg; PetscErrorCode ierr; PetscFunctionBegin; ierr = PetscOptionsHead("Nelder-Mead options");CHKERRQ(ierr); ierr = PetscOptionsReal("-tao_nm_lamda","initial step length","",nm->lamda,&nm->lamda,&flg); CHKERRQ(ierr); ierr = PetscOptionsReal("-tao_nm_mu","mu","",nm->mu_oc,&nm->mu_oc,&flg);CHKERRQ(ierr); nm->mu_ic = -nm->mu_oc; nm->mu_r = nm->mu_oc*2.0; nm->mu_e = nm->mu_oc*4.0; ierr = PetscOptionsTail();CHKERRQ(ierr); PetscFunctionReturn(0); }
static PetscErrorCode PCSetFromOptions_Eisenstat(PC pc) { PC_Eisenstat *eis = (PC_Eisenstat*)pc->data; PetscErrorCode ierr; PetscBool flg = PETSC_FALSE; PetscFunctionBegin; ierr = PetscOptionsHead("Eisenstat SSOR options");CHKERRQ(ierr); ierr = PetscOptionsReal("-pc_eisenstat_omega","Relaxation factor 0 < omega < 2","PCEisenstatSetOmega",eis->omega,&eis->omega,PETSC_NULL);CHKERRQ(ierr); ierr = PetscOptionsBool("-pc_eisenstat_no_diagonal_scaling","Do not use standard diagonal scaling","PCEisenstatNoDiagonalScaling",flg,&flg,PETSC_NULL);CHKERRQ(ierr); if (flg) { ierr = PCEisenstatNoDiagonalScaling(pc);CHKERRQ(ierr); } ierr = PetscOptionsTail();CHKERRQ(ierr); PetscFunctionReturn(0); }
static PetscErrorCode TSSetFromOptions_Theta(TS ts) { TS_Theta *th = (TS_Theta*)ts->data; PetscErrorCode ierr; PetscFunctionBegin; ierr = PetscOptionsHead("Theta ODE solver options");CHKERRQ(ierr); { ierr = PetscOptionsReal("-ts_theta_theta","Location of stage (0<Theta<=1)","TSThetaSetTheta",th->Theta,&th->Theta,PETSC_NULL);CHKERRQ(ierr); ierr = PetscOptionsBool("-ts_theta_extrapolate","Extrapolate stage solution from previous solution (sometimes unstable)","TSThetaSetExtrapolate",th->extrapolate,&th->extrapolate,PETSC_NULL);CHKERRQ(ierr); ierr = PetscOptionsBool("-ts_theta_endpoint","Use the endpoint instead of midpoint form of the Theta method","TSThetaSetEndpoint",th->endpoint,&th->endpoint,PETSC_NULL);CHKERRQ(ierr); ierr = SNESSetFromOptions(ts->snes);CHKERRQ(ierr); } ierr = PetscOptionsTail();CHKERRQ(ierr); PetscFunctionReturn(0); }
PetscErrorCode KSPSetFromOptions_LGMRES(PetscOptions *PetscOptionsObject,KSP ksp) { PetscErrorCode ierr; PetscInt aug; KSP_LGMRES *lgmres = (KSP_LGMRES*) ksp->data; PetscBool flg = PETSC_FALSE; PetscFunctionBegin; ierr = KSPSetFromOptions_GMRES(PetscOptionsObject,ksp);CHKERRQ(ierr); ierr = PetscOptionsHead(PetscOptionsObject,"KSP LGMRES Options");CHKERRQ(ierr); ierr = PetscOptionsBool("-ksp_lgmres_constant","Use constant approx. space size","KSPGMRESSetConstant",lgmres->approx_constant,&lgmres->approx_constant,NULL);CHKERRQ(ierr); ierr = PetscOptionsInt("-ksp_lgmres_augment","Number of error approximations to augment the Krylov space with","KSPLGMRESSetAugDim",lgmres->aug_dim,&aug,&flg);CHKERRQ(ierr); if (flg) { ierr = KSPLGMRESSetAugDim(ksp,aug);CHKERRQ(ierr); } ierr = PetscOptionsTail();CHKERRQ(ierr); PetscFunctionReturn(0); }
EXTERN_C_END #undef __FUNCT__ #define __FUNCT__ "KSPSetFromOptions_STCG" PetscErrorCode KSPSetFromOptions_STCG(KSP ksp) { PetscErrorCode ierr; KSP_STCG *cg = (KSP_STCG *)ksp->data; PetscFunctionBegin; ierr = PetscOptionsHead("KSP STCG options");CHKERRQ(ierr); ierr = PetscOptionsReal("-ksp_stcg_radius", "Trust Region Radius", "KSPSTCGSetRadius", cg->radius, &cg->radius, PETSC_NULL);CHKERRQ(ierr); ierr = PetscOptionsEList("-ksp_stcg_dtype", "Norm used for direction", "", DType_Table, STCG_DIRECTION_TYPES, DType_Table[cg->dtype], &cg->dtype, PETSC_NULL);CHKERRQ(ierr); ierr = PetscOptionsTail();CHKERRQ(ierr); PetscFunctionReturn(0); }
PetscErrorCode EPSSetFromOptions_Lanczos(EPS eps) { PetscErrorCode ierr; EPS_LANCZOS *lanczos = (EPS_LANCZOS*)eps->data; PetscBool flg; EPSLanczosReorthogType reorthog; PetscFunctionBegin; ierr = PetscOptionsHead("EPS Lanczos Options");CHKERRQ(ierr); ierr = PetscOptionsEnum("-eps_lanczos_reorthog","Lanczos reorthogonalization","EPSLanczosSetReorthog",EPSLanczosReorthogTypes,(PetscEnum)lanczos->reorthog,(PetscEnum*)&reorthog,&flg);CHKERRQ(ierr); if (flg) { ierr = EPSLanczosSetReorthog(eps,reorthog);CHKERRQ(ierr); } ierr = PetscOptionsTail();CHKERRQ(ierr); PetscFunctionReturn(0); }
PetscErrorCode PetscViewerSetFromOptions_Draw(PetscOptionItems *PetscOptionsObject,PetscViewer v) { PetscErrorCode ierr; PetscReal bounds[16]; PetscInt nbounds = 16; PetscBool flg; PetscFunctionBegin; ierr = PetscOptionsHead(PetscOptionsObject,"Draw PetscViewer Options");CHKERRQ(ierr); ierr = PetscOptionsRealArray("-draw_bounds","Bounds to put on plots axis","PetscViewerDrawSetBounds",bounds,&nbounds,&flg);CHKERRQ(ierr); if (flg) { ierr = PetscViewerDrawSetBounds(v,nbounds/2,bounds);CHKERRQ(ierr); } ierr = PetscOptionsTail();CHKERRQ(ierr); PetscFunctionReturn(0); }
PetscErrorCode PFSetFromOptions_Matlab(PF pf) { PetscErrorCode ierr; PetscTruth flag; char value[256]; PF_Matlab *matlab = (PF_Matlab*)pf->data; PetscFunctionBegin; ierr = PetscOptionsHead("Matlab function options");CHKERRQ(ierr); ierr = PetscOptionsString("-pf_matlab","Matlab function","None","",value,256,&flag);CHKERRQ(ierr); if (flag) { ierr = PetscStrallocpy((char*)value,&matlab->string);CHKERRQ(ierr); } ierr = PetscOptionsTail();CHKERRQ(ierr); PetscFunctionReturn(0); }
PetscErrorCode KSPSetFromOptions_Richardson(KSP ksp) { KSP_Richardson *rich = (KSP_Richardson*)ksp->data; PetscErrorCode ierr; PetscReal tmp; PetscBool flg,flg2; PetscFunctionBegin; ierr = PetscOptionsHead("KSP Richardson Options");CHKERRQ(ierr); ierr = PetscOptionsReal("-ksp_richardson_scale","damping factor","KSPRichardsonSetScale",rich->scale,&tmp,&flg);CHKERRQ(ierr); if (flg) { ierr = KSPRichardsonSetScale(ksp,tmp);CHKERRQ(ierr); } ierr = PetscOptionsBool("-ksp_richardson_self_scale","dynamically determine optimal damping factor","KSPRichardsonSetSelfScale",rich->selfscale,&flg2,&flg);CHKERRQ(ierr); if (flg) { ierr = KSPRichardsonSetSelfScale(ksp,flg2);CHKERRQ(ierr); } ierr = PetscOptionsTail();CHKERRQ(ierr); PetscFunctionReturn(0); }
static PetscErrorCode TSSetFromOptions_Theta(PetscOptionItems *PetscOptionsObject,TS ts) { TS_Theta *th = (TS_Theta*)ts->data; PetscErrorCode ierr; PetscFunctionBegin; ierr = PetscOptionsHead(PetscOptionsObject,"Theta ODE solver options");CHKERRQ(ierr); { ierr = PetscOptionsReal("-ts_theta_theta","Location of stage (0<Theta<=1)","TSThetaSetTheta",th->Theta,&th->Theta,NULL);CHKERRQ(ierr); ierr = PetscOptionsBool("-ts_theta_endpoint","Use the endpoint instead of midpoint form of the Theta method","TSThetaSetEndpoint",th->endpoint,&th->endpoint,NULL);CHKERRQ(ierr); ierr = PetscOptionsBool("-ts_theta_adapt","Use time-step adaptivity with the Theta method","",th->adapt,&th->adapt,NULL);CHKERRQ(ierr); ierr = PetscOptionsBool("-ts_theta_initial_guess_extrapolate","Extrapolate stage initial guess from previous solution (sometimes unstable)","TSThetaSetExtrapolate",th->extrapolate,&th->extrapolate,NULL);CHKERRQ(ierr); } ierr = PetscOptionsTail();CHKERRQ(ierr); PetscFunctionReturn(0); }
static PetscErrorCode TaoSetFromOptions_Test(PetscOptions *PetscOptionsObject,Tao tao) { Tao_Test *fd = (Tao_Test *)tao->data; PetscErrorCode ierr; PetscFunctionBegin; ierr = PetscOptionsHead(PetscOptionsObject,"Hand-coded Hessian tester options");CHKERRQ(ierr); ierr = PetscOptionsBool("-tao_test_display","Display difference between hand-coded and finite difference Hessians","None",fd->complete_print,&fd->complete_print,NULL);CHKERRQ(ierr); ierr = PetscOptionsBool("-tao_test_gradient","Test Hand-coded gradient against finite-difference gradient","None",fd->check_gradient,&fd->check_gradient,NULL);CHKERRQ(ierr); ierr = PetscOptionsBool("-tao_test_hessian","Test Hand-coded hessian against finite-difference hessian","None",fd->check_hessian,&fd->check_hessian,NULL);CHKERRQ(ierr); if (fd->check_gradient == PETSC_FALSE && fd->check_hessian == PETSC_FALSE) { fd->check_gradient = PETSC_TRUE; } ierr = PetscOptionsTail();CHKERRQ(ierr); PetscFunctionReturn(0); }
PetscErrorCode KSPSetFromOptions_BSSCR(PetscOptions *PetscOptionsObject, KSP ksp) { PetscTruth flg; KSP_BSSCR *bsscr = (KSP_BSSCR *)ksp->data; PetscErrorCode ierr; PetscFunctionBegin; ierr = PetscOptionsHead(PetscOptionsObject,"KSP BSSCR options");CHKERRQ(ierr); /* if this ksp has a prefix "XXX_" it will be automatically added to the options. e.g. -ksp_test -> -XXX_ksp_test */ /* ierr = PetscOptionsTruth("-ksp_test","Test KSP flag","nil",PETSC_FALSE,&test,PETSC_NULL);CHKERRQ(ierr); */ /* if(test){ PetscPrintf( PETSC_COMM_WORLD, "\n\n----- test flag set ------\n\n"); } */ ierr = PetscOptionsEnum("-ksp_k2_type","Augmented Lagrangian matrix type","",K2Types, bsscr->k2type,(PetscEnum*)&bsscr->k2type,&flg);CHKERRQ(ierr); //if(flg){ PetscPrintf( PETSC_COMM_WORLD, "----- k2 type is ------\n"); } ierr = PetscOptionsTail();CHKERRQ(ierr); PetscFunctionReturn(0); }
static PetscErrorCode PCSetFromOptions_Jacobi(PC pc) { PC_Jacobi *jac = (PC_Jacobi*)pc->data; PetscErrorCode ierr; PetscFunctionBegin; ierr = PetscOptionsHead("Jacobi options");CHKERRQ(ierr); ierr = PetscOptionsBool("-pc_jacobi_rowmax","Use row maximums for diagonal","PCJacobiSetUseRowMax",jac->userowmax, &jac->userowmax,NULL);CHKERRQ(ierr); ierr = PetscOptionsBool("-pc_jacobi_rowsum","Use row sums for diagonal","PCJacobiSetUseRowSum",jac->userowsum, &jac->userowsum,NULL);CHKERRQ(ierr); ierr = PetscOptionsBool("-pc_jacobi_abs","Use absolute values of diagaonal entries","PCJacobiSetUseAbs",jac->useabs, &jac->useabs,NULL);CHKERRQ(ierr); ierr = PetscOptionsTail();CHKERRQ(ierr); PetscFunctionReturn(0); }
static PetscErrorCode KSPSetFromOptions_PIPEFCG(PetscOptionItems *PetscOptionsObject,KSP ksp) { PetscErrorCode ierr; KSP_PIPEFCG *pipefcg=(KSP_PIPEFCG*)ksp->data; PetscInt mmax,nprealloc; PetscBool flg; PetscFunctionBegin; ierr = PetscOptionsHead(PetscOptionsObject,"KSP PIPEFCG options");CHKERRQ(ierr); ierr = PetscOptionsInt("-ksp_pipefcg_mmax","Number of search directions to storue","KSPPIPEFCGSetMmax",pipefcg->mmax,&mmax,&flg);CHKERRQ(ierr); if (flg) ierr = KSPPIPEFCGSetMmax(ksp,mmax);CHKERRQ(ierr); ierr = PetscOptionsInt("-ksp_pipefcg_nprealloc","Number of directions to preallocate","KSPPIPEFCGSetNprealloc",pipefcg->nprealloc,&nprealloc,&flg);CHKERRQ(ierr); if (flg) { ierr = KSPPIPEFCGSetNprealloc(ksp,nprealloc);CHKERRQ(ierr); } ierr = PetscOptionsEnum("-ksp_pipefcg_truncation_type","Truncation approach for directions","KSPFCGSetTruncationType",KSPFCDTruncationTypes,(PetscEnum)pipefcg->truncstrat,(PetscEnum*)&pipefcg->truncstrat,NULL);CHKERRQ(ierr); ierr = PetscOptionsTail();CHKERRQ(ierr); PetscFunctionReturn(0); }
static PetscErrorCode PCSetFromOptions_SPAI(PetscOptionItems *PetscOptionsObject,PC pc) { PC_SPAI *ispai = (PC_SPAI*)pc->data; PetscErrorCode ierr; int nbsteps1,max1,maxnew1,block_size1,cache_size,verbose,sp; double epsilon1; PetscBool flg; PetscFunctionBegin; ierr = PetscOptionsHead(PetscOptionsObject,"SPAI options");CHKERRQ(ierr); ierr = PetscOptionsReal("-pc_spai_epsilon","","PCSPAISetEpsilon",ispai->epsilon,&epsilon1,&flg);CHKERRQ(ierr); if (flg) { ierr = PCSPAISetEpsilon(pc,epsilon1);CHKERRQ(ierr); } ierr = PetscOptionsInt("-pc_spai_nbsteps","","PCSPAISetNBSteps",ispai->nbsteps,&nbsteps1,&flg);CHKERRQ(ierr); if (flg) { ierr = PCSPAISetNBSteps(pc,nbsteps1);CHKERRQ(ierr); } /* added 1/7/99 g.h. */ ierr = PetscOptionsInt("-pc_spai_max","","PCSPAISetMax",ispai->max,&max1,&flg);CHKERRQ(ierr); if (flg) { ierr = PCSPAISetMax(pc,max1);CHKERRQ(ierr); } ierr = PetscOptionsInt("-pc_spai_maxnew","","PCSPAISetMaxNew",ispai->maxnew,&maxnew1,&flg);CHKERRQ(ierr); if (flg) { ierr = PCSPAISetMaxNew(pc,maxnew1);CHKERRQ(ierr); } ierr = PetscOptionsInt("-pc_spai_block_size","","PCSPAISetBlockSize",ispai->block_size,&block_size1,&flg);CHKERRQ(ierr); if (flg) { ierr = PCSPAISetBlockSize(pc,block_size1);CHKERRQ(ierr); } ierr = PetscOptionsInt("-pc_spai_cache_size","","PCSPAISetCacheSize",ispai->cache_size,&cache_size,&flg);CHKERRQ(ierr); if (flg) { ierr = PCSPAISetCacheSize(pc,cache_size);CHKERRQ(ierr); } ierr = PetscOptionsInt("-pc_spai_verbose","","PCSPAISetVerbose",ispai->verbose,&verbose,&flg);CHKERRQ(ierr); if (flg) { ierr = PCSPAISetVerbose(pc,verbose);CHKERRQ(ierr); } ierr = PetscOptionsInt("-pc_spai_sp","","PCSPAISetSp",ispai->sp,&sp,&flg);CHKERRQ(ierr); if (flg) { ierr = PCSPAISetSp(pc,sp);CHKERRQ(ierr); } ierr = PetscOptionsTail();CHKERRQ(ierr); PetscFunctionReturn(0); }
PetscErrorCode KSPSetFromOptions_LCD(PetscOptions *PetscOptionsObject,KSP ksp) { PetscErrorCode ierr; PetscBool flg; KSP_LCD *lcd = (KSP_LCD*)ksp->data; PetscFunctionBegin; ierr = PetscOptionsHead(PetscOptionsObject,"KSP LCD options"); CHKERRQ(ierr); ierr = PetscOptionsInt("-ksp_lcd_restart","Number of vectors conjugate","KSPLCDSetRestart",lcd->restart,&lcd->restart,&flg); CHKERRQ(ierr); if (flg && lcd->restart < 1) SETERRQ(PetscObjectComm((PetscObject)ksp),PETSC_ERR_ARG_OUTOFRANGE,"Restart must be positive"); ierr = PetscOptionsReal("-ksp_lcd_haptol","Tolerance for exact convergence (happy ending)","KSPLCDSetHapTol",lcd->haptol,&lcd->haptol,&flg); CHKERRQ(ierr); if (flg && lcd->haptol < 0.0) SETERRQ(PetscObjectComm((PetscObject)ksp),PETSC_ERR_ARG_OUTOFRANGE,"Tolerance must be non-negative"); PetscFunctionReturn(0); }
PetscErrorCode PFSetFromOptions_String(PF pf) { PetscErrorCode ierr; PetscTruth flag; char value[PETSC_MAX_PATH_LEN]; PetscErrorCode (*f)(void*,PetscInt,PetscScalar*,PetscScalar*) = 0; PetscFunctionBegin; ierr = PetscOptionsHead("String function options");CHKERRQ(ierr); ierr = PetscOptionsString("-pf_string","Enter the function","PFStringCreateFunction","",value,PETSC_MAX_PATH_LEN,&flag);CHKERRQ(ierr); if (flag) { ierr = PFStringCreateFunction(pf,value,(void**)&f);CHKERRQ(ierr); pf->ops->apply = f; } ierr = PetscOptionsTail();CHKERRQ(ierr); PetscFunctionReturn(0); }
static PetscErrorCode SNESSetFromOptions_NRichardson(PetscOptions *PetscOptionsObject,SNES snes) { PetscErrorCode ierr; SNESLineSearch linesearch; PetscFunctionBegin; ierr = PetscOptionsHead(PetscOptionsObject,"SNES Richardson options"); CHKERRQ(ierr); ierr = PetscOptionsTail(); CHKERRQ(ierr); if (!snes->linesearch) { ierr = SNESGetLineSearch(snes, &linesearch); CHKERRQ(ierr); ierr = SNESLineSearchSetType(linesearch, SNESLINESEARCHL2); CHKERRQ(ierr); } PetscFunctionReturn(0); }
static PetscErrorCode SNESSetFromOptions_NEWTONTR(PetscOptionItems *PetscOptionsObject,SNES snes) { SNES_NEWTONTR *ctx = (SNES_NEWTONTR*)snes->data; PetscErrorCode ierr; PetscFunctionBegin; ierr = PetscOptionsHead(PetscOptionsObject,"SNES trust region options for nonlinear equations");CHKERRQ(ierr); ierr = PetscOptionsReal("-snes_trtol","Trust region tolerance","SNESSetTrustRegionTolerance",snes->deltatol,&snes->deltatol,NULL);CHKERRQ(ierr); ierr = PetscOptionsReal("-snes_tr_mu","mu","None",ctx->mu,&ctx->mu,NULL);CHKERRQ(ierr); ierr = PetscOptionsReal("-snes_tr_eta","eta","None",ctx->eta,&ctx->eta,NULL);CHKERRQ(ierr); ierr = PetscOptionsReal("-snes_tr_sigma","sigma","None",ctx->sigma,&ctx->sigma,NULL);CHKERRQ(ierr); ierr = PetscOptionsReal("-snes_tr_delta0","delta0","None",ctx->delta0,&ctx->delta0,NULL);CHKERRQ(ierr); ierr = PetscOptionsReal("-snes_tr_delta1","delta1","None",ctx->delta1,&ctx->delta1,NULL);CHKERRQ(ierr); ierr = PetscOptionsReal("-snes_tr_delta2","delta2","None",ctx->delta2,&ctx->delta2,NULL);CHKERRQ(ierr); ierr = PetscOptionsReal("-snes_tr_delta3","delta3","None",ctx->delta3,&ctx->delta3,NULL);CHKERRQ(ierr); ierr = PetscOptionsTail();CHKERRQ(ierr); PetscFunctionReturn(0); }
PetscErrorCode MatPartitioningSetFromOptions_PTScotch(PetscOptionItems *PetscOptionsObject,MatPartitioning part) { PetscErrorCode ierr; PetscBool flag; PetscReal r; MatPartitioning_PTScotch *scotch = (MatPartitioning_PTScotch*)part->data; MPPTScotchStrategyType strat; PetscFunctionBegin; ierr = MatPartitioningPTScotchGetStrategy(part,&strat);CHKERRQ(ierr); ierr = PetscOptionsHead(PetscOptionsObject,"PTScotch partitioning options");CHKERRQ(ierr); ierr = PetscOptionsEnum("-mat_partitioning_ptscotch_strategy","Strategy","MatPartitioningPTScotchSetStrategy",MPPTScotchStrategyTypes,(PetscEnum)strat,(PetscEnum*)&strat,&flag);CHKERRQ(ierr); if (flag) { ierr = MatPartitioningPTScotchSetStrategy(part,strat);CHKERRQ(ierr); } ierr = PetscOptionsReal("-mat_partitioning_ptscotch_imbalance","Load imbalance ratio","MatPartitioningPTScotchSetImbalance",scotch->imbalance,&r,&flag);CHKERRQ(ierr); if (flag) { ierr = MatPartitioningPTScotchSetImbalance(part,r);CHKERRQ(ierr); } ierr = PetscOptionsTail();CHKERRQ(ierr); PetscFunctionReturn(0); }