00001 #include <stdlib.h>
00002 #include <stdio.h>
00003 #include "syspro.h"
00004 #include "sysprotransform.h"
00005 #include "syspro_impl.h"
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041 #undef __FUNCT__
00042 #define __FUNCT__ "PreprocessorsOptionsHandling"
00043
00044
00045
00046 PetscErrorCode PreprocessorsOptionsHandling()
00047 {
00048 SystemPreprocessor pp; char *preprocess;
00049 #define TYPELEN 200
00050 char type[TYPELEN],values[TYPELEN],option[100];
00051 PetscTruth exhaustive,flg; PetscErrorCode ierr;
00052
00053 PetscFunctionBegin;
00054
00055 ierr = PetscOptionsHasName
00056 (PETSC_NULL,"-syspro_exhaustive",&exhaustive); CHKERRQ(ierr);
00057
00058
00059 ierr = GetFirstPreprocessor(&preprocess); CHKERRQ(ierr);
00060 while (preprocess) {
00061 SalsaTransform transform;
00062 ierr = SystemPreprocessorGetByName(preprocess,&pp); CHKERRQ(ierr);
00063 ierr = TransformGetByName(preprocess,&transform); CHKERRQ(ierr)
00064 sprintf(option,"-syspro_%s",preprocess);
00065 ierr = PetscOptionsGetString
00066 (PETSC_NULL,option,type,TYPELEN,&flg); CHKERRQ(ierr);
00067 if (flg) {
00068 int n;
00069
00070 ierr = PetscStrcmp(type,"exhaustive",&flg); CHKERRQ(ierr);
00071 if (flg) {
00072 pp->exhaustive = PETSC_TRUE;
00073 ierr = TransformSetUserChoices(transform,PETSC_FALSE); CHKERRQ(ierr);
00074 } else {
00075 ierr = TransformSetUserChoices(transform,PETSC_TRUE); CHKERRQ(ierr);
00076 ierr = TransformObjectsUseOnly(transform,type); CHKERRQ(ierr);
00077 ierr = TransformGetNUnmarked(transform,&n); CHKERRQ(ierr);
00078 pp->exhaustive = TRUTH(n>1);
00079 }
00080 } else {
00081 pp->exhaustive = exhaustive;
00082 ierr = TransformSetUserChoices(transform,PETSC_FALSE); CHKERRQ(ierr);
00083 }
00084 {
00085 SalsaTransformObject to;
00086 ierr = TransformGetNextUnmarkedItem
00087 (transform,NULL,&to,&flg); CHKERRQ(ierr);
00088 while (flg) {
00089 char *name;
00090 ierr = TransformObjectGetName(to,&name); CHKERRQ(ierr);
00091 sprintf(option,"-syspro_%s_%s_values",preprocess,name); CHKERRQ(ierr);
00092 ierr = PetscOptionsGetString
00093 (PETSC_NULL,option,values,TYPELEN,&flg); CHKERRQ(ierr);
00094 if (flg) {
00095 printf("syspro option values: <%s:%s>=<%s>\n",preprocess,name,values);
00096 ierr = TransformItemOptionsUseOnly(to,values); CHKERRQ(ierr);
00097 pp->exhaustive = PETSC_TRUE;
00098 }
00099 ierr = TransformGetNextUnmarkedItem
00100 (transform,name,&to,&flg); CHKERRQ(ierr);
00101 }
00102 }
00103 if (pp->optionshandling) {
00104 ierr = (pp->optionshandling)(); CHKERRQ(ierr);
00105 }
00106 ierr = PreprocessorSaveAprioriSelection(pp); CHKERRQ(ierr);
00107 ierr = ReportEnabledPreprocessors(preprocess); CHKERRQ(ierr);
00108 ierr = GetNextPreprocessor(&preprocess); CHKERRQ(ierr);
00109 }
00110 PetscFunctionReturn(0);
00111 }
00112