escript  Revision_4925
dudley/src/NodeFile.h
Go to the documentation of this file.
1 
2 /*****************************************************************************
3 *
4 * Copyright (c) 2003-2014 by University of Queensland
5 * http://www.uq.edu.au
6 *
7 * Primary Business: Queensland, Australia
8 * Licensed under the Open Software License version 3.0
9 * http://www.opensource.org/licenses/osl-3.0.php
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  Esys_MPIInfo *MPIInfo; /* MPI information */
30 
31  dim_t numNodes; /* number of nodes */
32  dim_t 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 /* ===================== */
144 
145 #endif
dim_t Dudley_NodeFile_createDenseReducedNodeLabeling(Dudley_NodeFile *in, index_t *reducedNodeMask)
Definition: NodeFile_createDenseLabelings.cpp:479
void Dudley_NodeFile_freeTable(Dudley_NodeFile *)
Definition: NodeFile_allocTable.cpp:106
index_t * Dudley_NodeFile_borrowDegreesOfFreedomTarget(Dudley_NodeFile *in)
Definition: dudley/src/NodeFile.cpp:288
index_t * Dudley_NodeFile_borrowTargetReducedNodes(Dudley_NodeFile *in)
Definition: dudley/src/NodeFile.cpp:228
void Dudley_NodeFile_setGlobalReducedDegreeOfFreedomRange(index_t *min_id, index_t *max_id, Dudley_NodeFile *in)
Definition: NodeFile_setIdRange.cpp:131
dim_t Dudley_NodeFile_createDenseReducedDOFLabeling(Dudley_NodeFile *in, index_t *reducedNodeMask)
Definition: NodeFile_createDenseLabelings.cpp:200
index_t * Dudley_NodeFile_borrowGlobalNodesIndex(Dudley_NodeFile *in)
Definition: dudley/src/NodeFile.cpp:167
paso::Distribution_ptr reducedDegreesOfFreedomDistribution
Definition: dudley/src/NodeFile.h:57
void Dudley_NodeFile_setDOFRange(index_t *, index_t *, Dudley_NodeFile *)
Definition: NodeFile_setIdRange.cpp:95
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:179
index_t * Dudley_NodeFile_borrowTargetReducedDegreesOfFreedom(Dudley_NodeFile *in)
Definition: dudley/src/NodeFile.cpp:264
void Dudley_NodeFile_setGlobalIdRange(index_t *, index_t *, Dudley_NodeFile *)
Definition: NodeFile_setIdRange.cpp:30
index_t * reducedNodesId
Definition: dudley/src/NodeFile.h:63
void Dudley_NodeFile_setTags(Dudley_NodeFile *, const int, escriptDataC *)
Definition: NodeFile_setTags.cpp:30
void Dudley_NodeFile_setIdRange(index_t *, index_t *, Dudley_NodeFile *)
Definition: NodeFile_setIdRange.cpp:57
index_t Dudley_NodeFile_getLastNode(Dudley_NodeFile *in)
Definition: dudley/src/NodeFile.cpp:141
void Dudley_NodeFile_free(Dudley_NodeFile *)
Definition: dudley/src/NodeFile.cpp:69
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:30
dim_t Dudley_NodeFile_getNumReducedDegreesOfFreedom(Dudley_NodeFile *in)
Definition: dudley/src/NodeFile.cpp:216
index_t * Dudley_NodeFile_borrowReducedDegreesOfFreedomTarget(Dudley_NodeFile *in)
Definition: dudley/src/NodeFile.cpp:312
void Dudley_NodeFile_scatter(index_t *, Dudley_NodeFile *, Dudley_NodeFile *)
Definition: NodeFile_scatter.cpp:56
void Dudley_NodeFile_setGlobalReducedNodeIDIndexRange(index_t *min_id, index_t *max_id, Dudley_NodeFile *in)
Definition: NodeFile_setIdRange.cpp:199
Dudley_NodeFile * Dudley_NodeFile_alloc(dim_t, Esys_MPIInfo *MPIInfo)
Definition: dudley/src/NodeFile.cpp:32
Struct that holds MPI communicator, rank, size and a tag counter.
Definition: Esys_MPI.h:48
index_t * reducedDegreesOfFreedomId
Definition: dudley/src/NodeFile.h:65
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:335
index_t Dudley_NodeFile_getFirstReducedNode(Dudley_NodeFile *in)
Definition: dudley/src/NodeFile.cpp:79
dim_t Dudley_NodeFile_getNumDegreesOfFreedom(Dudley_NodeFile *in)
Definition: dudley/src/NodeFile.cpp:192
void Dudley_NodeFile_setTagsInUse(Dudley_NodeFile *in)
Definition: NodeFile_allocTable.cpp:141
dim_t numDim
Definition: dudley/src/NodeFile.h:32
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:65
dim_t numTagsInUse
Definition: dudley/src/NodeFile.h:36
index_t Dudley_NodeFile_GlobalReducedDegreeOfFreedomIndex(Dudley_NodeFile *in)
dim_t Dudley_NodeFile_getNumNodes(Dudley_NodeFile *in)
Definition: dudley/src/NodeFile.cpp:204
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:31
index_t Dudley_NodeFile_maxGlobalNodeIDIndex(Dudley_NodeFile *in)
Definition: NodeFile_setIdRange.cpp:158
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:104
void Dudley_NodeFile_gather(index_t *, Dudley_NodeFile *, Dudley_NodeFile *)
Definition: NodeFile_gather.cpp:54
void Dudley_NodeFile_setGlobalDOFRange(index_t *, index_t *, Dudley_NodeFile *)
Definition: NodeFile_setIdRange.cpp:68
index_t * Dudley_NodeFile_borrowTargetNodes(Dudley_NodeFile *in)
Definition: dudley/src/NodeFile.cpp:252
index_t * Dudley_NodeFile_borrowGlobalReducedNodesIndex(Dudley_NodeFile *in)
Definition: dudley/src/NodeFile.cpp:117
index_t Dudley_NodeFile_maxGlobalReducedDegreeOfFreedomIndex(Dudley_NodeFile *)
Definition: NodeFile_setIdRange.cpp:124
Provide a wrapper around a Data object so Data may be accessed from C.
Definition: DataC.h:30
void Dudley_NodeFile_allocTable(Dudley_NodeFile *, dim_t)
Definition: NodeFile_allocTable.cpp:31
index_t Dudley_NodeFile_maxGlobalReducedNodeIDIndex(Dudley_NodeFile *in)
Definition: NodeFile_setIdRange.cpp:192
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:276
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:30
index_t Dudley_NodeFile_maxGlobalDegreeOfFreedomIndex(Dudley_NodeFile *)
Definition: NodeFile_setIdRange.cpp:117
index_t Dudley_NodeFile_getLastReducedNode(Dudley_NodeFile *in)
Definition: dudley/src/NodeFile.cpp:91
int index_t
Definition: types.h:25
paso::Distribution_ptr degreesOfFreedomDistribution
Definition: dudley/src/NodeFile.h:56
int Esys_MPI_rank
Definition: Esys_MPI.h:37
void Dudley_NodeFile_setReducedDOFRange(index_t *, index_t *, Dudley_NodeFile *)
Definition: NodeFile_setIdRange.cpp:106
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:240
boost::shared_ptr< Connector > Connector_ptr
Definition: Coupler.h:35
index_t * Tag
Definition: dudley/src/NodeFile.h:34
dim_t Dudley_NodeFile_getGlobalNumNodes(Dudley_NodeFile *in)
Definition: dudley/src/NodeFile.cpp:154
dim_t Dudley_NodeFile_createDenseDOFLabeling(Dudley_NodeFile *)
Definition: NodeFile_createDenseLabelings.cpp:30
index_t * tagsInUse
Definition: dudley/src/NodeFile.h:35
index_t Dudley_NodeFile_getFirstNode(Dudley_NodeFile *in)
Definition: dudley/src/NodeFile.cpp:129
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:170
Dudley_NodeMapping * reducedNodesMapping
Definition: dudley/src/NodeFile.h:50
Esys_MPIInfo * MPIInfo
Definition: dudley/src/NodeFile.h:29
Definition: dudley/src/NodeMapping.h:27
index_t * globalDegreesOfFreedom
Definition: dudley/src/NodeFile.h:38
int dim_t
Definition: types.h:24
void Dudley_NodeFile_setCoordinates(Dudley_NodeFile *, escriptDataC *)
Definition: NodeFile_setCoordinates.cpp:30
index_t Dudley_NodeFile_GlobalDegreeOfFreedomIndex(Dudley_NodeFile *in)
index_t * Dudley_NodeFile_borrowNodesTarget(Dudley_NodeFile *in)
Definition: dudley/src/NodeFile.cpp:300
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:165