escript  Revision_Unversioneddirectory
dudley/src/NodeFile.h
Go to the documentation of this file.
1 
2 /*****************************************************************************
3 *
4 * Copyright (c) 2003-2016 by The University of Queensland
5 * http://www.uq.edu.au
6 *
7 * Primary Business: Queensland, Australia
8 * Licensed under the Apache License, version 2.0
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Development until 2012 by Earth Systems Science Computational Center (ESSCC)
12 * Development 2012-2013 by School of Earth Sciences
13 * Development from 2014 by Centre for Geoscience Computing (GeoComp)
14 *
15 *****************************************************************************/
16 
17 #ifndef INC_DUDLEY_NODEFILE
18 #define INC_DUDLEY_NODEFILE
19 
20 #define MAX_numDim 3
21 
22 #include "Dudley.h"
23 #include "NodeMapping.h"
24 #include "escript/DataC.h"
25 #include "paso/Distribution.h"
26 #include "paso/Coupler.h"
27 
29  esysUtils::JMPI MPIInfo; /* MPI information */
30 
31  dim_t numNodes; /* number of nodes */
32  int numDim; /* spatial dimension */
33  index_t *Id; /* Id[i] is the id number of node i. It need to be unique. */
34  index_t *Tag; /* Tag[i] is the tag of node i. */
35  index_t *tagsInUse; /* array of tags which are actually used */
36  dim_t numTagsInUse; /* number of tags used */
37 
38  index_t *globalDegreesOfFreedom; /* globalDegreesOfFreedom[i] is the global degree of freedom assigned to node i */
39  /* this index is used to consider periodic boundary conditions by assigning */
40  /* the same degreesOfFreedom to the same node */
41  double *Coordinates; /* Coordinates[INDEX2(k,i,numDim)] is the k-th coordinate of the */
42  /* node i. */
43  index_t *globalReducedDOFIndex; /* assigns each local node a global unique Id in a dens labeling of reduced DOF */
44  /* value <0 indicates that the DOF is not used */
45  index_t *globalReducedNodesIndex; /* assigns each local node a global unique Id in a dens labeling */
46  /* value <0 indicates that the DOF is not used */
47  index_t *globalNodesIndex; /* assigns each local reduced node a global unique Id in a dens labeling */
48 
53 
58 
61 
62  /* these a the packed versions of Id */
66 
67  int status; /* the status counts the updates done on the node coordinates */
68  /* the value of status is increased by when the node coordinates are updated. */
69 
70 };
71 
73 
74 
84 
89 
90 /* returns the number of target */
95 
96 /* returns the mapping from local nodes to a target */
101 /* returns the mapping from target to the local nodes */
106 
114 
119 
123  const index_t * dof_distribution);
126 void Dudley_NodeFile_assignMPIRankToDOFs(Dudley_NodeFile * in, Esys_MPI_rank * mpiRankOfDOF, index_t * distribution);
130  index_t *, index_t *, dim_t numDim, double *, double *);
134  index_t *, index_t *, dim_t numDim, double *, double *);
139 
140 /* ===================== */
142 void Dudley_NodeFile_setTags(Dudley_NodeFile *, const int, const escript::Data *);
144 
145 #endif
dim_t Dudley_NodeFile_createDenseReducedNodeLabeling(Dudley_NodeFile *in, index_t *reducedNodeMask)
Definition: NodeFile_createDenseLabelings.cpp:482
void Dudley_NodeFile_freeTable(Dudley_NodeFile *)
Definition: NodeFile_allocTable.cpp:109
index_t * Dudley_NodeFile_borrowDegreesOfFreedomTarget(Dudley_NodeFile *in)
Definition: dudley/src/NodeFile.cpp:290
index_t * Dudley_NodeFile_borrowTargetReducedNodes(Dudley_NodeFile *in)
Definition: dudley/src/NodeFile.cpp:230
void Dudley_NodeFile_setGlobalReducedDegreeOfFreedomRange(index_t *min_id, index_t *max_id, Dudley_NodeFile *in)
Definition: NodeFile_setIdRange.cpp:134
dim_t Dudley_NodeFile_createDenseReducedDOFLabeling(Dudley_NodeFile *in, index_t *reducedNodeMask)
Definition: NodeFile_createDenseLabelings.cpp:203
index_t * Dudley_NodeFile_borrowGlobalNodesIndex(Dudley_NodeFile *in)
Definition: dudley/src/NodeFile.cpp:169
paso::Distribution_ptr reducedDegreesOfFreedomDistribution
Definition: dudley/src/NodeFile.h:57
void Dudley_NodeFile_setDOFRange(index_t *, index_t *, Dudley_NodeFile *)
Definition: NodeFile_setIdRange.cpp:98
Dudley_NodeMapping * reducedDegreesOfFreedomMapping
Definition: dudley/src/NodeFile.h:52
void Dudley_NodeFile_setIdGlobalRange(index_t *, index_t *, Dudley_NodeFile *)
dim_t Dudley_NodeFile_getNumReducedNodes(Dudley_NodeFile *in)
Definition: dudley/src/NodeFile.cpp:181
index_t * Dudley_NodeFile_borrowTargetReducedDegreesOfFreedom(Dudley_NodeFile *in)
Definition: dudley/src/NodeFile.cpp:266
void Dudley_NodeFile_setGlobalIdRange(index_t *, index_t *, Dudley_NodeFile *)
Definition: NodeFile_setIdRange.cpp:33
index_t * reducedNodesId
Definition: dudley/src/NodeFile.h:63
void Dudley_NodeFile_setIdRange(index_t *, index_t *, Dudley_NodeFile *)
Definition: NodeFile_setIdRange.cpp:60
index_t Dudley_NodeFile_getLastNode(Dudley_NodeFile *in)
Definition: dudley/src/NodeFile.cpp:143
void Dudley_NodeFile_free(Dudley_NodeFile *)
Definition: dudley/src/NodeFile.cpp:72
void Dudley_NodeFile_setDOFGlobalRange(index_t *, index_t *, Dudley_NodeFile *)
void Dudley_NodeFile_copyTable(dim_t, Dudley_NodeFile *, dim_t, dim_t, Dudley_NodeFile *)
Definition: NodeFile_copyTable.cpp:33
dim_t Dudley_NodeFile_getNumReducedDegreesOfFreedom(Dudley_NodeFile *in)
Definition: dudley/src/NodeFile.cpp:218
index_t * Dudley_NodeFile_borrowReducedDegreesOfFreedomTarget(Dudley_NodeFile *in)
Definition: dudley/src/NodeFile.cpp:314
void Dudley_NodeFile_scatter(index_t *, Dudley_NodeFile *, Dudley_NodeFile *)
Definition: NodeFile_scatter.cpp:59
void Dudley_NodeFile_setGlobalReducedNodeIDIndexRange(index_t *min_id, index_t *max_id, Dudley_NodeFile *in)
Definition: NodeFile_setIdRange.cpp:202
index_t * reducedDegreesOfFreedomId
Definition: dudley/src/NodeFile.h:65
Dudley_NodeFile * Dudley_NodeFile_alloc(dim_t, esysUtils::JMPI &MPIInfo)
Definition: dudley/src/NodeFile.cpp:35
paso::Distribution_ptr nodesDistribution
Definition: dudley/src/NodeFile.h:54
dim_t Dudley_NodeFile_createDenseNodeLabeling(Dudley_NodeFile *in, index_t *node_distribution, const index_t *dof_distribution)
Definition: NodeFile_createDenseLabelings.cpp:338
index_t Dudley_NodeFile_getFirstReducedNode(Dudley_NodeFile *in)
Definition: dudley/src/NodeFile.cpp:81
dim_t Dudley_NodeFile_getNumDegreesOfFreedom(Dudley_NodeFile *in)
Definition: dudley/src/NodeFile.cpp:194
void Dudley_NodeFile_setTagsInUse(Dudley_NodeFile *in)
Definition: NodeFile_allocTable.cpp:144
boost::shared_ptr< Distribution > Distribution_ptr
Definition: Distribution.h:36
void Dudley_NodeFile_gather_global(index_t *, Dudley_NodeFile *, Dudley_NodeFile *)
Definition: NodeFile_gather.cpp:68
dim_t numTagsInUse
Definition: dudley/src/NodeFile.h:36
index_t Dudley_NodeFile_GlobalReducedDegreeOfFreedomIndex(Dudley_NodeFile *in)
int numDim
Definition: dudley/src/NodeFile.h:32
dim_t Dudley_NodeFile_getNumNodes(Dudley_NodeFile *in)
Definition: dudley/src/NodeFile.cpp:206
void Dudley_NodeFile_setTags(Dudley_NodeFile *, const int, const escript::Data *)
Definition: NodeFile_setTags.cpp:33
paso::Connector_ptr degreesOfFreedomConnector
Definition: dudley/src/NodeFile.h:59
Dudley_NodeMapping * nodesMapping
Definition: dudley/src/NodeFile.h:49
void Dudley_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 *)
Definition: NodeFile_scatter.cpp:34
index_t Dudley_NodeFile_maxGlobalNodeIDIndex(Dudley_NodeFile *in)
Definition: NodeFile_setIdRange.cpp:161
index_t * Id
Definition: dudley/src/NodeFile.h:33
index_t * globalReducedDOFIndex
Definition: dudley/src/NodeFile.h:43
dim_t Dudley_NodeFile_getGlobalNumReducedNodes(Dudley_NodeFile *in)
Definition: dudley/src/NodeFile.cpp:106
void Dudley_NodeFile_gather(index_t *, Dudley_NodeFile *, Dudley_NodeFile *)
Definition: NodeFile_gather.cpp:57
void Dudley_NodeFile_setGlobalDOFRange(index_t *, index_t *, Dudley_NodeFile *)
Definition: NodeFile_setIdRange.cpp:71
index_t * Dudley_NodeFile_borrowTargetNodes(Dudley_NodeFile *in)
Definition: dudley/src/NodeFile.cpp:254
index_t * Dudley_NodeFile_borrowGlobalReducedNodesIndex(Dudley_NodeFile *in)
Definition: dudley/src/NodeFile.cpp:119
index_t Dudley_NodeFile_maxGlobalReducedDegreeOfFreedomIndex(Dudley_NodeFile *)
Definition: NodeFile_setIdRange.cpp:127
void Dudley_NodeFile_allocTable(Dudley_NodeFile *, dim_t)
Definition: NodeFile_allocTable.cpp:34
index_t Dudley_NodeFile_maxGlobalReducedNodeIDIndex(Dudley_NodeFile *in)
Definition: NodeFile_setIdRange.cpp:195
Data represents a collection of datapoints.
Definition: Data.h:68
esysUtils::JMPI MPIInfo
Definition: dudley/src/NodeFile.h:29
double * Coordinates
Definition: dudley/src/NodeFile.h:41
index_t * globalReducedNodesIndex
Definition: dudley/src/NodeFile.h:45
dim_t numNodes
Definition: dudley/src/NodeFile.h:31
Dudley_NodeMapping * degreesOfFreedomMapping
Definition: dudley/src/NodeFile.h:51
index_t * Dudley_NodeFile_borrowReducedNodesTarget(Dudley_NodeFile *in)
Definition: dudley/src/NodeFile.cpp:278
void Dudley_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 *)
Definition: NodeFile_gather.cpp:33
index_t Dudley_NodeFile_maxGlobalDegreeOfFreedomIndex(Dudley_NodeFile *)
Definition: NodeFile_setIdRange.cpp:120
index_t Dudley_NodeFile_getLastReducedNode(Dudley_NodeFile *in)
Definition: dudley/src/NodeFile.cpp:93
int index_t
Definition: types.h:24
paso::Distribution_ptr degreesOfFreedomDistribution
Definition: dudley/src/NodeFile.h:56
int Esys_MPI_rank
Definition: Esys_MPI.h:59
void Dudley_NodeFile_setReducedDOFRange(index_t *, index_t *, Dudley_NodeFile *)
Definition: NodeFile_setIdRange.cpp:109
Definition: dudley/src/NodeFile.h:28
paso::Distribution_ptr reducedNodesDistribution
Definition: dudley/src/NodeFile.h:55
int status
Definition: dudley/src/NodeFile.h:67
index_t * Dudley_NodeFile_borrowTargetDegreesOfFreedom(Dudley_NodeFile *in)
Definition: dudley/src/NodeFile.cpp:242
boost::shared_ptr< Connector > Connector_ptr
Definition: Coupler.h:35
index_t * Tag
Definition: dudley/src/NodeFile.h:34
index_t dim_t
Definition: types.h:27
dim_t Dudley_NodeFile_getGlobalNumNodes(Dudley_NodeFile *in)
Definition: dudley/src/NodeFile.cpp:156
dim_t Dudley_NodeFile_createDenseDOFLabeling(Dudley_NodeFile *)
Definition: NodeFile_createDenseLabelings.cpp:33
index_t * tagsInUse
Definition: dudley/src/NodeFile.h:35
index_t Dudley_NodeFile_getFirstNode(Dudley_NodeFile *in)
Definition: dudley/src/NodeFile.cpp:131
index_t * globalNodesIndex
Definition: dudley/src/NodeFile.h:47
paso::Connector_ptr reducedDegreesOfFreedomConnector
Definition: dudley/src/NodeFile.h:60
void Dudley_NodeFile_assignMPIRankToDOFs(Dudley_NodeFile *in, Esys_MPI_rank *mpiRankOfDOF, index_t *distribution)
Definition: NodeFile_createDenseLabelings.cpp:173
Dudley_NodeMapping * reducedNodesMapping
Definition: dudley/src/NodeFile.h:50
void Dudley_NodeFile_setCoordinates(Dudley_NodeFile *, const escript::Data *)
Definition: NodeFile_setCoordinates.cpp:33
Definition: dudley/src/NodeMapping.h:27
index_t * globalDegreesOfFreedom
Definition: dudley/src/NodeFile.h:38
boost::shared_ptr< JMPI_ > JMPI
Definition: Esys_MPI.h:79
index_t Dudley_NodeFile_GlobalDegreeOfFreedomIndex(Dudley_NodeFile *in)
index_t * Dudley_NodeFile_borrowNodesTarget(Dudley_NodeFile *in)
Definition: dudley/src/NodeFile.cpp:302
index_t * degreesOfFreedomId
Definition: dudley/src/NodeFile.h:64
void Dudley_NodeFile_setGlobalNodeIDIndexRange(index_t *min_id, index_t *max_id, Dudley_NodeFile *in)
Definition: NodeFile_setIdRange.cpp:168