Escript
Revision_4320
Main Page
Namespaces
Classes
Files
File List
File Members
dudley
src
dudley/src/NodeFile.h
Go to the documentation of this file.
1
2
/*****************************************************************************
3
*
4
* Copyright (c) 2003-2013 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 since 2012 by School of Earth Sciences
13
*
14
*****************************************************************************/
15
16
#ifndef INC_DUDLEY_NODEFILE
17
#define INC_DUDLEY_NODEFILE
18
19
#define MAX_numDim 3
20
21
#include "
Dudley.h
"
22
#include "
NodeMapping.h
"
23
#include "escript/DataC.h"
24
#include "paso/Distribution.h"
25
#include "paso/Coupler.h"
26
27
struct
Dudley_NodeFile
{
28
Esys_MPIInfo
*
MPIInfo
;
/* MPI information */
29
30
dim_t
numNodes
;
/* number of nodes */
31
dim_t
numDim
;
/* spatial dimension */
32
index_t
*
Id
;
/* Id[i] is the id number of node i. It need to be unique. */
33
index_t
*
Tag
;
/* Tag[i] is the tag of node i. */
34
index_t
*
tagsInUse
;
/* array of tags which are actually used */
35
dim_t
numTagsInUse
;
/* number of tags used */
36
37
index_t
*
globalDegreesOfFreedom
;
/* globalDegreesOfFreedom[i] is the global degree of freedom assigned to node i */
38
/* this index is used to consider periodic boundary conditions by assigning */
39
/* the same degreesOfFreedom to the same node */
40
double
*
Coordinates
;
/* Coordinates[INDEX2(k,i,numDim)] is the k-th coordinate of the */
41
/* node i. */
42
index_t
*
globalReducedDOFIndex
;
/* assigns each local node a global unique Id in a dens labeling of reduced DOF */
43
/* value <0 indicates that the DOF is not used */
44
index_t
*
globalReducedNodesIndex
;
/* assigns each local node a global unique Id in a dens labeling */
45
/* value <0 indicates that the DOF is not used */
46
index_t
*
globalNodesIndex
;
/* assigns each local reduced node a global unique Id in a dens labeling */
47
48
Dudley_NodeMapping
*
nodesMapping
;
49
Dudley_NodeMapping
*
reducedNodesMapping
;
50
Dudley_NodeMapping
*
degreesOfFreedomMapping
;
51
Dudley_NodeMapping
*
reducedDegreesOfFreedomMapping
;
52
53
Paso_Distribution
*
nodesDistribution
;
54
Paso_Distribution
*
reducedNodesDistribution
;
55
Paso_Distribution
*
degreesOfFreedomDistribution
;
56
Paso_Distribution
*
reducedDegreesOfFreedomDistribution
;
57
58
Paso_Connector
*
degreesOfFreedomConnector
;
59
Paso_Connector
*
reducedDegreesOfFreedomConnector
;
60
61
/* these a the packed versions of Id */
62
index_t
*
reducedNodesId
;
63
index_t
*
degreesOfFreedomId
;
64
index_t
*
reducedDegreesOfFreedomId
;
65
66
int
status
;
/* the status counts the updates done on the node coordinates */
67
/* the value of status is increased by when the node coordinates are updated. */
68
69
};
70
71
typedef
struct
Dudley_NodeFile
Dudley_NodeFile
;
72
73
74
Dudley_NodeFile
*
Dudley_NodeFile_alloc
(
dim_t
,
Esys_MPIInfo
*
MPIInfo
);
75
index_t
Dudley_NodeFile_getFirstReducedNode
(
Dudley_NodeFile
* in);
76
index_t
Dudley_NodeFile_getLastReducedNode
(
Dudley_NodeFile
* in);
77
dim_t
Dudley_NodeFile_getGlobalNumReducedNodes
(
Dudley_NodeFile
* in);
78
index_t
*
Dudley_NodeFile_borrowGlobalReducedNodesIndex
(
Dudley_NodeFile
* in);
79
index_t
Dudley_NodeFile_maxGlobalNodeIDIndex
(
Dudley_NodeFile
* in);
80
index_t
Dudley_NodeFile_maxGlobalReducedNodeIDIndex
(
Dudley_NodeFile
* in);
81
index_t
Dudley_NodeFile_GlobalDegreeOfFreedomIndex
(
Dudley_NodeFile
* in);
82
index_t
Dudley_NodeFile_GlobalReducedDegreeOfFreedomIndex
(
Dudley_NodeFile
* in);
83
84
index_t
Dudley_NodeFile_getFirstNode
(
Dudley_NodeFile
* in);
85
index_t
Dudley_NodeFile_getLastNode
(
Dudley_NodeFile
* in);
86
dim_t
Dudley_NodeFile_getGlobalNumNodes
(
Dudley_NodeFile
* in);
87
index_t
*
Dudley_NodeFile_borrowGlobalNodesIndex
(
Dudley_NodeFile
* in);
88
89
/* returns the number of target */
90
dim_t
Dudley_NodeFile_getNumReducedNodes
(
Dudley_NodeFile
* in);
91
dim_t
Dudley_NodeFile_getNumDegreesOfFreedom
(
Dudley_NodeFile
* in);
92
dim_t
Dudley_NodeFile_getNumNodes
(
Dudley_NodeFile
* in);
93
dim_t
Dudley_NodeFile_getNumReducedDegreesOfFreedom
(
Dudley_NodeFile
* in);
94
95
/* returns the mapping from local nodes to a target */
96
index_t
*
Dudley_NodeFile_borrowTargetReducedNodes
(
Dudley_NodeFile
* in);
97
index_t
*
Dudley_NodeFile_borrowTargetDegreesOfFreedom
(
Dudley_NodeFile
* in);
98
index_t
*
Dudley_NodeFile_borrowTargetNodes
(
Dudley_NodeFile
* in);
99
index_t
*
Dudley_NodeFile_borrowTargetReducedDegreesOfFreedom
(
Dudley_NodeFile
* in);
100
/* returns the mapping from target to the local nodes */
101
index_t
*
Dudley_NodeFile_borrowReducedNodesTarget
(
Dudley_NodeFile
* in);
102
index_t
*
Dudley_NodeFile_borrowDegreesOfFreedomTarget
(
Dudley_NodeFile
* in);
103
index_t
*
Dudley_NodeFile_borrowNodesTarget
(
Dudley_NodeFile
* in);
104
index_t
*
Dudley_NodeFile_borrowReducedDegreesOfFreedomTarget
(
Dudley_NodeFile
* in);
105
106
void
Dudley_NodeFile_allocTable
(
Dudley_NodeFile
*,
dim_t
);
107
void
Dudley_NodeFile_free
(
Dudley_NodeFile
*);
108
void
Dudley_NodeFile_freeTable
(
Dudley_NodeFile
*);
109
void
Dudley_NodeFile_setIdGlobalRange
(
index_t
*,
index_t
*,
Dudley_NodeFile
*);
110
void
Dudley_NodeFile_setIdRange
(
index_t
*,
index_t
*,
Dudley_NodeFile
*);
111
void
Dudley_NodeFile_setDOFGlobalRange
(
index_t
*,
index_t
*,
Dudley_NodeFile
*);
112
void
Dudley_NodeFile_setDOFRange
(
index_t
*,
index_t
*,
Dudley_NodeFile
*);
113
114
void
Dudley_NodeFile_setGlobalDOFRange
(
index_t
*,
index_t
*,
Dudley_NodeFile
*);
115
void
Dudley_NodeFile_setGlobalIdRange
(
index_t
*,
index_t
*,
Dudley_NodeFile
*);
116
index_t
Dudley_NodeFile_maxGlobalDegreeOfFreedomIndex
(
Dudley_NodeFile
*);
117
index_t
Dudley_NodeFile_maxGlobalReducedDegreeOfFreedomIndex
(
Dudley_NodeFile
*);
118
119
void
Dudley_NodeFile_setReducedDOFRange
(
index_t
*,
index_t
*,
Dudley_NodeFile
*);
120
dim_t
Dudley_NodeFile_createDenseDOFLabeling
(
Dudley_NodeFile
*);
121
dim_t
Dudley_NodeFile_createDenseNodeLabeling
(
Dudley_NodeFile
* in,
index_t
* node_distribution,
122
const
index_t
* dof_distribution);
123
dim_t
Dudley_NodeFile_createDenseReducedNodeLabeling
(
Dudley_NodeFile
* in,
index_t
* reducedNodeMask);
124
dim_t
Dudley_NodeFile_createDenseReducedDOFLabeling
(
Dudley_NodeFile
* in,
index_t
* reducedNodeMask);
125
void
Dudley_NodeFile_assignMPIRankToDOFs
(
Dudley_NodeFile
* in,
Esys_MPI_rank
* mpiRankOfDOF,
index_t
* distribution);
126
void
Dudley_NodeFile_gather
(
index_t
*,
Dudley_NodeFile
*,
Dudley_NodeFile
*);
127
void
Dudley_NodeFile_gather_global
(
index_t
*,
Dudley_NodeFile
*,
Dudley_NodeFile
*);
128
void
Dudley_NodeFile_gatherEntries
(
dim_t
,
index_t
*,
index_t
,
index_t
,
index_t
*,
index_t
*,
index_t
*,
index_t
*,
129
index_t
*,
index_t
*,
dim_t
numDim
,
double
*,
double
*);
130
void
Dudley_NodeFile_copyTable
(
dim_t
,
Dudley_NodeFile
*,
dim_t
,
dim_t
,
Dudley_NodeFile
*);
131
void
Dudley_NodeFile_scatter
(
index_t
*,
Dudley_NodeFile
*,
Dudley_NodeFile
*);
132
void
Dudley_NodeFile_scatterEntries
(
dim_t
,
index_t
*,
index_t
,
index_t
,
index_t
*,
index_t
*,
index_t
*,
index_t
*,
133
index_t
*,
index_t
*,
dim_t
numDim
,
double
*,
double
*);
134
void
Dudley_NodeFile_copyTable
(
dim_t
,
Dudley_NodeFile
*,
dim_t
,
dim_t
,
Dudley_NodeFile
*);
135
void
Dudley_NodeFile_setGlobalReducedDegreeOfFreedomRange
(
index_t
* min_id,
index_t
* max_id,
Dudley_NodeFile
* in);
136
void
Dudley_NodeFile_setGlobalNodeIDIndexRange
(
index_t
* min_id,
index_t
* max_id,
Dudley_NodeFile
* in);
137
void
Dudley_NodeFile_setGlobalReducedNodeIDIndexRange
(
index_t
* min_id,
index_t
* max_id,
Dudley_NodeFile
* in);
138
139
/* ===================== */
140
void
Dudley_NodeFile_setCoordinates
(
Dudley_NodeFile
*,
escriptDataC
*);
141
void
Dudley_NodeFile_setTags
(
Dudley_NodeFile
*,
const
int
,
escriptDataC
*);
142
void
Dudley_NodeFile_setTagsInUse
(
Dudley_NodeFile
* in);
143
144
#endif
Generated on Fri Mar 15 2013 14:07:51 for Escript by
1.8.1.2