ops - forgot the attachment. [attached now] Satish
On Fri, 13 Oct 2006, Satish Balay wrote: > I'm attaching a patch that can be applied to petsc-2.3.2 for this to > work. > > cd petsc-2.3.2-p3 > patch -Np1 < opt.patch > > Alternatively petsc-dev should have it > http://www-unix.mcs.anl.gov/petsc/petsc-as/developers/index.html > > Let us know if this works. > Satish > > On Mon, 18 Sep 2006, Barry Smith wrote: > > > > > Boyce, > > > > Satish is working on this right now. It is a problem that we > > never properly resolved in that past and it needs to be solved. > > Unfortunately we won't be able to get it into the current petsc release, > > it will have to go in petsc-dev. > > > > Thanks for reminding us of this problem, > > > > Barry > > > > > > On Mon, 18 Sep 2006, Boyce Griffith wrote: > > > > > Hi, Folks -- > > > > > > I have an application in which, for better or for worse, I generate a huge > > > number of sequential sparse AIJ matrices. I was wondering if it was > > > possible > > > to suppress the command line options affiliated with those objects. (I am > > > using MatCreateSeqAIJ, and I am not using MatSetFromOptions.) > > > > > > The basic issue is that when a user runs the program with the '-help' > > > flag, > > > the options associated with these matrices tend to overwhelm all of the > > > other > > > command line options, e.g., KSP settings. > > > > > > Thanks in advance for any suggestions, > > > > > > -- Boyce Griffith > > > > > > > > > > > > -------------- next part -------------- diff -r f5f14c217157875403b3b6ad5183d34fdf2a2a69 src/sys/objects/aoptions.c --- a/src/sys/objects/aoptions.c Tue Oct 10 11:01:54 2006 -0500 +++ b/src/sys/objects/aoptions.c Fri Oct 13 00:29:31 2006 -0500 @@ -33,14 +33,98 @@ struct _p_Options { PetscOptions next; }; +typedef struct _p_OptionsHelp* OptionsHelp; +struct _p_OptionsHelp { + char *prefix; + char *title; + char *mansec; + OptionsHelp next; +}; + static struct { PetscOptions next; char *prefix,*mprefix; char *title; MPI_Comm comm; - PetscTruth printhelp,changedmethod; + PetscTruth printhelp,changedmethod,alreadyprinted; + OptionsHelp help; } PetscOptionsObject; PetscInt PetscOptionsPublishCount = 0; + + +#undef __FUNCT__ +#define __FUNCT__ "PetscOptionsHelpAddList" +PetscErrorCode PetscOptionsHelpAddList(const char prefix[],const char title[],const char mansec[]) +{ + int ierr; + OptionsHelp newhelp; + PetscFunctionBegin; + ierr = PetscNew(struct _p_OptionsHelp,&newhelp);CHKERRQ(ierr); + ierr = PetscStrallocpy(prefix,&newhelp->prefix);CHKERRQ(ierr); + ierr = PetscStrallocpy(title,&newhelp->title);CHKERRQ(ierr); + ierr = PetscStrallocpy(mansec,&newhelp->mansec);CHKERRQ(ierr); + newhelp->next = 0; + + if (!PetscOptionsObject.help) { + PetscOptionsObject.help = newhelp; + } else { + newhelp->next = PetscOptionsObject.help; + PetscOptionsObject.help = newhelp; + } + PetscFunctionReturn(0); +} + +#undef __FUNCT__ +#define __FUNCT__ "PetscOptionsHelpDestroyList" +PetscErrorCode PetscOptionsHelpDestroyList(void) +{ + PetscErrorCode ierr; + OptionsHelp help = PetscOptionsObject.help, next; + + PetscFunctionBegin; + while (help) { + next = help->next; + ierr = PetscStrfree(help->prefix);CHKERRQ(ierr); + ierr = PetscStrfree(help->title);CHKERRQ(ierr); + ierr = PetscStrfree(help->mansec);CHKERRQ(ierr); + ierr = PetscFree(help);CHKERRQ(ierr); + help = next; + } + PetscFunctionReturn(0); +} + + +#undef __FUNCT__ +#define __FUNCT__ "PetscOptionsHelpFindList" +PetscErrorCode PetscOptionsHelpFindList(const char prefix[],const char title[],const char mansec[],PetscTruth *flg) +{ + PetscErrorCode ierr; + PetscTruth flg1,flg2,flg3; + PetscFunctionBegin; + OptionsHelp help = PetscOptionsObject.help; + while (help) { + ierr = PetscStrcmp(help->prefix,prefix,&flg1);CHKERRQ(ierr); + ierr = PetscStrcmp(help->title,title,&flg2);CHKERRQ(ierr); + ierr = PetscStrcmp(help->mansec,mansec,&flg3);CHKERRQ(ierr); + if (flg1 && flg2 && flg3) { + *flg = 1; + break; + } + help = help->next; + } + PetscFunctionReturn(0); + +} + +#undef __FUNCT__ +#define __FUNCT__ "PetscOptionsHelpCheckAddList" +PetscErrorCode PetscOptionsHelpCheckAddList(const char prefix[],const char title[],const char mansec[],PetscTruth *flg) +{ + PetscFunctionBegin; + PetscOptionsHelpFindList(prefix,title,mansec,flg); + if (!(*flg)) PetscOptionsHelpAddList(prefix,title,mansec); + PetscFunctionReturn(0); +} #undef __FUNCT__ #define __FUNCT__ "PetscOptionsBegin_Private" @@ -60,7 +144,10 @@ PetscErrorCode PetscOptionsBegin_Private ierr = PetscOptionsHasName(PETSC_NULL,"-help",&PetscOptionsObject.printhelp);CHKERRQ(ierr); if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1) { - ierr = (*PetscHelpPrintf)(comm,"%s -------------------------------------------------\n",title);CHKERRQ(ierr); + ierr = PetscOptionsHelpCheckAddList(prefix,title,mansec,&PetscOptionsObject.alreadyprinted); + if (!PetscOptionsObject.alreadyprinted) { + ierr = (*PetscHelpPrintf)(comm,"%s -------------------------------------------------\n",title);CHKERRQ(ierr); + } } PetscFunctionReturn(0); } @@ -82,6 +169,7 @@ static int PetscOptionsCreate_Private(co (*amsopt)->type = t; (*amsopt)->data = 0; (*amsopt)->edata = 0; + ierr = PetscStrallocpy(text,&(*amsopt)->text);CHKERRQ(ierr); ierr = PetscStrallocpy(opt,&(*amsopt)->option);CHKERRQ(ierr); ierr = PetscStrallocpy(man,&(*amsopt)->man);CHKERRQ(ierr); @@ -144,6 +232,8 @@ PetscErrorCode PetscOptionsEnd_Private(v /* reset counter to -2; this updates the screen with the new options for the selected method */ if (PetscOptionsObject.changedmethod) PetscOptionsPublishCount = -2; + /* reset alreadyprinted flag */ + PetscOptionsObject.alreadyprinted = PETSC_FALSE; while (PetscOptionsObject.next) { if (PetscOptionsObject.next->set) { @@ -469,7 +559,7 @@ PetscErrorCode PETSC_DLLEXPORT PetscOpti PetscFunctionBegin; ierr = PetscOptionsHasName(PetscOptionsObject.prefix,opt,flg);CHKERRQ(ierr); - if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1) { + if (PetscOptionsObject.printhelp && PetscOptionsPublishCount == 1 && !PetscOptionsObject.alreadyprinted) { ierr = (*PetscHelpPrintf)(PetscOptionsObject.comm," -%s%s: %s (%s)\n",PetscOptionsObject.prefix?PetscOptionsObject.prefix:"",opt+1,text,man);CHKERRQ(ierr); } PetscFunctionReturn(0); diff -r f5f14c217157875403b3b6ad5183d34fdf2a2a69 src/sys/objects/pinit.c --- a/src/sys/objects/pinit.c Tue Oct 10 11:01:54 2006 -0500 +++ b/src/sys/objects/pinit.c Fri Oct 13 00:24:06 2006 -0500 @@ -20,6 +20,7 @@ EXTERN PetscErrorCode PetscSequentialPha EXTERN PetscErrorCode PetscSequentialPhaseBegin_Private(MPI_Comm,int); EXTERN PetscErrorCode PetscSequentialPhaseEnd_Private(MPI_Comm,int); EXTERN PetscErrorCode PetscLogCloseHistoryFile(FILE **); +EXTERN PetscErrorCode PetscOptionsHelpDestroyList(void); /* this is used by the _, __, and ___ macros (see include/petscerror.h) */ PetscErrorCode __gierr = 0; @@ -622,6 +623,7 @@ PetscErrorCode PETSC_DLLEXPORT PetscFina PETSC_VIEWER_XXX_(). */ ierr = PetscObjectRegisterDestroyAll();CHKERRQ(ierr); + ierr = PetscOptionsHelpDestroyList();CHKERRQ(ierr); #if defined(PETSC_USE_DEBUG) if (PetscStackActive) { diff --git a/src/sys/objects/aoptions.c b/src/sys/objects/aoptions.c --- a/src/sys/objects/aoptions.c Fri Oct 13 14:52:55 2006 +++ b/src/sys/objects/aoptions.c Fri Oct 13 19:32:04 2006 @@ -107,7 +107,7 @@ ierr = PetscStrcmp(help->title,title,&flg2);CHKERRQ(ierr); ierr = PetscStrcmp(help->mansec,mansec,&flg3);CHKERRQ(ierr); if (flg1 && flg2 && flg3) { - *flg = 1; + *flg = PETSC_TRUE; break; } help = help->next;
