00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef INC_FINLEY_NODEFILE
00016 #define INC_FINLEY_NODEFILE
00017
00018 #define MAX_numDim 3
00019
00020 #include "Finley.h"
00021 #include "NodeMapping.h"
00022 #include "escript/DataC.h"
00023 #include "paso/Distribution.h"
00024 #include "paso/Coupler.h"
00025
00026 struct Finley_NodeFile {
00027 Paso_MPIInfo *MPIInfo;
00028
00029 dim_t numNodes;
00030 dim_t numDim;
00031 index_t *Id;
00032 index_t *Tag;
00033 index_t *tagsInUse;
00034 dim_t numTagsInUse;
00035
00036 index_t* globalDegreesOfFreedom;
00037
00038
00039 double *Coordinates;
00040
00041 index_t *globalReducedDOFIndex;
00042
00043 index_t *globalReducedNodesIndex;
00044
00045 index_t *globalNodesIndex;
00046
00047
00048 Finley_NodeMapping *nodesMapping;
00049 Finley_NodeMapping *reducedNodesMapping;
00050 Finley_NodeMapping *degreesOfFreedomMapping;
00051 Finley_NodeMapping *reducedDegreesOfFreedomMapping;
00052
00053 Paso_Distribution *nodesDistribution;
00054 Paso_Distribution *reducedNodesDistribution;
00055 Paso_Distribution *degreesOfFreedomDistribution;
00056 Paso_Distribution *reducedDegreesOfFreedomDistribution;
00057
00058 Paso_Connector* degreesOfFreedomConnector;
00059 Paso_Connector *reducedDegreesOfFreedomConnector;
00060
00061
00062 index_t *reducedNodesId;
00063 index_t *degreesOfFreedomId;
00064 index_t *reducedDegreesOfFreedomId;
00065
00066
00067 int status;
00068
00069
00070
00071 };
00072
00073 typedef struct Finley_NodeFile Finley_NodeFile;
00074
00075
00076
00077 Finley_NodeFile* Finley_NodeFile_alloc(dim_t, Paso_MPIInfo *MPIInfo);
00078 index_t Finley_NodeFile_getFirstReducedNode(Finley_NodeFile* in);
00079 index_t Finley_NodeFile_getLastReducedNode(Finley_NodeFile* in);
00080 dim_t Finley_NodeFile_getGlobalNumReducedNodes(Finley_NodeFile* in);
00081 index_t* Finley_NodeFile_borrowGlobalReducedNodesIndex(Finley_NodeFile* in);
00082 index_t Finley_NodeFile_maxGlobalNodeIDIndex(Finley_NodeFile* in);
00083 index_t Finley_NodeFile_maxGlobalReducedNodeIDIndex(Finley_NodeFile* in);
00084 index_t Finley_NodeFile_GlobalDegreeOfFreedomIndex(Finley_NodeFile* in);
00085 index_t Finley_NodeFile_GlobalReducedDegreeOfFreedomIndex(Finley_NodeFile* in);
00086
00087 index_t Finley_NodeFile_getFirstNode(Finley_NodeFile* in);
00088 index_t Finley_NodeFile_getLastNode(Finley_NodeFile* in);
00089 dim_t Finley_NodeFile_getGlobalNumNodes(Finley_NodeFile* in);
00090 index_t* Finley_NodeFile_borrowGlobalNodesIndex(Finley_NodeFile* in);
00091
00092
00093 dim_t Finley_NodeFile_getNumReducedNodes(Finley_NodeFile* in);
00094 dim_t Finley_NodeFile_getNumDegreesOfFreedom(Finley_NodeFile* in);
00095 dim_t Finley_NodeFile_getNumNodes(Finley_NodeFile* in);
00096 dim_t Finley_NodeFile_getNumReducedDegreesOfFreedom(Finley_NodeFile* in);
00097
00098
00099 index_t* Finley_NodeFile_borrowTargetReducedNodes(Finley_NodeFile* in);
00100 index_t* Finley_NodeFile_borrowTargetDegreesOfFreedom(Finley_NodeFile* in);
00101 index_t* Finley_NodeFile_borrowTargetNodes(Finley_NodeFile* in);
00102 index_t* Finley_NodeFile_borrowTargetReducedDegreesOfFreedom(Finley_NodeFile* in);
00103
00104 index_t* Finley_NodeFile_borrowReducedNodesTarget(Finley_NodeFile* in);
00105 index_t* Finley_NodeFile_borrowDegreesOfFreedomTarget(Finley_NodeFile* in);
00106 index_t* Finley_NodeFile_borrowNodesTarget(Finley_NodeFile* in);
00107 index_t* Finley_NodeFile_borrowReducedDegreesOfFreedomTarget(Finley_NodeFile* in);
00108
00109 void Finley_NodeFile_allocTable(Finley_NodeFile*,dim_t);
00110 void Finley_NodeFile_free(Finley_NodeFile*);
00111 void Finley_NodeFile_freeTable(Finley_NodeFile*);
00112 void Finley_NodeFile_setIdGlobalRange(index_t*,index_t*,Finley_NodeFile*);
00113 void Finley_NodeFile_setIdRange(index_t*,index_t*,Finley_NodeFile*);
00114 void Finley_NodeFile_setDOFGlobalRange(index_t*,index_t*,Finley_NodeFile*);
00115 void Finley_NodeFile_setDOFRange(index_t*,index_t*,Finley_NodeFile*);
00116
00117
00118 void Finley_NodeFile_setGlobalDOFRange(index_t*,index_t*,Finley_NodeFile*);
00119 void Finley_NodeFile_setGlobalIdRange(index_t*,index_t*,Finley_NodeFile*);
00120 index_t Finley_NodeFile_maxGlobalDegreeOfFreedomIndex(Finley_NodeFile*);
00121 index_t Finley_NodeFile_maxGlobalReducedDegreeOfFreedomIndex(Finley_NodeFile*);
00122
00123 void Finley_NodeFile_setReducedDOFRange(index_t*,index_t*,Finley_NodeFile*);
00124 dim_t Finley_NodeFile_createDenseDOFLabeling(Finley_NodeFile*);
00125 dim_t Finley_NodeFile_createDenseNodeLabeling(Finley_NodeFile* in, index_t* node_distribution, const index_t* dof_distribution);
00126 dim_t Finley_NodeFile_createDenseReducedNodeLabeling(Finley_NodeFile* in, index_t* reducedNodeMask);
00127 dim_t Finley_NodeFile_createDenseReducedDOFLabeling(Finley_NodeFile* in, index_t* reducedNodeMask);
00128 void Finley_NodeFile_assignMPIRankToDOFs(Finley_NodeFile* in,Paso_MPI_rank* mpiRankOfDOF, index_t *distribution);
00129 void Finley_NodeFile_gather(index_t*,Finley_NodeFile*,Finley_NodeFile*);
00130 void Finley_NodeFile_gather_global(index_t*,Finley_NodeFile*,Finley_NodeFile*);
00131 void Finley_NodeFile_gatherEntries(dim_t, index_t*, index_t, index_t, index_t*, index_t*, index_t*, index_t*, index_t*, index_t*, dim_t numDim, double*, double*);
00132 void Finley_NodeFile_copyTable(dim_t,Finley_NodeFile*,dim_t,dim_t,Finley_NodeFile*);
00133 void Finley_NodeFile_scatter(index_t*,Finley_NodeFile*,Finley_NodeFile*);
00134 void Finley_NodeFile_scatterEntries(dim_t, index_t*, index_t, index_t, index_t*, index_t*, index_t*, index_t*, index_t*, index_t*, dim_t numDim, double*, double*);
00135 void Finley_NodeFile_copyTable(dim_t,Finley_NodeFile*,dim_t,dim_t,Finley_NodeFile*);
00136 void Finley_NodeFile_setGlobalReducedDegreeOfFreedomRange(index_t* min_id,index_t* max_id,Finley_NodeFile* in);
00137 void Finley_NodeFile_setGlobalNodeIDIndexRange(index_t* min_id,index_t* max_id,Finley_NodeFile* in);
00138 void Finley_NodeFile_setGlobalReducedNodeIDIndexRange(index_t* min_id,index_t* max_id,Finley_NodeFile* in);
00139
00140
00141 void Finley_NodeFile_setCoordinates(Finley_NodeFile*,escriptDataC*);
00142 void Finley_NodeFile_setTags(Finley_NodeFile*,const int,escriptDataC*);
00143 void Finley_NodeFile_setTagsInUse(Finley_NodeFile* in);
00144
00145 #endif
00146