00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #ifndef INC_DUDLEY_NODEFILE
00015 #define INC_DUDLEY_NODEFILE
00016
00017 #define MAX_numDim 3
00018
00019 #include "Dudley.h"
00020 #include "NodeMapping.h"
00021 #include "escript/DataC.h"
00022 #include "paso/Distribution.h"
00023 #include "paso/Coupler.h"
00024
00025 struct Dudley_NodeFile {
00026 Esys_MPIInfo *MPIInfo;
00027
00028 dim_t numNodes;
00029 dim_t numDim;
00030 index_t *Id;
00031 index_t *Tag;
00032 index_t *tagsInUse;
00033 dim_t numTagsInUse;
00034
00035 index_t *globalDegreesOfFreedom;
00036
00037
00038 double *Coordinates;
00039
00040 index_t *globalReducedDOFIndex;
00041
00042 index_t *globalReducedNodesIndex;
00043
00044 index_t *globalNodesIndex;
00045
00046 Dudley_NodeMapping *nodesMapping;
00047 Dudley_NodeMapping *reducedNodesMapping;
00048 Dudley_NodeMapping *degreesOfFreedomMapping;
00049 Dudley_NodeMapping *reducedDegreesOfFreedomMapping;
00050
00051 Paso_Distribution *nodesDistribution;
00052 Paso_Distribution *reducedNodesDistribution;
00053 Paso_Distribution *degreesOfFreedomDistribution;
00054 Paso_Distribution *reducedDegreesOfFreedomDistribution;
00055
00056 Paso_Connector *degreesOfFreedomConnector;
00057 Paso_Connector *reducedDegreesOfFreedomConnector;
00058
00059
00060 index_t *reducedNodesId;
00061 index_t *degreesOfFreedomId;
00062 index_t *reducedDegreesOfFreedomId;
00063
00064 int status;
00065
00066
00067 };
00068
00069 typedef struct Dudley_NodeFile Dudley_NodeFile;
00070
00071
00072 Dudley_NodeFile *Dudley_NodeFile_alloc(dim_t, Esys_MPIInfo * MPIInfo);
00073 index_t Dudley_NodeFile_getFirstReducedNode(Dudley_NodeFile * in);
00074 index_t Dudley_NodeFile_getLastReducedNode(Dudley_NodeFile * in);
00075 dim_t Dudley_NodeFile_getGlobalNumReducedNodes(Dudley_NodeFile * in);
00076 index_t *Dudley_NodeFile_borrowGlobalReducedNodesIndex(Dudley_NodeFile * in);
00077 index_t Dudley_NodeFile_maxGlobalNodeIDIndex(Dudley_NodeFile * in);
00078 index_t Dudley_NodeFile_maxGlobalReducedNodeIDIndex(Dudley_NodeFile * in);
00079 index_t Dudley_NodeFile_GlobalDegreeOfFreedomIndex(Dudley_NodeFile * in);
00080 index_t Dudley_NodeFile_GlobalReducedDegreeOfFreedomIndex(Dudley_NodeFile * in);
00081
00082 index_t Dudley_NodeFile_getFirstNode(Dudley_NodeFile * in);
00083 index_t Dudley_NodeFile_getLastNode(Dudley_NodeFile * in);
00084 dim_t Dudley_NodeFile_getGlobalNumNodes(Dudley_NodeFile * in);
00085 index_t *Dudley_NodeFile_borrowGlobalNodesIndex(Dudley_NodeFile * in);
00086
00087
00088 dim_t Dudley_NodeFile_getNumReducedNodes(Dudley_NodeFile * in);
00089 dim_t Dudley_NodeFile_getNumDegreesOfFreedom(Dudley_NodeFile * in);
00090 dim_t Dudley_NodeFile_getNumNodes(Dudley_NodeFile * in);
00091 dim_t Dudley_NodeFile_getNumReducedDegreesOfFreedom(Dudley_NodeFile * in);
00092
00093
00094 index_t *Dudley_NodeFile_borrowTargetReducedNodes(Dudley_NodeFile * in);
00095 index_t *Dudley_NodeFile_borrowTargetDegreesOfFreedom(Dudley_NodeFile * in);
00096 index_t *Dudley_NodeFile_borrowTargetNodes(Dudley_NodeFile * in);
00097 index_t *Dudley_NodeFile_borrowTargetReducedDegreesOfFreedom(Dudley_NodeFile * in);
00098
00099 index_t *Dudley_NodeFile_borrowReducedNodesTarget(Dudley_NodeFile * in);
00100 index_t *Dudley_NodeFile_borrowDegreesOfFreedomTarget(Dudley_NodeFile * in);
00101 index_t *Dudley_NodeFile_borrowNodesTarget(Dudley_NodeFile * in);
00102 index_t *Dudley_NodeFile_borrowReducedDegreesOfFreedomTarget(Dudley_NodeFile * in);
00103
00104 void Dudley_NodeFile_allocTable(Dudley_NodeFile *, dim_t);
00105 void Dudley_NodeFile_free(Dudley_NodeFile *);
00106 void Dudley_NodeFile_freeTable(Dudley_NodeFile *);
00107 void Dudley_NodeFile_setIdGlobalRange(index_t *, index_t *, Dudley_NodeFile *);
00108 void Dudley_NodeFile_setIdRange(index_t *, index_t *, Dudley_NodeFile *);
00109 void Dudley_NodeFile_setDOFGlobalRange(index_t *, index_t *, Dudley_NodeFile *);
00110 void Dudley_NodeFile_setDOFRange(index_t *, index_t *, Dudley_NodeFile *);
00111
00112 void Dudley_NodeFile_setGlobalDOFRange(index_t *, index_t *, Dudley_NodeFile *);
00113 void Dudley_NodeFile_setGlobalIdRange(index_t *, index_t *, Dudley_NodeFile *);
00114 index_t Dudley_NodeFile_maxGlobalDegreeOfFreedomIndex(Dudley_NodeFile *);
00115 index_t Dudley_NodeFile_maxGlobalReducedDegreeOfFreedomIndex(Dudley_NodeFile *);
00116
00117 void Dudley_NodeFile_setReducedDOFRange(index_t *, index_t *, Dudley_NodeFile *);
00118 dim_t Dudley_NodeFile_createDenseDOFLabeling(Dudley_NodeFile *);
00119 dim_t Dudley_NodeFile_createDenseNodeLabeling(Dudley_NodeFile * in, index_t * node_distribution,
00120 const index_t * dof_distribution);
00121 dim_t Dudley_NodeFile_createDenseReducedNodeLabeling(Dudley_NodeFile * in, index_t * reducedNodeMask);
00122 dim_t Dudley_NodeFile_createDenseReducedDOFLabeling(Dudley_NodeFile * in, index_t * reducedNodeMask);
00123 void Dudley_NodeFile_assignMPIRankToDOFs(Dudley_NodeFile * in, Esys_MPI_rank * mpiRankOfDOF, index_t * distribution);
00124 void Dudley_NodeFile_gather(index_t *, Dudley_NodeFile *, Dudley_NodeFile *);
00125 void Dudley_NodeFile_gather_global(index_t *, Dudley_NodeFile *, Dudley_NodeFile *);
00126 void Dudley_NodeFile_gatherEntries(dim_t, index_t *, index_t, index_t, index_t *, index_t *, index_t *, index_t *,
00127 index_t *, index_t *, dim_t numDim, double *, double *);
00128 void Dudley_NodeFile_copyTable(dim_t, Dudley_NodeFile *, dim_t, dim_t, Dudley_NodeFile *);
00129 void Dudley_NodeFile_scatter(index_t *, Dudley_NodeFile *, Dudley_NodeFile *);
00130 void Dudley_NodeFile_scatterEntries(dim_t, index_t *, index_t, index_t, index_t *, index_t *, index_t *, index_t *,
00131 index_t *, index_t *, dim_t numDim, double *, double *);
00132 void Dudley_NodeFile_copyTable(dim_t, Dudley_NodeFile *, dim_t, dim_t, Dudley_NodeFile *);
00133 void Dudley_NodeFile_setGlobalReducedDegreeOfFreedomRange(index_t * min_id, index_t * max_id, Dudley_NodeFile * in);
00134 void Dudley_NodeFile_setGlobalNodeIDIndexRange(index_t * min_id, index_t * max_id, Dudley_NodeFile * in);
00135 void Dudley_NodeFile_setGlobalReducedNodeIDIndexRange(index_t * min_id, index_t * max_id, Dudley_NodeFile * in);
00136
00137
00138 void Dudley_NodeFile_setCoordinates(Dudley_NodeFile *, escriptDataC *);
00139 void Dudley_NodeFile_setTags(Dudley_NodeFile *, const int, escriptDataC *);
00140 void Dudley_NodeFile_setTagsInUse(Dudley_NodeFile * in);
00141
00142 #endif