00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef INC_FINLEY_ELEMENTFILE
00016 #define INC_FINLEY_ELEMENTFILE
00017
00018 #include "Finley.h"
00019 #include "NodeFile.h"
00020 #include "ReferenceElements.h"
00021 #include "escript/DataC.h"
00022
00023 #ifdef PASO_MPI
00024 #include "paso/Paso_MPI.h"
00025 #endif
00026
00027 struct Finley_ElementFile_Jacobeans {
00028 Finley_Status_t status;
00029 dim_t numDim;
00030 Finley_RefElement* ReferenceElement;
00031 double* volume;
00032 double* DSDX;
00033 };
00034
00035 typedef struct Finley_ElementFile_Jacobeans Finley_ElementFile_Jacobeans;
00036
00037 struct Finley_ElementFile {
00038 Paso_MPIInfo *MPIInfo;
00039 Paso_MPI_rank *Owner;
00040
00041 Finley_RefElement* ReferenceElement;
00042 Finley_RefElement* ReferenceElementReducedOrder;
00043 Finley_RefElement* LinearReferenceElement;
00044 Finley_RefElement* LinearReferenceElementReducedOrder;
00045
00046
00047 dim_t numElements;
00048
00049 index_t *Id;
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059 index_t *Tag;
00060
00061
00062 index_t *tagsInUse;
00063 dim_t numTagsInUse;
00064
00065
00066 dim_t numNodes;
00067 index_t *Nodes;
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077 index_t minColor;
00078 index_t maxColor;
00079 index_t *Color;
00080
00081
00082
00083 index_t order;
00084 index_t reduced_order;
00085
00086 Finley_ElementFile_Jacobeans* jacobeans;
00087 Finley_ElementFile_Jacobeans* jacobeans_reducedS;
00088 Finley_ElementFile_Jacobeans* jacobeans_reducedQ;
00089 Finley_ElementFile_Jacobeans* jacobeans_reducedS_reducedQ;
00090
00091 };
00092
00093 typedef struct Finley_ElementFile Finley_ElementFile;
00094 Finley_ElementFile* Finley_ElementFile_alloc( ElementTypeId, index_t, index_t, Paso_MPIInfo* );
00095 void Finley_ElementFile_free(Finley_ElementFile*);
00096 void Finley_ElementFile_allocTable(Finley_ElementFile*,dim_t);
00097 void Finley_ElementFile_freeTable(Finley_ElementFile*);
00098 void Finley_ElementFile_setElementDistribution(Finley_ElementFile* in, dim_t* distribution);
00099 dim_t Finley_ElementFile_getGlobalNumElements(Finley_ElementFile* in);
00100 dim_t Finley_ElementFile_getMyNumElements(Finley_ElementFile* in);
00101 index_t Finley_ElementFile_getFirstElement(Finley_ElementFile* in);
00102 void Finley_ElementFile_distributeByRankOfDOF(Finley_ElementFile* self, Paso_MPI_rank* mpiRankOfDOF, index_t *Id);
00103
00104 void Finley_ElementFile_createColoring(Finley_ElementFile* in,dim_t numNodes,dim_t* degreeOfFreedom);
00105 void Finley_ElementFile_optimizeOrdering(Finley_ElementFile** in);
00106 void Finley_ElementFile_setNodeRange(dim_t*,dim_t*,Finley_ElementFile*);
00107 void Finley_ElementFile_relableNodes(dim_t*,dim_t,Finley_ElementFile*);
00108 void Finley_ElementFile_markNodes(dim_t*,dim_t,dim_t,Finley_ElementFile*,dim_t);
00109 void Finley_ElementFile_scatter(dim_t*,Finley_ElementFile*,Finley_ElementFile*);
00110 void Finley_ElementFile_gather(dim_t*,Finley_ElementFile*,Finley_ElementFile*);
00111 void Finley_ElementFile_copyTable(dim_t,Finley_ElementFile*,dim_t,dim_t,Finley_ElementFile*);
00112 void Finley_ElementFile_markDOFsConnectedToRange(index_t* mask,index_t offset,index_t marker,index_t firstDOF,index_t lastDOF,index_t *dofIndex,Finley_ElementFile*in ,bool_t useLinear);
00113
00114 void Finley_ElementFile_setTags(Finley_ElementFile*,const int,escriptDataC*);
00115 Finley_ElementFile_Jacobeans* Finley_ElementFile_Jacobeans_alloc(Finley_RefElement*);
00116 void Finley_ElementFile_Jacobeans_dealloc(Finley_ElementFile_Jacobeans*);
00117 Finley_ElementFile_Jacobeans* Finley_ElementFile_borrowJacobeans(Finley_ElementFile*, Finley_NodeFile*, bool_t, bool_t);
00118 void Finley_ElementFile_setTagsInUse(Finley_ElementFile* in);
00119
00120
00121 #endif
00122