本文整理汇总了C++中PetscOptionsGetBool函数的典型用法代码示例。如果您正苦于以下问题:C++ PetscOptionsGetBool函数的具体用法?C++ PetscOptionsGetBool怎么用?C++ PetscOptionsGetBool使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了PetscOptionsGetBool函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: main
int main(int argc, char **argv)
{
PetscBool transform = PETSC_FALSE;
PetscErrorCode ierr;
ierr = PetscInitialize(&argc, &argv, NULL, help);CHKERRQ(ierr);
ierr = PetscOptionsGetBool(NULL, "-transform", &transform, NULL);CHKERRQ(ierr);
if (transform) {ierr = PetscPrintf(PETSC_COMM_WORLD, "Using random transforms");CHKERRQ(ierr);}
ierr = TestTriangle(PETSC_COMM_SELF, PETSC_FALSE, transform);CHKERRQ(ierr);
ierr = TestTriangle(PETSC_COMM_SELF, PETSC_TRUE, transform);CHKERRQ(ierr);
ierr = TestQuadrilateral(PETSC_COMM_SELF, PETSC_FALSE, transform);CHKERRQ(ierr);
ierr = TestQuadrilateral(PETSC_COMM_SELF, PETSC_TRUE, transform);CHKERRQ(ierr);
ierr = TestTetrahedron(PETSC_COMM_SELF, PETSC_FALSE, transform);CHKERRQ(ierr);
ierr = TestTetrahedron(PETSC_COMM_SELF, PETSC_TRUE, transform);CHKERRQ(ierr);
ierr = TestHexahedron(PETSC_COMM_SELF, PETSC_FALSE, transform);CHKERRQ(ierr);
ierr = TestHexahedron(PETSC_COMM_SELF, PETSC_TRUE, transform);CHKERRQ(ierr);
ierr = PetscFinalize();
return 0;
}
示例2: main
int main(int argc,char **args)
{
PetscErrorCode ierr;
PetscBool usempiio = PETSC_FALSE;
PetscInitialize(&argc,&args,(char*)0,help);
ierr = PetscOptionsGetBool(NULL,"-usempiio",&usempiio,NULL);CHKERRQ(ierr);
if (!usempiio) {
ierr = TestDMDAVec(PETSC_FALSE);CHKERRQ(ierr);
} else {
#if defined(PETSC_HAVE_MPIIO)
ierr = TestDMDAVec(PETSC_TRUE);CHKERRQ(ierr);
#else
ierr = PetscPrintf(PETSC_COMM_WORLD,"Warning: Executing TestDMDAVec(PETSC_TRUE) requires a working MPI-2 implementation\n");CHKERRQ(ierr);
#endif
}
ierr = PetscFinalize();
return 0;
}
示例3: PetscDrawSetUpColormap_Shared
PetscErrorCode PetscDrawSetUpColormap_Shared(Display *display,int screen,Visual *visual,Colormap colormap)
{
int i;
XColor colordef,ecolordef;
PetscBool fast = PETSC_FALSE;
PetscErrorCode ierr;
PetscFunctionBegin;
if (colormap) gColormap = colormap;
else gColormap = DefaultColormap(display,screen);
/* set the basic colors into the color map */
for (i=0; i<PETSC_DRAW_BASIC_COLORS; i++) {
XAllocNamedColor(display,gColormap,colornames[i],&colordef,&ecolordef);
gCmapping[i] = colordef.pixel;
}
/* set the contour colors into the colormap */
ierr = PetscOptionsGetBool(NULL,NULL,"-draw_fast",&fast,NULL);CHKERRQ(ierr);
if (!fast) {
int ncolors = 256-PETSC_DRAW_BASIC_COLORS;
unsigned char *red,*green,*blue;
ierr = PetscMalloc3(ncolors,&red,ncolors,&green,ncolors,&blue);CHKERRQ(ierr);
ierr = PetscDrawUtilitySetCmap(NULL,ncolors,red,green,blue);CHKERRQ(ierr);
for (i=0; i<ncolors; i++) {
colordef.red = (unsigned short)(red[i] << 8);
colordef.green = (unsigned short)(green[i] << 8);
colordef.blue = (unsigned short)(blue[i] << 8);
colordef.flags = DoRed|DoGreen|DoBlue;
XAllocColor(display,gColormap,&colordef);
gCmapping[PETSC_DRAW_BASIC_COLORS + i] = colordef.pixel;
}
ierr = PetscFree3(red,green,blue);CHKERRQ(ierr);
}
ierr = PetscInfo(0,"Successfully allocated colors\n");CHKERRQ(ierr);
PetscFunctionReturn(0);
}
示例4: PetscSplitReductionCreate
/*
PetscSplitReductionCreate - Creates a data structure to contain the queued information.
*/
static PetscErrorCode PetscSplitReductionCreate(MPI_Comm comm,PetscSplitReduction **sr)
{
PetscErrorCode ierr;
PetscFunctionBegin;
ierr = PetscNew(PetscSplitReduction,sr);CHKERRQ(ierr);
(*sr)->numopsbegin = 0;
(*sr)->numopsend = 0;
(*sr)->state = STATE_BEGIN;
(*sr)->maxops = 32;
ierr = PetscMalloc(2*32*sizeof(PetscScalar),&(*sr)->lvalues);CHKERRQ(ierr);
ierr = PetscMalloc(2*32*sizeof(PetscScalar),&(*sr)->gvalues);CHKERRQ(ierr);
ierr = PetscMalloc(32*sizeof(void*),&(*sr)->invecs);CHKERRQ(ierr);
(*sr)->comm = comm;
(*sr)->request = MPI_REQUEST_NULL;
ierr = PetscMalloc(32*sizeof(PetscInt),&(*sr)->reducetype);CHKERRQ(ierr);
(*sr)->async = PETSC_FALSE;
#if defined(PETSC_HAVE_MPIX_IALLREDUCE) || defined(PETSC_HAVE_PAMI) || defined(PETSC_HAVE_DCMF)
(*sr)->async = PETSC_TRUE; /* Enable by default */
ierr = PetscOptionsGetBool(PETSC_NULL,"-splitreduction_async",&(*sr)->async,PETSC_NULL);CHKERRQ(ierr);
#endif
PetscFunctionReturn(0);
}
示例5: PetscSFCreate_Window
PETSC_EXTERN PetscErrorCode PetscSFCreate_Window(PetscSF sf)
{
PetscSF_Window *w = (PetscSF_Window*)sf->data;
PetscErrorCode ierr;
PetscFunctionBegin;
sf->ops->SetUp = PetscSFSetUp_Window;
sf->ops->SetFromOptions = PetscSFSetFromOptions_Window;
sf->ops->Reset = PetscSFReset_Window;
sf->ops->Destroy = PetscSFDestroy_Window;
sf->ops->View = PetscSFView_Window;
sf->ops->Duplicate = PetscSFDuplicate_Window;
sf->ops->BcastBegin = PetscSFBcastBegin_Window;
sf->ops->BcastEnd = PetscSFBcastEnd_Window;
sf->ops->ReduceBegin = PetscSFReduceBegin_Window;
sf->ops->ReduceEnd = PetscSFReduceEnd_Window;
sf->ops->FetchAndOpBegin = PetscSFFetchAndOpBegin_Window;
sf->ops->FetchAndOpEnd = PetscSFFetchAndOpEnd_Window;
ierr = PetscNewLog(sf,&w);CHKERRQ(ierr);
sf->data = (void*)w;
w->sync = PETSCSF_WINDOW_SYNC_FENCE;
ierr = PetscObjectComposeFunction((PetscObject)sf,"PetscSFWindowSetSyncType_C",PetscSFWindowSetSyncType_Window);CHKERRQ(ierr);
ierr = PetscObjectComposeFunction((PetscObject)sf,"PetscSFWindowGetSyncType_C",PetscSFWindowGetSyncType_Window);CHKERRQ(ierr);
#if defined(OMPI_MAJOR_VERSION) && (OMPI_MAJOR_VERSION < 1 || (OMPI_MAJOR_VERSION == 1 && OMPI_MINOR_VERSION <= 6))
{
PetscBool ackbug = PETSC_FALSE;
ierr = PetscOptionsGetBool(NULL,NULL,"-acknowledge_ompi_onesided_bug",&ackbug,NULL);CHKERRQ(ierr);
if (ackbug) {
ierr = PetscInfo(sf,"Acknowledged Open MPI bug, proceeding anyway. Expect memory corruption.\n");CHKERRQ(ierr);
} else SETERRQ(PetscObjectComm((PetscObject)sf),PETSC_ERR_LIB,"Open MPI is known to be buggy (https://svn.open-mpi.org/trac/ompi/ticket/1905 and 2656), use -acknowledge_ompi_onesided_bug to proceed");
}
#endif
PetscFunctionReturn(0);
}
示例6: PFCreate
/*@C
PFDestroy - Destroys PF context that was created with PFCreate().
Collective on PF
Input Parameter:
. pf - the function context
Level: beginner
.keywords: PF, destroy
.seealso: PFCreate(), PFSet(), PFSetType()
@*/
PetscErrorCode PFDestroy(PF *pf)
{
PetscErrorCode ierr;
PetscBool flg = PETSC_FALSE;
PetscFunctionBegin;
if (!*pf) PetscFunctionReturn(0);
PetscValidHeaderSpecific((*pf),PF_CLASSID,1);
if (--((PetscObject)(*pf))->refct > 0) PetscFunctionReturn(0);
ierr = PetscOptionsGetBool(((PetscObject)(*pf))->prefix,"-pf_view",&flg,PETSC_NULL);CHKERRQ(ierr);
if (flg) {
PetscViewer viewer;
ierr = PetscViewerASCIIGetStdout(((PetscObject)(*pf))->comm,&viewer);CHKERRQ(ierr);
ierr = PFView((*pf),viewer);CHKERRQ(ierr);
}
/* if memory was published with AMS then destroy it */
ierr = PetscObjectDepublish((*pf));CHKERRQ(ierr);
if ((*pf)->ops->destroy) {ierr = (*(*pf)->ops->destroy)((*pf)->data);CHKERRQ(ierr);}
ierr = PetscHeaderDestroy(pf);CHKERRQ(ierr);
PetscFunctionReturn(0);
}
示例7: main
int main(int argc,char **argv)
{
PetscInt M = -10,N = -8;
PetscErrorCode ierr;
PetscBool flg = PETSC_FALSE;
DM da;
Vec global1,global2,global3;
DMDABoundaryType bx = DMDA_BOUNDARY_NONE,by = DMDA_BOUNDARY_NONE;
DMDAStencilType stype = DMDA_STENCIL_BOX;
ierr = PetscInitialize(&argc,&argv,(char*)0,help);CHKERRQ(ierr);
ierr = PetscOptionsGetBool(PETSC_NULL,"-star_stencil",&flg,PETSC_NULL);CHKERRQ(ierr);
if (flg) stype = DMDA_STENCIL_STAR;
/* Create distributed array and get vectors */
ierr = DMDACreate2d(PETSC_COMM_WORLD,bx,by,stype,M,N,PETSC_DECIDE,PETSC_DECIDE,1,1,PETSC_NULL,PETSC_NULL,&da);CHKERRQ(ierr);
ierr = DMGetGlobalVector(da,&global1);CHKERRQ(ierr);
ierr = DMGetGlobalVector(da,&global2);CHKERRQ(ierr);
ierr = DMRestoreGlobalVector(da,&global1);CHKERRQ(ierr);
ierr = DMRestoreGlobalVector(da,&global2);CHKERRQ(ierr);
ierr = DMGetGlobalVector(da,&global1);CHKERRQ(ierr);
ierr = DMGetGlobalVector(da,&global3);CHKERRQ(ierr);
ierr = DMGetGlobalVector(da,&global2);CHKERRQ(ierr);
ierr = DMRestoreGlobalVector(da,&global1);CHKERRQ(ierr);
ierr = DMRestoreGlobalVector(da,&global3);CHKERRQ(ierr);
ierr = DMRestoreGlobalVector(da,&global2);CHKERRQ(ierr);
ierr = DMGetGlobalVector(da,&global1);CHKERRQ(ierr);
ierr = DMGetGlobalVector(da,&global3);CHKERRQ(ierr);
ierr = DMGetGlobalVector(da,&global2);CHKERRQ(ierr);
ierr = DMRestoreGlobalVector(da,&global1);CHKERRQ(ierr);
ierr = DMRestoreGlobalVector(da,&global3);CHKERRQ(ierr);
ierr = DMRestoreGlobalVector(da,&global2);CHKERRQ(ierr);
ierr = DMDestroy(&da);CHKERRQ(ierr);
ierr = PetscFinalize();
return 0;
}
示例8: MatPartitioningRegister
/*@
MatPartitioningApply - Gets a partitioning for a matrix.
Collective on Mat
Input Parameters:
. matp - the matrix partitioning object
Output Parameters:
. partitioning - the partitioning. For each local node this tells the processor
number that that node is assigned to.
Options Database Keys:
To specify the partitioning through the options database, use one of
the following
$ -mat_partitioning_type parmetis, -mat_partitioning current
To see the partitioning result
$ -mat_partitioning_view
Level: beginner
The user can define additional partitionings; see MatPartitioningRegister().
.keywords: matrix, get, partitioning
.seealso: MatPartitioningRegister(), MatPartitioningCreate(),
MatPartitioningDestroy(), MatPartitioningSetAdjacency(), ISPartitioningToNumbering(),
ISPartitioningCount()
@*/
PetscErrorCode MatPartitioningApply(MatPartitioning matp,IS *partitioning)
{
PetscErrorCode ierr;
PetscBool flag = PETSC_FALSE;
PetscFunctionBegin;
PetscValidHeaderSpecific(matp,MAT_PARTITIONING_CLASSID,1);
PetscValidPointer(partitioning,2);
if (!matp->adj->assembled) SETERRQ(PetscObjectComm((PetscObject)matp),PETSC_ERR_ARG_WRONGSTATE,"Not for unassembled matrix");
if (matp->adj->factortype) SETERRQ(PetscObjectComm((PetscObject)matp),PETSC_ERR_ARG_WRONGSTATE,"Not for factored matrix");
if (!matp->ops->apply) SETERRQ(PetscObjectComm((PetscObject)matp),PETSC_ERR_ARG_WRONGSTATE,"Must set type with MatPartitioningSetFromOptions() or MatPartitioningSetType()");
ierr = PetscLogEventBegin(MAT_Partitioning,matp,0,0,0);CHKERRQ(ierr);
ierr = (*matp->ops->apply)(matp,partitioning);CHKERRQ(ierr);
ierr = PetscLogEventEnd(MAT_Partitioning,matp,0,0,0);CHKERRQ(ierr);
ierr = PetscOptionsGetBool(NULL,"-mat_partitioning_view",&flag,NULL);CHKERRQ(ierr);
if (flag) {
PetscViewer viewer;
ierr = PetscViewerASCIIGetStdout(PetscObjectComm((PetscObject)matp),&viewer);CHKERRQ(ierr);
ierr = MatPartitioningView(matp,viewer);CHKERRQ(ierr);
ierr = ISView(*partitioning,viewer);CHKERRQ(ierr);
}
PetscFunctionReturn(0);
}
示例9: PetscSSEIsEnabled
PetscErrorCode PetscSSEIsEnabled(MPI_Comm comm,PetscBool *lflag,PetscBool *gflag)
{
PetscErrorCode ierr;
PetscBool disabled_option;
PetscFunctionBegin;
if (petsc_sse_local_is_untested && petsc_sse_global_is_untested) {
disabled_option = PETSC_FALSE;
ierr = PetscOptionsGetBool(NULL,"-disable_sse",&disabled_option,NULL);CHKERRQ(ierr);
if (disabled_option) {
petsc_sse_local_is_untested = PETSC_FALSE;
petsc_sse_enabled_local = PETSC_FALSE;
petsc_sse_global_is_untested = PETSC_FALSE;
petsc_sse_enabled_global = PETSC_FALSE;
}
if (petsc_sse_local_is_untested) {
ierr = PetscSSEHardwareTest(&petsc_sse_enabled_local);CHKERRQ(ierr);
if (petsc_sse_enabled_local) {
ierr = PetscSSEOSEnabledTest(&petsc_sse_enabled_local);CHKERRQ(ierr);
}
petsc_sse_local_is_untested = PETSC_FALSE;
}
if (gflag && petsc_sse_global_is_untested) {
ierr = MPI_Allreduce(&petsc_sse_enabled_local,&petsc_sse_enabled_global,1,MPIU_BOOL,MPI_LAND,comm);CHKERRQ(ierr);
petsc_sse_global_is_untested = PETSC_FALSE;
}
}
if (lflag) *lflag = petsc_sse_enabled_local;
if (gflag) *gflag = petsc_sse_enabled_global;
PetscFunctionReturn(0);
}
示例10: natural
/*@C
MatGetColoring - Gets a coloring for a matrix, from its sparsity structure,
to reduce the number of function evaluations needed to compute a sparse Jacobian via differencing.
Collective on Mat
Input Parameters:
. mat - the matrix
. type - type of coloring, one of the following:
$ MATCOLORINGNATURAL - natural (one color for each column, very slow)
$ MATCOLORINGSL - smallest-last
$ MATCOLORINGLF - largest-first
$ MATCOLORINGID - incidence-degree
Output Parameters:
. iscoloring - the coloring
Options Database Keys:
To specify the coloring through the options database, use one of
the following
$ -mat_coloring_type natural, -mat_coloring_type sl, -mat_coloring_type lf,
$ -mat_coloring_type id
To see the coloring use
$ -mat_coloring_view
Level: intermediate
Notes:
$ A graph coloring C(A) is a division of vertices so that two vertices of the same color do not share any common edges.
$ A suitable coloring for a smoother is simply C(A).
$ A suitable coloring for efficient Jacobian computation is a division of the columns so that two columns of the same color do not share any common rows.
$ This corresponds to C(A^{T} A). This is what MatGetColoring() computes.
The user can define additional colorings; see MatColoringRegisterDynamic().
For parallel matrices currently converts to sequential matrix and uses the sequential coloring
on that.
The colorings SL, LF, and ID are obtained via the Minpack software that was
converted to C using f2c.
For BAIJ matrices this colors the blocks. The true number of colors would be block size times the number of colors
returned here.
References:
$ Thomas F. Coleman and Jorge J. More, Estimation of Sparse {J}acobian Matrices and Graph Coloring Problems,
$ SIAM Journal on Numerical Analysis, 1983, pages 187-209, volume 20
$ Jorge J. Mor\'{e} and Danny C. Sorenson and Burton S. Garbow and Kenneth E. Hillstrom, The {MINPACK} Project,
$ Sources and Development of Mathematical Software, Wayne R. Cowell editor, 1984, pages 88-111
.keywords: matrix, get, coloring
.seealso: MatGetColoringTypeFromOptions(), MatColoringRegisterDynamic(), MatFDColoringCreate(),
SNESDefaultComputeJacobianColor()
@*/
PetscErrorCode MatGetColoring(Mat mat,MatColoringType type,ISColoring *iscoloring)
{
PetscBool flag;
PetscErrorCode ierr,(*r)(Mat,MatColoringType,ISColoring *);
char tname[PETSC_MAX_PATH_LEN];
MPI_Comm comm;
PetscFunctionBegin;
PetscValidHeaderSpecific(mat,MAT_CLASSID,1);
PetscValidPointer(iscoloring,3);
if (!mat->assembled) SETERRQ(((PetscObject)mat)->comm,PETSC_ERR_ARG_WRONGSTATE,"Not for unassembled matrix");
if (mat->factortype) SETERRQ(((PetscObject)mat)->comm,PETSC_ERR_ARG_WRONGSTATE,"Not for factored matrix");
/* look for type on command line */
if (!MatColoringRegisterAllCalled) {ierr = MatColoringRegisterAll(PETSC_NULL);CHKERRQ(ierr);}
ierr = PetscOptionsGetString(((PetscObject)mat)->prefix,"-mat_coloring_type",tname,256,&flag);CHKERRQ(ierr);
if (flag) { type = tname; }
ierr = PetscObjectGetComm((PetscObject)mat,&comm);CHKERRQ(ierr);
ierr = PetscFunctionListFind(comm,MatColoringList,type,PETSC_TRUE,(void (**)(void)) &r);CHKERRQ(ierr);
if (!r) SETERRQ1(((PetscObject)mat)->comm,PETSC_ERR_ARG_OUTOFRANGE,"Unknown or unregistered type: %s",type);
ierr = PetscLogEventBegin(MAT_GetColoring,mat,0,0,0);CHKERRQ(ierr);
ierr = (*r)(mat,type,iscoloring);CHKERRQ(ierr);
ierr = PetscLogEventEnd(MAT_GetColoring,mat,0,0,0);CHKERRQ(ierr);
ierr = PetscInfo1(mat,"Number of colors %d\n",(*iscoloring)->n);CHKERRQ(ierr);
flag = PETSC_FALSE;
ierr = PetscOptionsGetBool(PETSC_NULL,"-mat_coloring_view",&flag,PETSC_NULL);CHKERRQ(ierr);
if (flag) {
PetscViewer viewer;
ierr = PetscViewerASCIIGetStdout((*iscoloring)->comm,&viewer);CHKERRQ(ierr);
ierr = ISColoringView(*iscoloring,viewer);CHKERRQ(ierr);
}
PetscFunctionReturn(0);
}
示例11: PetscSplitReductionCreate
/*
PetscSplitReductionCreate - Creates a data structure to contain the queued information.
*/
static PetscErrorCode PetscSplitReductionCreate(MPI_Comm comm,PetscSplitReduction **sr)
{
PetscErrorCode ierr;
PetscFunctionBegin;
ierr = PetscNew(sr);CHKERRQ(ierr);
(*sr)->numopsbegin = 0;
(*sr)->numopsend = 0;
(*sr)->state = STATE_BEGIN;
(*sr)->maxops = 32;
ierr = PetscMalloc1(2*32,&(*sr)->lvalues);CHKERRQ(ierr);
ierr = PetscMalloc1(2*32,&(*sr)->gvalues);CHKERRQ(ierr);
ierr = PetscMalloc1(32,&(*sr)->invecs);CHKERRQ(ierr);
(*sr)->comm = comm;
(*sr)->request = MPI_REQUEST_NULL;
ierr = PetscMalloc1(32,&(*sr)->reducetype);CHKERRQ(ierr);
(*sr)->async = PETSC_FALSE;
#if defined(PETSC_HAVE_MPI_IALLREDUCE) || defined(PETSC_HAVE_MPIX_IALLREDUCE)
(*sr)->async = PETSC_TRUE; /* Enable by default */
#endif
/* always check for option; so that tests that run on systems without support don't warn about unhandled options */
ierr = PetscOptionsGetBool(NULL,NULL,"-splitreduction_async",&(*sr)->async,NULL);CHKERRQ(ierr);
PetscFunctionReturn(0);
}
示例12: GetParams
PetscErrorCode GetParams(AppCtx *user)
{
PetscErrorCode ierr;
PetscBool flg;
PetscFunctionBeginUser;
/* Set default parameters */
user->tsmonitor = PETSC_FALSE;
user->xmin = 0.0; user->xmax = 1.0;
user->ymin = 0.0; user->ymax = 1.0;
user->T = 0.0002; user->dt = 0.0001;
user->gamma = 3.2E-4; user->theta_c = 0;
ierr = PetscOptionsGetBool(NULL,"-ts_monitor",&user->tsmonitor,NULL);CHKERRQ(ierr);
ierr = PetscOptionsGetReal(NULL,"-xmin",&user->xmin,&flg);CHKERRQ(ierr);
ierr = PetscOptionsGetReal(NULL,"-xmax",&user->xmax,&flg);CHKERRQ(ierr);
ierr = PetscOptionsGetReal(NULL,"-ymin",&user->ymin,&flg);CHKERRQ(ierr);
ierr = PetscOptionsGetReal(NULL,"-ymax",&user->ymax,&flg);CHKERRQ(ierr);
ierr = PetscOptionsGetReal(NULL,"-T",&user->T,&flg);CHKERRQ(ierr);
ierr = PetscOptionsGetReal(NULL,"-dt",&user->dt,&flg);CHKERRQ(ierr);
ierr = PetscOptionsGetScalar(NULL,"-gamma",&user->gamma,&flg);CHKERRQ(ierr);
ierr = PetscOptionsGetScalar(NULL,"-theta_c",&user->theta_c,&flg);CHKERRQ(ierr);
PetscFunctionReturn(0);
}
示例13: AOView
/*@C
AOCreate - Creates an application ordering.
Collective on MPI_Comm
Input Parameters:
. comm - MPI communicator that is to share AO
Output Parameter:
. ao - the new application ordering
Options Database Key:
+ -ao_type <aotype> - create ao with particular format
- -ao_view - call AOView() at the conclusion of AOCreate()
Level: beginner
.keywords: AO, create
.seealso: AOSetIS(), AODestroy(), AOPetscToApplication(), AOApplicationToPetsc()
@*/
PetscErrorCode AOCreate(MPI_Comm comm,AO *ao)
{
PetscErrorCode ierr;
AO aonew;
PetscBool opt;
PetscFunctionBegin;
PetscValidPointer(ao,2);
*ao = PETSC_NULL;
#ifndef PETSC_USE_DYNAMIC_LIBRARIES
ierr = AOInitializePackage(PETSC_NULL);CHKERRQ(ierr);
#endif
ierr = PetscHeaderCreate(aonew,_p_AO,struct _AOOps,AO_CLASSID,-1,"AO","Application Ordering","AO",comm,AODestroy,AOView);CHKERRQ(ierr);
ierr = PetscMemzero(aonew->ops, sizeof(struct _AOOps));CHKERRQ(ierr);
*ao = aonew;
opt = PETSC_FALSE;
ierr = PetscOptionsGetBool(PETSC_NULL, "-ao_view", &opt,PETSC_NULL);CHKERRQ(ierr);
if (opt) {
ierr = AOView(aonew, PETSC_VIEWER_STDOUT_WORLD);CHKERRQ(ierr);
}
PetscFunctionReturn(0);
}
示例14: main
int main(int argc, char* argv[])
{
int status = 0;
#ifdef CH_USE_PETSC
PetscInt nlev;
PetscErrorCode ierr;
char string[64];
PetscBool set;
PetscInitialize(&argc,&argv,(char*)0,help);
PetscOptionsGetInt(PETSC_NULL,"-n",&s_nCells0,PETSC_NULL);
PetscOptionsGetBool(PETSC_NULL,"-bc_debug",&s_debug,PETSC_NULL);
PetscOptionsGetBool(PETSC_NULL,"-plot_fas",&s_amrfas,PETSC_NULL);
PetscOptionsGetBool(PETSC_NULL,"-plot_mg",&s_amrmg,PETSC_NULL);
PetscOptionsGetBool(PETSC_NULL,"-corner_stencil",&s_corner_stencil,PETSC_NULL);
PetscOptionsGetBool(PETSC_NULL,"-matlab",&s_matlab,PETSC_NULL);
PetscOptionsGetBool(PETSC_NULL,"-plot",&s_plot,PETSC_NULL);
PetscOptionsGetReal(PETSC_NULL,"-error_thresh",&s_error_thresh,PETSC_NULL);
PetscOptionsGetInt(PETSC_NULL,"-blocking_factor",&s_blockingfactor,PETSC_NULL);
PetscOptionsGetInt(PETSC_NULL,"-order",&s_order,PETSC_NULL);
PetscOptionsGetInt(PETSC_NULL,"-nesting",&s_nesting,PETSC_NULL);
PetscOptionsGetInt(PETSC_NULL,"-max_box_size",&s_maxboxsz,PETSC_NULL);
PetscOptionsGetInt(PETSC_NULL,"-refinement_ratio",&s_refRatio,PETSC_NULL);
PetscOptionsGetString(PETSC_NULL,"-amr_type",string,64,&set);
if (set && strcmp(string,"error")==0) s_amr_type_iserror = true;
else s_amr_type_iserror = false;
nlev = 4;
PetscOptionsGetInt(PETSC_NULL,"-nlevels",&nlev,PETSC_NULL);
ierr = go(nlev,status); CHKERRQ(ierr);
CH_TIMER_REPORT();
ierr = PetscFinalize(); CHKERRQ(ierr);
#endif
return status;
}
示例15: main
int main(int argc,char **argv)
{
PetscErrorCode ierr; /* used to check for functions returning nonzeros */
PetscReal zero=0.0;
Vec x; /* solution vector */
Mat H;
Tao tao; /* Tao solver context */
PetscBool flg, test_lmvm = PETSC_FALSE;
PetscMPIInt size,rank; /* number of processes running */
AppCtx user; /* user-defined application context */
TaoConvergedReason reason;
PetscInt its, recycled_its=0, oneshot_its=0;
/* Initialize TAO and PETSc */
ierr = PetscInitialize(&argc,&argv,(char*)0,help);if (ierr) return ierr;
ierr = MPI_Comm_size(PETSC_COMM_WORLD,&size);CHKERRQ(ierr);
ierr = MPI_Comm_rank(PETSC_COMM_WORLD,&rank);CHKERRQ(ierr);
if (size >1) SETERRQ(PETSC_COMM_SELF,1,"Incorrect number of processors");
/* Initialize problem parameters */
user.n = 2; user.alpha = 99.0; user.chained = PETSC_FALSE;
/* Check for command line arguments to override defaults */
ierr = PetscOptionsGetInt(NULL,NULL,"-n",&user.n,&flg);CHKERRQ(ierr);
ierr = PetscOptionsGetReal(NULL,NULL,"-alpha",&user.alpha,&flg);CHKERRQ(ierr);
ierr = PetscOptionsGetBool(NULL,NULL,"-chained",&user.chained,&flg);CHKERRQ(ierr);
ierr = PetscOptionsGetBool(NULL,NULL,"-test_lmvm",&test_lmvm,&flg);CHKERRQ(ierr);
/* Allocate vectors for the solution and gradient */
ierr = VecCreateSeq(PETSC_COMM_SELF,user.n,&x);CHKERRQ(ierr);
ierr = MatCreateSeqBAIJ(PETSC_COMM_SELF,2,user.n,user.n,1,NULL,&H);CHKERRQ(ierr);
/* The TAO code begins here */
/* Create TAO solver with desired solution method */
ierr = TaoCreate(PETSC_COMM_SELF,&tao);CHKERRQ(ierr);
ierr = TaoSetType(tao,TAOLMVM);CHKERRQ(ierr);
/* Set solution vec and an initial guess */
ierr = VecSet(x, zero);CHKERRQ(ierr);
ierr = TaoSetInitialVector(tao,x);CHKERRQ(ierr);
/* Set routines for function, gradient, hessian evaluation */
ierr = TaoSetObjectiveAndGradientRoutine(tao,FormFunctionGradient,&user);CHKERRQ(ierr);
ierr = TaoSetHessianRoutine(tao,H,H,FormHessian,&user);CHKERRQ(ierr);
/* Check for TAO command line options */
ierr = TaoSetFromOptions(tao);CHKERRQ(ierr);
/* Solve the problem */
ierr = TaoSetTolerances(tao, 1.e-5, 0.0, 0.0);CHKERRQ(ierr);
ierr = TaoSetMaximumIterations(tao, 5);CHKERRQ(ierr);
ierr = TaoLMVMRecycle(tao, PETSC_TRUE);CHKERRQ(ierr);
reason = TAO_CONTINUE_ITERATING;
while (reason != TAO_CONVERGED_GATOL) {
ierr = TaoSolve(tao);CHKERRQ(ierr);
ierr = TaoGetConvergedReason(tao, &reason);CHKERRQ(ierr);
ierr = TaoGetIterationNumber(tao, &its);CHKERRQ(ierr);
recycled_its += its;
ierr = PetscPrintf(PETSC_COMM_SELF, "-----------------------\n");CHKERRQ(ierr);
}
/* Disable recycling and solve again! */
ierr = TaoSetMaximumIterations(tao, 100);CHKERRQ(ierr);
ierr = TaoLMVMRecycle(tao, PETSC_FALSE);CHKERRQ(ierr);
ierr = VecSet(x, zero);CHKERRQ(ierr);
ierr = TaoSolve(tao);CHKERRQ(ierr);
ierr = TaoGetConvergedReason(tao, &reason);CHKERRQ(ierr);
if (reason != TAO_CONVERGED_GATOL) SETERRQ(PETSC_COMM_SELF, PETSC_ERR_NOT_CONVERGED, "Solution failed to converge!");
ierr = TaoGetIterationNumber(tao, &oneshot_its);CHKERRQ(ierr);
ierr = PetscPrintf(PETSC_COMM_SELF, "-----------------------\n");CHKERRQ(ierr);
ierr = PetscPrintf(PETSC_COMM_SELF, "recycled its: %D | oneshot its: %D\n", recycled_its, oneshot_its);CHKERRQ(ierr);
if (recycled_its != oneshot_its) SETERRQ(PETSC_COMM_SELF, PETSC_ERR_NOT_CONVERGED, "LMVM recycling does not work!");
ierr = TaoDestroy(&tao);CHKERRQ(ierr);
ierr = VecDestroy(&x);CHKERRQ(ierr);
ierr = MatDestroy(&H);CHKERRQ(ierr);
ierr = PetscFinalize();
return ierr;
}