00001
00002
00003
00004
00005
00006
00007 #ifndef MODULE_FUNCTIONS_H
00008 #define MODULE_FUNCTIONS_H
00009
00010 #define ANAMOD_FORMAT_VERSION "1.0"
00011
00012 #include "petscmat.h"
00013 #include "anamodtypes.h"
00014
00015 #define TRUTH(x) ( (x) ? PETSC_TRUE : PETSC_FALSE )
00016 #define HASTOEXIST(h) \
00017 if (!h) { \
00018 printf("ERROR asking for unknown module\n"); \
00019 PetscFunctionReturn(1); \
00020 }
00021 #define ANAMODCHECKVALID(i,c,s) {if (!i) SETERRQ(1,"Null pointer"); if (i->cookie!=c) SETERRQ1(1,"Not a valid <%s>",s);}
00022
00023
00024
00025
00026 extern PetscErrorCode AnaModInitialize();
00027 extern PetscErrorCode AnaModFinalize();
00028 extern PetscErrorCode AnaModFinalize();
00029 extern PetscErrorCode AnaModGetTypeName(int id,char **name);
00030 extern PetscErrorCode AnaModGetTypeMySQLName(int id,char **name);
00031
00032
00033
00034
00035 extern PetscErrorCode AnaModRegisterStandardModules();
00036 extern PetscErrorCode RegisterModule
00037 (const char*,const char*,AnalysisDataType,
00038 PetscErrorCode(*f)(AnaModNumericalProblem,AnalysisItem*,int*,PetscTruth*));
00039 extern PetscErrorCode DeRegisterCategory(char *cat);
00040 extern PetscErrorCode DeregisterModules(void);
00041 extern PetscErrorCode GetCategories(char***,int*);
00042 extern PetscErrorCode CategoryGetModules(char*,char***,AnalysisDataType**,int**,int*);
00043 extern PetscErrorCode HasComputeCategory(char *cat,PetscTruth *f);
00044 extern PetscErrorCode HasComputeModule(char *cat,char *cmp,PetscTruth *f);
00045
00046
00047
00048
00049 extern PetscErrorCode GetDataID(const char*,const char*,int*,PetscTruth*);
00050 extern PetscErrorCode GetDataType(const char*,const char*,AnalysisDataType*);
00051 extern PetscErrorCode ComputeQuantity
00052 (AnaModNumericalProblem,const char*,const char*,AnalysisItem*,int*,PetscTruth*);
00053 extern PetscErrorCode ComputeQuantityByID
00054 (AnaModNumericalProblem,int,int,AnalysisItem*,int*,PetscTruth*);
00055 extern PetscErrorCode HasQuantity
00056 (AnaModNumericalProblem,char*,char*,PetscTruth*);
00057 extern PetscErrorCode HasQuantityByID
00058 (AnaModNumericalProblem,int,AnalysisDataType,PetscTruth*);
00059 extern PetscErrorCode RetrieveQuantity
00060 (AnaModNumericalProblem,char*,char*,AnalysisItem*,PetscTruth*);
00061 extern PetscErrorCode RetrieveQuantityByID
00062 (AnaModNumericalProblem,int,int,AnalysisItem*,PetscTruth*);
00063 extern PetscErrorCode QuantityAsString(AnalysisItem*,AnalysisDataType,char**);
00064
00065
00066
00067
00068 extern PetscErrorCode AnaModOptionsHandling(void);
00069 extern PetscErrorCode AnaModShowOptions(MPI_Comm);
00070 extern PetscErrorCode DeclareCategoryOptionFunction
00071 (char *cat,PetscErrorCode(*f)(char*));
00072 extern PetscErrorCode GetCategoryOptionFunction
00073 (char *cat,PetscErrorCode(**f)(char*));
00074 extern PetscErrorCode AnaModHasForcedSequentialComputation(PetscTruth*);
00075 extern PetscErrorCode AnaModHasForcedExpensiveComputation(PetscTruth*);
00076 extern PetscErrorCode AnaModGetSequentialMatrix
00077 (Mat A,Mat *Awork,PetscTruth *mem,PetscTruth *local,PetscTruth *global);
00078
00079
00080
00081
00082 extern PetscErrorCode AnaModDeclareTraceFunction(PetscErrorCode(*)(void*,char*,va_list));
00083 extern PetscErrorCode AnaModDeclareTraceContext(void*);
00084 extern PetscErrorCode AnaModTraceMessage(const char *fmt,...);
00085 extern PetscErrorCode AnaModHasTrace(PetscTruth *flg);
00086 extern PetscErrorCode AnaModSetTraceArrays(PetscTruth f);
00087 extern PetscErrorCode AnaModTraceArrays(PetscTruth *f);
00088 #if defined(HAVE_NMD)
00089 extern PetscErrorCode TabReportModules(char**,int);
00090 extern PetscErrorCode TabReportValues(NMD_metadata,char**,char**,int);
00091 #else
00092 extern PetscErrorCode TabReportModules(Mat,char**,char**,int);
00093 #endif
00094 extern PetscErrorCode PurgeAttachedArrays(Mat A);
00095
00096
00097
00098
00099 typedef struct FeatureSet_* FeatureSet;
00100 typedef struct FeatureValues_* FeatureValues;
00101 extern PetscErrorCode NewFeatureSet(FeatureSet*);
00102 extern PetscErrorCode DeleteFeatureSet(FeatureSet);
00103 extern PetscErrorCode AddToFeatureSet(FeatureSet,char*,char*,int*);
00104 extern PetscErrorCode NewFeatureValues(FeatureValues*);
00105 extern PetscErrorCode DeleteFeatureValues(FeatureValues);
00106 extern PetscErrorCode InstantiateFeatureSet
00107 (AnaModNumericalProblem,FeatureSet,FeatureValues);
00108 extern PetscErrorCode GetFeatureValue
00109 (FeatureValues,int,AnalysisItem*,PetscTruth*);
00110 extern PetscErrorCode AnaModSetRetrievalFunction
00111 (PetscErrorCode(*)(void*,char*,char*,AnalysisItem*,AnalysisDataType*,PetscTruth*));
00112 extern PetscErrorCode AnaModGetRetrievalFunction
00113 (PetscErrorCode(**)(void*,char*,char*,AnalysisItem*,AnalysisDataType*,PetscTruth*),PetscTruth*);
00114
00115
00116
00117
00118 extern PetscErrorCode CreateIntArray(const char*,int,IntArray*);
00119 extern PetscErrorCode DeleteIntArray(IntArray);
00120 extern PetscErrorCode IntArrayAdd(IntArray,int,int*);
00121 extern PetscErrorCode IntArraySetAt(IntArray,int,int);
00122 extern PetscErrorCode IntArrayTryGetAt(IntArray,int,int*,PetscTruth*);
00123 extern PetscErrorCode IntArrayGetAt(IntArray,int,int*);
00124 extern PetscErrorCode IntArrayGetFill(IntArray,int*);
00125
00126 extern PetscErrorCode CreateStringArray(const char*,int,StringArray*);
00127 extern PetscErrorCode DeleteStringArray(StringArray);
00128 extern PetscErrorCode StringArrayAdd(StringArray,char*,int*);
00129 extern PetscErrorCode StringArraySetAt(StringArray,int,char*);
00130 extern PetscErrorCode StringArrayTryGetAt(StringArray,int,char**,PetscTruth*);
00131 extern PetscErrorCode StringArrayGetAt(StringArray,int,char**);
00132 extern PetscErrorCode StringArrayGetFill(StringArray,int*);
00133
00134 extern PetscErrorCode CreateAnalysisItemArray(char*,int,AnalysisItemArray*);
00135 extern PetscErrorCode DeleteAnalysisItemArray(AnalysisItemArray);
00136 extern PetscErrorCode AnalysisItemArrayAdd(AnalysisItemArray,AnalysisItem,int*);
00137 extern PetscErrorCode AnalysisItemArraySetAt(AnalysisItemArray,int,AnalysisItem);
00138 extern PetscErrorCode AnalysisItemArrayTryGetAt(AnalysisItemArray,int,AnalysisItem*,PetscTruth*);
00139 extern PetscErrorCode AnalysisItemArrayGetAt(AnalysisItemArray,int,AnalysisItem*);
00140
00141 extern PetscErrorCode CreateAnalysisDataTypeArray(char*,int,AnalysisDataTypeArray*);
00142 extern PetscErrorCode DeleteAnalysisDataTypeArray(AnalysisDataTypeArray);
00143 extern PetscErrorCode AnalysisDataTypeArrayAdd(AnalysisDataTypeArray,AnalysisDataType,int*);
00144 extern PetscErrorCode AnalysisDataTypeArraySetAt(AnalysisDataTypeArray,int,AnalysisDataType);
00145 extern PetscErrorCode AnalysisDataTypeArrayTryGetAt(AnalysisDataTypeArray,int,AnalysisDataType*,PetscTruth*);
00146 extern PetscErrorCode AnalysisDataTypeArrayGetAt(AnalysisDataTypeArray,int,AnalysisDataType*);
00147
00148
00149
00150
00151 extern PetscErrorCode CategoryLogEventRegister(char *cat,int icat);
00152
00153 #endif