00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef INC_FINLEY_UTIL
00022 #define INC_FINLEY_UTIL
00023
00024 #include "Finley.h"
00025
00026
00027
00028 void Finley_Util_Gather_double(dim_t len,index_t* index,dim_t numData,double* in,double * out);
00029 void Finley_Util_Gather_int(dim_t len,index_t* index,dim_t numData,index_t* in,index_t * out);
00030 void Finley_Util_AddScatter(dim_t len,index_t* index,dim_t numData,double* in,double * out, index_t bound);
00031 void Finley_Util_SmallMatMult(dim_t A1,dim_t A2, double* A, dim_t B2, double*B, double* C);
00032 void Finley_Util_SmallMatSetMult(dim_t len,dim_t A1,dim_t A2, double* A, dim_t B2, double*B, double* C);
00033 void Finley_Util_InvertSmallMat(dim_t len,dim_t dim,double* A,double *invA, double* det);
00034 void Finley_Util_DetOfSmallMat(dim_t len,dim_t dim,double* A,double* det);
00035 void Finley_NormalVector(dim_t len, dim_t dim, dim_t dim1, double* A,double* Normal);
00036 void Finley_LengthOfNormalVector(dim_t len, dim_t dim, dim_t dim1, double* A,double* length);
00037 void Finley_Util_InvertMap(dim_t, index_t*,dim_t, index_t*);
00038 index_t Finley_Util_getMaxInt(dim_t dim,dim_t N,index_t* values);
00039 index_t Finley_Util_getMinInt(dim_t dim,dim_t N,index_t* values);
00040 index_t Finley_Util_getFlaggedMaxInt(dim_t dim,dim_t N,index_t* values,index_t ignore);
00041 index_t Finley_Util_getFlaggedMinInt(dim_t dim,dim_t N,index_t* values,index_t ignore);
00042 dim_t Finley_Util_packMask(dim_t N,bool_t* mask,index_t* index);
00043 bool_t Finley_Util_isAny(dim_t N,index_t* array,index_t value);
00044 index_t Finley_Util_cumsum(dim_t,index_t*);
00045 bool_t Finley_Util_anyNonZeroDouble(dim_t N,double* values);
00046 void Finley_Util_setValuesInUse(const index_t *values, const dim_t numValues, dim_t *numValuesInUse, index_t **valuesInUse, Paso_MPIInfo* mpiinfo);
00047
00048 #ifdef PASO_MPI
00049 void Finley_printDoubleArray( FILE *fid, dim_t n, double *array, char *name );
00050 void Finley_printIntArray( FILE *fid, dim_t n, int *array, char *name );
00051 void Finley_printMaskArray( FILE *fid, dim_t n, int *array, char *name );
00052 #endif
00053
00054
00055
00056
00057
00058
00059
00060 struct Finley_Util_ValueAndIndex {
00061 index_t index;
00062 index_t value;
00063 };
00064 typedef struct Finley_Util_ValueAndIndex Finley_Util_ValueAndIndex;
00065
00066 void Finley_Util_sortValueAndIndex(dim_t n,Finley_Util_ValueAndIndex* array);
00067 int Finley_Util_ValueAndIndex_compar(const void *, const void *);
00068
00069 #endif
00070