/*@ MatSetFromOptions - Creates a matrix where the type is determined from the options database. Generates a parallel MPI matrix if the communicator has more than one processor. The default matrix type is AIJ, using the routines MatCreateSeqAIJ() and MatCreateMPIAIJ() if you do not select a type in the options database. Collective on Mat Input Parameter: . A - the matrix Options Database Keys: + -mat_type seqaij - AIJ type, uses MatCreateSeqAIJ() . -mat_type mpiaij - AIJ type, uses MatCreateMPIAIJ() . -mat_type seqdense - dense type, uses MatCreateSeqDense() . -mat_type mpidense - dense type, uses MatCreateMPIDense() . -mat_type seqbaij - block AIJ type, uses MatCreateSeqBAIJ() - -mat_type mpibaij - block AIJ type, uses MatCreateMPIBAIJ() Even More Options Database Keys: See the manpages for particular formats (e.g., MatCreateSeqAIJ()) for additional format-specific options. Level: beginner .keywords: matrix, create .seealso: MatCreateSeqAIJ((), MatCreateMPIAIJ(), MatCreateSeqDense(), MatCreateMPIDense(), MatCreateSeqBAIJ(), MatCreateMPIBAIJ(), MatCreateSeqSBAIJ(), MatCreateMPISBAIJ(), MatConvert() @*/ PetscErrorCode PETSCMAT_DLLEXPORT MatSetFromOptions(Mat B) { PetscErrorCode ierr; const char *deft = MATAIJ; char type[256]; PetscTruth flg; PetscFunctionBegin; PetscValidHeaderSpecific(B,MAT_COOKIE,1); ierr = PetscOptionsBegin(((PetscObject)B)->comm,((PetscObject)B)->prefix,"Matrix options","Mat");CHKERRQ(ierr); ierr = PetscOptionsList("-mat_type","Matrix type","MatSetType",MatList,deft,type,256,&flg);CHKERRQ(ierr); if (flg) { ierr = MatSetType(B,type);CHKERRQ(ierr); } else if (!((PetscObject)B)->type_name) { ierr = MatSetType(B,deft);CHKERRQ(ierr); } if (B->ops->setfromoptions) { ierr = (*B->ops->setfromoptions)(B);CHKERRQ(ierr); } ierr = PetscOptionsEnd();CHKERRQ(ierr); PetscFunctionReturn(0); }
/* PetscRandomSetTypeFromOptions_Private - Sets the type of random generator from user options. Defaults to type PETSCRAND48 or PETSCRAND. Collective on PetscRandom Input Parameter: . rnd - The random number generator context Level: intermediate .keywords: PetscRandom, set, options, database, type .seealso: PetscRandomSetFromOptions(), PetscRandomSetType() */ static PetscErrorCode PetscRandomSetTypeFromOptions_Private(PetscRandom rnd) { PetscBool opt; const char *defaultType; char typeName[256]; PetscErrorCode ierr; PetscFunctionBegin; if (((PetscObject)rnd)->type_name) { defaultType = ((PetscObject)rnd)->type_name; } else { #if defined(PETSC_HAVE_DRAND48) defaultType = PETSCRAND48; #elif defined(PETSC_HAVE_RAND) defaultType = PETSCRAND; #endif } if (!PetscRandomRegisterAllCalled) {ierr = PetscRandomRegisterAll();CHKERRQ(ierr);} ierr = PetscOptionsList("-random_type","PetscRandom type","PetscRandomSetType",PetscRandomList,defaultType,typeName,256,&opt);CHKERRQ(ierr); if (opt) { ierr = PetscRandomSetType(rnd, typeName);CHKERRQ(ierr); } else { ierr = PetscRandomSetType(rnd, defaultType);CHKERRQ(ierr); } PetscFunctionReturn(0); }
/*@ MatPartitioningSetFromOptions - Sets various partitioning options from the options database. Collective on MatPartitioning Input Parameter: . part - the partitioning context. Options Database Command: $ -mat_partitioning_type <type> $ Use -help for a list of available methods $ (for instance, parmetis) Level: beginner .keywords: partitioning, set, method, type @*/ PetscErrorCode MatPartitioningSetFromOptions(MatPartitioning part) { PetscErrorCode ierr; PetscBool flag; char type[256]; const char *def; PetscFunctionBegin; ierr = PetscObjectOptionsBegin((PetscObject)part);CHKERRQ(ierr); if (!((PetscObject)part)->type_name) { #if defined(PETSC_HAVE_PARMETIS) def = MATPARTITIONINGPARMETIS; #else def = MATPARTITIONINGCURRENT; #endif } else { def = ((PetscObject)part)->type_name; } ierr = PetscOptionsList("-mat_partitioning_type","Type of partitioner","MatPartitioningSetType",MatPartitioningList,def,type,256,&flag);CHKERRQ(ierr); if (flag) { ierr = MatPartitioningSetType(part,type);CHKERRQ(ierr); } /* Set the type if it was never set. */ if (!((PetscObject)part)->type_name) { ierr = MatPartitioningSetType(part,def);CHKERRQ(ierr); } if (part->ops->setfromoptions) { ierr = (*part->ops->setfromoptions)(part);CHKERRQ(ierr); } ierr = PetscOptionsEnd();CHKERRQ(ierr); PetscFunctionReturn(0); }
/* DASetTypeFromOptions_Private - Sets the type of DA from user options. Defaults to a 1D DA. Collective on Vec Input Parameter: . da - The DA Level: intermediate .keywords: DA, set, options, database, type .seealso: DASetFromOptions(), DASetType() */ static PetscErrorCode DASetTypeFromOptions_Private(DA da) { const DAType defaultType = DA1D; char typeName[256]; PetscTruth opt; PetscErrorCode ierr; PetscFunctionBegin; switch (da->dim) { case 1: defaultType = DA1D; break; case 2: defaultType = DA2D; break; case 3: defaultType = DA3D; break; } if (((PetscObject)da)->type_name) { defaultType = ((PetscObject)da)->type_name; } if (!DARegisterAllCalled) {ierr = DARegisterAll(PETSC_NULL);CHKERRQ(ierr);} ierr = PetscOptionsList("-da_type","DA type","DASetType",DAList,defaultType,typeName,256,&opt);CHKERRQ(ierr); if (opt) { ierr = DASetType(da, typeName);CHKERRQ(ierr); } else { ierr = DASetType(da, defaultType);CHKERRQ(ierr); } PetscFunctionReturn(0); }
PetscErrorCode PCSetFromOptions_Factor(PC pc) { PC_Factor *factor = (PC_Factor*)pc->data; PetscErrorCode ierr; PetscBool flg = PETSC_FALSE,set; char tname[256], solvertype[64]; PetscFunctionList ordlist; PetscEnum etmp; PetscFunctionBegin; if (!MatOrderingRegisterAllCalled) {ierr = MatOrderingRegisterAll();CHKERRQ(ierr);} ierr = PetscOptionsBool("-pc_factor_in_place","Form factored matrix in the same memory as the matrix","PCFactorSetUseInPlace",flg,&flg,NULL);CHKERRQ(ierr); if (flg) { ierr = PCFactorSetUseInPlace(pc);CHKERRQ(ierr); } ierr = PetscOptionsReal("-pc_factor_fill","Expected non-zeros in factored matrix","PCFactorSetFill",((PC_Factor*)factor)->info.fill,&((PC_Factor*)factor)->info.fill,0);CHKERRQ(ierr); ierr = PetscOptionsEnum("-pc_factor_shift_type","Type of shift to add to diagonal","PCFactorSetShiftType", MatFactorShiftTypes,(PetscEnum)(int)((PC_Factor*)factor)->info.shifttype,&etmp,&flg);CHKERRQ(ierr); if (flg) { ierr = PCFactorSetShiftType(pc,(MatFactorShiftType)etmp);CHKERRQ(ierr); } ierr = PetscOptionsReal("-pc_factor_shift_amount","Shift added to diagonal","PCFactorSetShiftAmount",((PC_Factor*)factor)->info.shiftamount,&((PC_Factor*)factor)->info.shiftamount,0);CHKERRQ(ierr); ierr = PetscOptionsReal("-pc_factor_zeropivot","Pivot is considered zero if less than","PCFactorSetZeroPivot",((PC_Factor*)factor)->info.zeropivot,&((PC_Factor*)factor)->info.zeropivot,0);CHKERRQ(ierr); ierr = PetscOptionsReal("-pc_factor_column_pivot","Column pivot tolerance (used only for some factorization)","PCFactorSetColumnPivot",((PC_Factor*)factor)->info.dtcol,&((PC_Factor*)factor)->info.dtcol,&flg);CHKERRQ(ierr); flg = ((PC_Factor*)factor)->info.pivotinblocks ? PETSC_TRUE : PETSC_FALSE; ierr = PetscOptionsBool("-pc_factor_pivot_in_blocks","Pivot inside matrix dense blocks for BAIJ and SBAIJ","PCFactorSetPivotInBlocks",flg,&flg,&set);CHKERRQ(ierr); if (set) { ierr = PCFactorSetPivotInBlocks(pc,flg);CHKERRQ(ierr); } flg = PETSC_FALSE; ierr = PetscOptionsBool("-pc_factor_reuse_fill","Use fill from previous factorization","PCFactorSetReuseFill",flg,&flg,NULL);CHKERRQ(ierr); if (flg) { ierr = PCFactorSetReuseFill(pc,PETSC_TRUE);CHKERRQ(ierr); } flg = PETSC_FALSE; ierr = PetscOptionsBool("-pc_factor_reuse_ordering","Reuse ordering from previous factorization","PCFactorSetReuseOrdering",flg,&flg,NULL);CHKERRQ(ierr); if (flg) { ierr = PCFactorSetReuseOrdering(pc,PETSC_TRUE);CHKERRQ(ierr); } ierr = MatGetOrderingList(&ordlist);CHKERRQ(ierr); ierr = PetscOptionsList("-pc_factor_mat_ordering_type","Reordering to reduce nonzeros in factored matrix","PCFactorSetMatOrderingType",ordlist,((PC_Factor*)factor)->ordering,tname,256,&flg);CHKERRQ(ierr); if (flg) { ierr = PCFactorSetMatOrderingType(pc,tname);CHKERRQ(ierr); } /* maybe should have MatGetSolverTypes(Mat,&list) like the ordering list */ ierr = PetscOptionsString("-pc_factor_mat_solver_package","Specific direct solver to use","MatGetFactor",((PC_Factor*)factor)->solvertype,solvertype,64,&flg);CHKERRQ(ierr); if (flg) { ierr = PCFactorSetMatSolverPackage(pc,solvertype);CHKERRQ(ierr); } PetscFunctionReturn(0); }
/*@C PetscDrawSetFromOptions - Sets the graphics type from the options database. Defaults to a PETSc X windows graphics. Collective on PetscDraw Input Parameter: . draw - the graphics context Options Database Keys: + -nox - do not use X graphics (ignore graphics calls, but run program correctly) - -nox_warning - when X windows support is not installed this prevents the warning message from being printed Level: intermediate Notes: Must be called after PetscDrawCreate() before the PetscDrawtor is used. Concepts: drawing^setting options Concepts: graphics^setting options .seealso: PetscDrawCreate(), PetscDrawSetType() @*/ PetscErrorCode PetscDrawSetFromOptions(PetscDraw draw) { PetscErrorCode ierr; PetscBool flg,nox; char vtype[256]; const char *def; PetscBool save; #if !defined(PETSC_USE_WINDOWS_GRAPHICS) && !defined(PETSC_HAVE_X) PetscBool warn; #endif char filename[PETSC_MAX_PATH_LEN]; PetscBool movie = PETSC_FALSE; PetscFunctionBegin; PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); if (!PetscDrawList) { ierr = PetscDrawRegisterAll(PETSC_NULL);CHKERRQ(ierr); } if (((PetscObject)draw)->type_name) { def = ((PetscObject)draw)->type_name; } else { ierr = PetscOptionsHasName(PETSC_NULL,"-nox",&nox);CHKERRQ(ierr); def = PETSC_DRAW_NULL; #if defined(PETSC_USE_WINDOWS_GRAPHICS) && !defined(PETSC_HAVE_X) if (!nox) def = PETSC_DRAW_WIN32; #elif defined(PETSC_HAVE_X) if (!nox) def = PETSC_DRAW_X; #else ierr = PetscOptionsHasName(PETSC_NULL,"-nox_warning",&warn);CHKERRQ(ierr); if (!nox && !warn) { (*PetscErrorPrintf)("PETSc installed without X windows on this machine\nproceeding without graphics\n"); } #endif } ierr = PetscObjectOptionsBegin((PetscObject)draw);CHKERRQ(ierr); ierr = PetscOptionsList("-draw_type","Type of graphical output","PetscDrawSetType",PetscDrawList,def,vtype,256,&flg);CHKERRQ(ierr); if (flg) { ierr = PetscDrawSetType(draw,vtype);CHKERRQ(ierr); } else if (!((PetscObject)draw)->type_name) { ierr = PetscDrawSetType(draw,def);CHKERRQ(ierr); } ierr = PetscOptionsName("-nox","Run without graphics","None",&nox);CHKERRQ(ierr); ierr = PetscOptionsBool("-draw_save_movie","Make a movie from the images saved","PetscDrawSetSave",movie,&movie,PETSC_NULL);CHKERRQ(ierr); ierr = PetscOptionsString("-draw_save","Save graphics to file","PetscDrawSetSave",filename,filename,PETSC_MAX_PATH_LEN,&save);CHKERRQ(ierr); if (save) { ierr = PetscDrawSetSave(draw,filename,movie);CHKERRQ(ierr); } /* process any options handlers added with PetscObjectAddOptionsHandler() */ ierr = PetscObjectProcessOptionsHandlers((PetscObject)draw);CHKERRQ(ierr); ierr = PetscOptionsEnd();CHKERRQ(ierr); PetscFunctionReturn(0); }
/*@ MatSetFromOptions - Creates a matrix where the type is determined from the options database. Generates a parallel MPI matrix if the communicator has more than one processor. The default matrix type is AIJ, using the routines MatCreateSeqAIJ() and MatCreateAIJ() if you do not select a type in the options database. Collective on Mat Input Parameter: . A - the matrix Options Database Keys: + -mat_type seqaij - AIJ type, uses MatCreateSeqAIJ() . -mat_type mpiaij - AIJ type, uses MatCreateAIJ() . -mat_type seqdense - dense type, uses MatCreateSeqDense() . -mat_type mpidense - dense type, uses MatCreateDense() . -mat_type seqbaij - block AIJ type, uses MatCreateSeqBAIJ() - -mat_type mpibaij - block AIJ type, uses MatCreateBAIJ() Even More Options Database Keys: See the manpages for particular formats (e.g., MatCreateSeqAIJ()) for additional format-specific options. Level: beginner .keywords: matrix, create .seealso: MatCreateSeqAIJ((), MatCreateAIJ(), MatCreateSeqDense(), MatCreateDense(), MatCreateSeqBAIJ(), MatCreateBAIJ(), MatCreateSeqSBAIJ(), MatCreateSBAIJ(), MatConvert() @*/ PetscErrorCode MatSetFromOptions(Mat B) { PetscErrorCode ierr; const char *deft = MATAIJ; char type[256]; PetscBool flg,set; PetscFunctionBegin; PetscValidHeaderSpecific(B,MAT_CLASSID,1); ierr = PetscObjectOptionsBegin((PetscObject)B);CHKERRQ(ierr); if (B->rmap->bs < 0) { PetscInt newbs = -1; ierr = PetscOptionsInt("-mat_block_size","Set the blocksize used to store the matrix","MatSetBlockSize",newbs,&newbs,&flg);CHKERRQ(ierr); if (flg) { ierr = PetscLayoutSetBlockSize(B->rmap,newbs);CHKERRQ(ierr); ierr = PetscLayoutSetBlockSize(B->cmap,newbs);CHKERRQ(ierr); } } ierr = PetscOptionsList("-mat_type","Matrix type","MatSetType",MatList,deft,type,256,&flg);CHKERRQ(ierr); if (flg) { ierr = MatSetType(B,type);CHKERRQ(ierr); } else if (!((PetscObject)B)->type_name) { ierr = MatSetType(B,deft);CHKERRQ(ierr); } if (B->ops->setfromoptions) { ierr = (*B->ops->setfromoptions)(B);CHKERRQ(ierr); } flg = PETSC_FALSE; ierr = PetscOptionsBool("-mat_new_nonzero_location_err","Generate an error if new nonzeros are created in the matrix structure (useful to test preallocation)","MatSetOption",flg,&flg,&set);CHKERRQ(ierr); if (set) {ierr = MatSetOption(B,MAT_NEW_NONZERO_LOCATION_ERR,flg);CHKERRQ(ierr);} flg = PETSC_FALSE; ierr = PetscOptionsBool("-mat_new_nonzero_allocation_err","Generate an error if new nonzeros are allocated in the matrix structure (useful to test preallocation)","MatSetOption",flg,&flg,&set);CHKERRQ(ierr); if (set) {ierr = MatSetOption(B,MAT_NEW_NONZERO_ALLOCATION_ERR,flg);CHKERRQ(ierr);} /* process any options handlers added with PetscObjectAddOptionsHandler() */ ierr = PetscObjectProcessOptionsHandlers((PetscObject)B);CHKERRQ(ierr); ierr = PetscOptionsEnd();CHKERRQ(ierr); PetscFunctionReturn(0); }
static PetscErrorCode TSSetFromOptions_SSP(TS ts) { char tname[256] = TSSSPRKS2; TS_SSP *ssp = (TS_SSP*)ts->data; PetscErrorCode ierr; PetscBool flg; PetscFunctionBegin; ierr = PetscOptionsHead("SSP ODE solver options");CHKERRQ(ierr); { ierr = PetscOptionsList("-ts_ssp_type","Type of SSP method","TSSSPSetType",TSSSPList,tname,tname,sizeof(tname),&flg);CHKERRQ(ierr); if (flg) { ierr = TSSSPSetType(ts,tname);CHKERRQ(ierr); } ierr = PetscOptionsInt("-ts_ssp_nstages","Number of stages","TSSSPSetNumStages",ssp->nstages,&ssp->nstages,NULL);CHKERRQ(ierr); } ierr = PetscOptionsTail();CHKERRQ(ierr); PetscFunctionReturn(0); }
PetscErrorCode PETSCTS_DLLEXPORT TSGLAdaptSetFromOptions(TSGLAdapt adapt) { PetscErrorCode ierr; char type[256] = TSGLADAPT_BOTH; PetscTruth flg; PetscFunctionBegin; /* This should use PetscOptionsBegin() if/when this becomes an object used outside of TSGL, but currently this * function can only be called from inside TSSetFromOptions_GL() */ ierr = PetscOptionsHead("TSGL Adaptivity options");CHKERRQ(ierr); ierr = PetscOptionsList("-ts_adapt_type","Algorithm to use for adaptivity","TSGLAdaptSetType",TSGLAdaptList, ((PetscObject)adapt)->type_name?((PetscObject)adapt)->type_name:type,type,sizeof type,&flg);CHKERRQ(ierr); if (flg || !((PetscObject)adapt)->type_name) { ierr = TSGLAdaptSetType(adapt,type);CHKERRQ(ierr); } if (adapt->ops->setfromoptions) {ierr = (*adapt->ops->setfromoptions)(adapt);CHKERRQ(ierr);} ierr = PetscOptionsTail();CHKERRQ(ierr); PetscFunctionReturn(0); }
PetscErrorCode MatSetFromOptions_MFFD(Mat mat) { MatMFFD mfctx = (MatMFFD)mat->data; PetscErrorCode ierr; PetscBool flg; char ftype[256]; PetscFunctionBegin; PetscValidHeaderSpecific(mat,MAT_CLASSID,1); PetscValidHeaderSpecific(mfctx,MATMFFD_CLASSID,1); ierr = PetscObjectOptionsBegin((PetscObject)mfctx); CHKERRQ(ierr); ierr = PetscOptionsList("-mat_mffd_type","Matrix free type","MatMFFDSetType",MatMFFDList,((PetscObject)mfctx)->type_name,ftype,256,&flg); CHKERRQ(ierr); if (flg) { ierr = MatMFFDSetType(mat,ftype); CHKERRQ(ierr); } ierr = PetscOptionsReal("-mat_mffd_err","set sqrt relative error in function","MatMFFDSetFunctionError",mfctx->error_rel,&mfctx->error_rel,0); CHKERRQ(ierr); ierr = PetscOptionsInt("-mat_mffd_period","how often h is recomputed","MatMFFDSetPeriod",mfctx->recomputeperiod,&mfctx->recomputeperiod,0); CHKERRQ(ierr); flg = PETSC_FALSE; ierr = PetscOptionsBool("-mat_mffd_check_positivity","Insure that U + h*a is nonnegative","MatMFFDSetCheckh",flg,&flg,NULL); CHKERRQ(ierr); if (flg) { ierr = MatMFFDSetCheckh(mat,MatMFFDCheckPositivity,0); CHKERRQ(ierr); } if (mfctx->ops->setfromoptions) { ierr = (*mfctx->ops->setfromoptions)(mfctx); CHKERRQ(ierr); } ierr = PetscOptionsEnd(); CHKERRQ(ierr); PetscFunctionReturn(0); }
/*@ PCSetFromOptions - Sets PC options from the options database. This routine must be called before PCSetUp() if the user is to be allowed to set the preconditioner method. Collective on PC Input Parameter: . pc - the preconditioner context Options Database: . -pc_use_amat true,false see PCSetUseAmat() Level: developer .keywords: PC, set, from, options, database .seealso: PCSetUseAmat() @*/ PetscErrorCode PCSetFromOptions(PC pc) { PetscErrorCode ierr; char type[256]; const char *def; PetscBool flg; PetscFunctionBegin; PetscValidHeaderSpecific(pc,PC_CLASSID,1); if (!PCRegisterAllCalled) {ierr = PCRegisterAll();CHKERRQ(ierr);} ierr = PetscObjectOptionsBegin((PetscObject)pc);CHKERRQ(ierr); if (!((PetscObject)pc)->type_name) { ierr = PCGetDefaultType_Private(pc,&def);CHKERRQ(ierr); } else { def = ((PetscObject)pc)->type_name; } ierr = PetscOptionsList("-pc_type","Preconditioner","PCSetType",PCList,def,type,256,&flg);CHKERRQ(ierr); if (flg) { ierr = PCSetType(pc,type);CHKERRQ(ierr); } else if (!((PetscObject)pc)->type_name) { ierr = PCSetType(pc,def);CHKERRQ(ierr); } ierr = PetscOptionsBool("-pc_use_amat","use Amat (instead of Pmat) to define preconditioner in nested inner solves","PCSetUseAmat",pc->useAmat,&pc->useAmat,NULL);CHKERRQ(ierr); if (pc->ops->setfromoptions) { ierr = (*pc->ops->setfromoptions)(pc);CHKERRQ(ierr); } /* process any options handlers added with PetscObjectAddOptionsHandler() */ ierr = PetscObjectProcessOptionsHandlers((PetscObject)pc);CHKERRQ(ierr); ierr = PetscOptionsEnd();CHKERRQ(ierr); pc->setfromoptionscalled++; PetscFunctionReturn(0); }
/*@ PFSetFromOptions - Sets PF options from the options database. Collective on PF Input Parameters: . pf - the mathematical function context Options Database Keys: Notes: To see all options, run your program with the -help option or consult the users manual. Level: intermediate .keywords: PF, set, from, options, database .seealso: @*/ PetscErrorCode PFSetFromOptions(PF pf) { PetscErrorCode ierr; char type[256]; PetscBool flg; PetscFunctionBegin; PetscValidHeaderSpecific(pf,PF_CLASSID,1); ierr = PetscObjectOptionsBegin((PetscObject)pf);CHKERRQ(ierr); ierr = PetscOptionsList("-pf_type","Type of function","PFSetType",PFList,0,type,256,&flg);CHKERRQ(ierr); if (flg) { ierr = PFSetType(pf,type,PETSC_NULL);CHKERRQ(ierr); } if (pf->ops->setfromoptions) { ierr = (*pf->ops->setfromoptions)(pf);CHKERRQ(ierr); } /* process any options handlers added with PetscObjectAddOptionsHandler() */ ierr = PetscObjectProcessOptionsHandlers((PetscObject)pf);CHKERRQ(ierr); ierr = PetscOptionsEnd();CHKERRQ(ierr); PetscFunctionReturn(0); }
/*@C AOSetFromOptions - Sets AO options from the options database. Collective on AO Input Parameter: . ao - the application ordering Level: beginner .keywords: AO, options, database .seealso: AOCreate(), AOSetType(), AODestroy(), AOPetscToApplication(), AOApplicationToPetsc() @*/ PetscErrorCode AOSetFromOptions(AO ao) { PetscErrorCode ierr; char type[256]; const char *def=AOBASIC; PetscBool flg; PetscFunctionBegin; PetscValidHeaderSpecific(ao,AO_CLASSID,1); ierr = PetscObjectOptionsBegin((PetscObject)ao);CHKERRQ(ierr); ierr = PetscOptionsList("-ao_type","AO type","AOSetType",AOList,def,type,256,&flg);CHKERRQ(ierr); if (flg) { ierr = AOSetType(ao,type);CHKERRQ(ierr); } else if (!((PetscObject)ao)->type_name){ ierr = AOSetType(ao,def);CHKERRQ(ierr); } /* not used here, but called so will go into help messaage */ ierr = PetscOptionsName("-ao_view","Print detailed information on AO used","AOView",0);CHKERRQ(ierr); ierr = PetscOptionsEnd();CHKERRQ(ierr); PetscFunctionReturn(0); }
/*@ MatSetFromOptions - Creates a matrix where the type is determined from the options database. Generates a parallel MPI matrix if the communicator has more than one processor. The default matrix type is AIJ, using the routines MatCreateSeqAIJ() and MatCreateAIJ() if you do not select a type in the options database. Collective on Mat Input Parameter: . A - the matrix Options Database Keys: + -mat_type seqaij - AIJ type, uses MatCreateSeqAIJ() . -mat_type mpiaij - AIJ type, uses MatCreateAIJ() . -mat_type seqdense - dense type, uses MatCreateSeqDense() . -mat_type mpidense - dense type, uses MatCreateDense() . -mat_type seqbaij - block AIJ type, uses MatCreateSeqBAIJ() - -mat_type mpibaij - block AIJ type, uses MatCreateBAIJ() Even More Options Database Keys: See the manpages for particular formats (e.g., MatCreateSeqAIJ()) for additional format-specific options. Level: beginner .keywords: matrix, create .seealso: MatCreateSeqAIJ((), MatCreateAIJ(), MatCreateSeqDense(), MatCreateDense(), MatCreateSeqBAIJ(), MatCreateBAIJ(), MatCreateSeqSBAIJ(), MatCreateSBAIJ(), MatConvert() @*/ PetscErrorCode MatSetFromOptions(Mat B) { PetscErrorCode ierr; const char *deft = MATAIJ; char type[256]; PetscBool flg,set; PetscFunctionBegin; PetscValidHeaderSpecific(B,MAT_CLASSID,1); ierr = PetscObjectOptionsBegin((PetscObject)B); CHKERRQ(ierr); if (B->rmap->bs < 0) { PetscInt newbs = -1; ierr = PetscOptionsInt("-mat_block_size","Set the blocksize used to store the matrix","MatSetBlockSize",newbs,&newbs,&flg); CHKERRQ(ierr); if (flg) { ierr = PetscLayoutSetBlockSize(B->rmap,newbs); CHKERRQ(ierr); ierr = PetscLayoutSetBlockSize(B->cmap,newbs); CHKERRQ(ierr); } } ierr = PetscOptionsList("-mat_type","Matrix type","MatSetType",MatList,deft,type,256,&flg); CHKERRQ(ierr); if (flg) { ierr = MatSetType(B,type); CHKERRQ(ierr); } else if (!((PetscObject)B)->type_name) { ierr = MatSetType(B,deft); CHKERRQ(ierr); } ierr = PetscViewerDestroy(&B->viewonassembly); CHKERRQ(ierr); ierr = PetscOptionsViewer("-mat_view","Display mat with the viewer on MatAssemblyEnd()","MatView",&B->viewonassembly,&B->viewformatonassembly,NULL); CHKERRQ(ierr); ierr = PetscOptionsName("-mat_is_symmetric","Checks if mat is symmetric on MatAssemblyEnd()","MatIsSymmetric",&B->checksymmetryonassembly); CHKERRQ(ierr); ierr = PetscOptionsReal("-mat_is_symmetric","Checks if mat is symmetric on MatAssemblyEnd()","MatIsSymmetric",0.0,&B->checksymmetrytol,NULL); CHKERRQ(ierr); ierr = PetscOptionsBool("-mat_null_space_test","Checks if provided null space is correct in MatAssemblyEnd()","MatSetNullSpaceTest",PETSC_FALSE,&B->checknullspaceonassembly,NULL); CHKERRQ(ierr); if (B->ops->setfromoptions) { ierr = (*B->ops->setfromoptions)(B); CHKERRQ(ierr); } flg = PETSC_FALSE; ierr = PetscOptionsBool("-mat_new_nonzero_location_err","Generate an error if new nonzeros are created in the matrix structure (useful to test preallocation)","MatSetOption",flg,&flg,&set); CHKERRQ(ierr); if (set) { ierr = MatSetOption(B,MAT_NEW_NONZERO_LOCATION_ERR,flg); CHKERRQ(ierr); } flg = PETSC_FALSE; ierr = PetscOptionsBool("-mat_new_nonzero_allocation_err","Generate an error if new nonzeros are allocated in the matrix structure (useful to test preallocation)","MatSetOption",flg,&flg,&set); CHKERRQ(ierr); if (set) { ierr = MatSetOption(B,MAT_NEW_NONZERO_ALLOCATION_ERR,flg); CHKERRQ(ierr); } /* process any options handlers added with PetscObjectAddOptionsHandler() */ ierr = PetscObjectProcessOptionsHandlers((PetscObject)B); CHKERRQ(ierr); ierr = PetscOptionsEnd(); CHKERRQ(ierr); PetscFunctionReturn(0); }