diff -r f5b374b08180 src/sys/objects/options.c --- a/src/sys/objects/options.c Mon Jul 23 12:27:02 2012 -0500 +++ b/src/sys/objects/options.c Mon Jul 23 23:04:37 2012 -0500 @@ -506,8 +506,9 @@ static PetscErrorCode PetscOptionsInsert PetscFunctionBegin; while (left) { - PetscBool isoptions_file,isprefixpush,isprefixpop,isp4,tisp4,isp4yourname,isp4rmrank,key; + PetscBool isoptions_file,isyaml_file,isprefixpush,isprefixpop,isp4,tisp4,isp4yourname,isp4rmrank,key; ierr = PetscStrcasecmp(eargs[0],"-options_file",&isoptions_file);CHKERRQ(ierr); + ierr = PetscStrcasecmp(eargs[0],"-yaml_file",&isyaml_file);CHKERRQ(ierr); ierr = PetscStrcasecmp(eargs[0],"-prefix_push",&isprefixpush);CHKERRQ(ierr); ierr = PetscStrcasecmp(eargs[0],"-prefix_pop",&isprefixpop);CHKERRQ(ierr); ierr = PetscStrcasecmp(eargs[0],"-p4pg",&isp4);CHKERRQ(ierr); @@ -527,6 +528,11 @@ static PetscErrorCode PetscOptionsInsert if (eargs[1][0] == '-') SETERRQ(PETSC_COMM_SELF,PETSC_ERR_USER,"Missing filename for -options_file filename option"); ierr = PetscOptionsInsertFile(PETSC_COMM_WORLD,eargs[1],PETSC_TRUE);CHKERRQ(ierr); eargs += 2; left -= 2; + } else if (isyaml_file) { + if (left <= 1) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_USER,"Missing filename for -yaml_file filename option"); + if (eargs[1][0] == '-') SETERRQ(PETSC_COMM_SELF,PETSC_ERR_USER,"Missing filename for -yaml_file filename option"); + ierr = PetscOptionsInsertFile_YAML(PETSC_COMM_WORLD,eargs[1],PETSC_TRUE);CHKERRQ(ierr); + eargs += 2; left -= 2; } else if (isprefixpush) { if (left <= 1) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_USER,"Missing prefix for -prefix_push option"); if (eargs[1][0] == '-') SETERRQ(PETSC_COMM_SELF,PETSC_ERR_USER,"Missing prefix for -prefix_push option (prefixes cannot start with '-')"); @@ -684,27 +690,40 @@ PetscErrorCode PetscOptionsView(PetscVi PetscErrorCode ierr; PetscInt i; PetscBool isascii; + PetscBool isstring; PetscFunctionBegin; if (!viewer) viewer = PETSC_VIEWER_STDOUT_WORLD; ierr = PetscObjectTypeCompare((PetscObject)viewer,PETSCVIEWERASCII,&isascii);CHKERRQ(ierr); - if (!isascii) SETERRQ(((PetscObject)viewer)->comm,PETSC_ERR_SUP,"Only supports ASCII viewer"); + ierr = PetscObjectTypeCompare((PetscObject)viewer,PETSCVIEWERSTRING,&isstring);CHKERRQ(ierr); + if (!isascii && !isstring) SETERRQ(((PetscObject)viewer)->comm,PETSC_ERR_SUP,"Only supports ASCII and file viewers"); + if (!options) {ierr = PetscOptionsInsert(0,0,0);CHKERRQ(ierr);} - if (options->N) { - ierr = PetscViewerASCIIPrintf(viewer,"#PETSc Option Table entries:\n");CHKERRQ(ierr); - } else { - ierr = PetscViewerASCIIPrintf(viewer,"#No PETSc Option Table entries\n");CHKERRQ(ierr); - } - for (i=0; iN; i++) { - if (options->values[i]) { - ierr = PetscViewerASCIIPrintf(viewer,"-%s %s\n",options->names[i],options->values[i]);CHKERRQ(ierr); + if (isascii) { + if (options->N) { + ierr = PetscViewerASCIIPrintf(viewer,"#PETSc Option Table entries:\n");CHKERRQ(ierr); } else { - ierr = PetscViewerASCIIPrintf(viewer,"-%s\n",options->names[i]);CHKERRQ(ierr); + ierr = PetscViewerASCIIPrintf(viewer,"#No PETSc Option Table entries\n");CHKERRQ(ierr); } - } - if (options->N) { - ierr = PetscViewerASCIIPrintf(viewer,"#End of PETSc Option Table entries\n");CHKERRQ(ierr); + for (i=0; iN; i++) { + if (options->values[i]) { + ierr = PetscViewerASCIIPrintf(viewer,"-%s %s\n",options->names[i],options->values[i]);CHKERRQ(ierr); + } else { + ierr = PetscViewerASCIIPrintf(viewer,"-%s\n",options->names[i]);CHKERRQ(ierr); + } + } + if (options->N) { + ierr = PetscViewerASCIIPrintf(viewer,"#End of PETSc Option Table entries\n");CHKERRQ(ierr); + } + } else if (isstring) { + for (i=0; iN; i++) { + if (options->values[i]) { + ierr = PetscViewerStringSPrintf(viewer,"-%s %s ",options->names[i],options->values[i]);CHKERRQ(ierr); + } else { + ierr = PetscViewerStringSPrintf(viewer,"-%s ",options->names[i]);CHKERRQ(ierr); + } + } } PetscFunctionReturn(0); }