2
/*******************************************************
4
* Copyright (c) 2003-2010 by University of Queensland
5
* Earth Systems Science Computational Center (ESSCC)
6
* http://www.uq.edu.au/esscc
8
* Primary Business: Queensland, Australia
9
* Licensed under the Open Software License version 3.0
10
* http://www.opensource.org/licenses/osl-3.0.php
12
*******************************************************/
14
/**************************************************************/
16
/* Dudley: Mesh: NodeFile */
18
/* returns the maximum and minimum node id number of nodes: */
20
/**************************************************************/
25
/**************************************************************/
27
void Dudley_NodeFile_setGlobalIdRange(index_t * min_id, index_t * max_id, Dudley_NodeFile * in)
29
index_t min_id_local, max_id_local;
31
index_t global_id_range[2], id_range[2];
34
min_id_local = Dudley_Util_getMinInt(1, in->numNodes, in->Id);
35
max_id_local = Dudley_Util_getMaxInt(1, in->numNodes, in->Id);
38
id_range[0] = -min_id_local;
39
id_range[1] = max_id_local;
40
MPI_Allreduce(id_range, global_id_range, 2, MPI_INT, MPI_MAX, in->MPIInfo->comm);
41
*min_id = -global_id_range[0];
42
*max_id = global_id_range[1];
44
*min_id = min_id_local;
45
*max_id = max_id_local;
47
if (*max_id < *min_id)
54
void Dudley_NodeFile_setIdRange(index_t * min_id, index_t * max_id, Dudley_NodeFile * in)
56
*min_id = Dudley_Util_getMinInt(1, in->numNodes, in->Id);
57
*max_id = Dudley_Util_getMaxInt(1, in->numNodes, in->Id);
58
if (*max_id < *min_id)
65
void Dudley_NodeFile_setGlobalDOFRange(index_t * min_id, index_t * max_id, Dudley_NodeFile * in)
67
index_t min_id_local, max_id_local;
69
index_t global_id_range[2], id_range[2];
72
min_id_local = Dudley_Util_getMinInt(1, in->numNodes, in->globalDegreesOfFreedom);
73
max_id_local = Dudley_Util_getMaxInt(1, in->numNodes, in->globalDegreesOfFreedom);
76
id_range[0] = -min_id_local;
77
id_range[1] = max_id_local;
78
MPI_Allreduce(id_range, global_id_range, 2, MPI_INT, MPI_MAX, in->MPIInfo->comm);
79
*min_id = -global_id_range[0];
80
*max_id = global_id_range[1];
82
*min_id = min_id_local;
83
*max_id = max_id_local;
85
if (*max_id < *min_id)
92
void Dudley_NodeFile_setDOFRange(index_t * min_id, index_t * max_id, Dudley_NodeFile * in)
94
*min_id = Dudley_Util_getMinInt(1, in->numNodes, in->globalDegreesOfFreedom);
95
*max_id = Dudley_Util_getMaxInt(1, in->numNodes, in->globalDegreesOfFreedom);
96
if (*max_id < *min_id)
103
void Dudley_NodeFile_setReducedDOFRange(index_t * min_id, index_t * max_id, Dudley_NodeFile * in)
105
*min_id = Dudley_Util_getFlaggedMinInt(1, in->numNodes, in->globalReducedDOFIndex, -1);
106
*max_id = Dudley_Util_getFlaggedMaxInt(1, in->numNodes, in->globalReducedDOFIndex, -1);
107
if (*max_id < *min_id)
114
index_t Dudley_NodeFile_maxGlobalDegreeOfFreedomIndex(Dudley_NodeFile * in)
116
index_t min_id, max_id;
117
Dudley_NodeFile_setGlobalDOFRange(&min_id, &max_id, in);
121
index_t Dudley_NodeFile_maxGlobalReducedDegreeOfFreedomIndex(Dudley_NodeFile * in)
123
index_t min_id, max_id;
124
Dudley_NodeFile_setGlobalReducedDegreeOfFreedomRange(&min_id, &max_id, in);
128
void Dudley_NodeFile_setGlobalReducedDegreeOfFreedomRange(index_t * min_id, index_t * max_id, Dudley_NodeFile * in)
130
index_t min_id_local, max_id_local;
132
index_t global_id_range[2], id_range[2];
135
min_id_local = Dudley_Util_getFlaggedMaxInt(1, in->numNodes, in->globalReducedDOFIndex, -1);
136
max_id_local = Dudley_Util_getFlaggedMinInt(1, in->numNodes, in->globalReducedDOFIndex, -1);
139
id_range[0] = -min_id_local;
140
id_range[1] = max_id_local;
141
MPI_Allreduce(id_range, global_id_range, 2, MPI_INT, MPI_MAX, in->MPIInfo->comm);
142
*min_id = -global_id_range[0];
143
*max_id = global_id_range[1];
145
*min_id = min_id_local;
146
*max_id = max_id_local;
148
if (*max_id < *min_id)
155
index_t Dudley_NodeFile_maxGlobalNodeIDIndex(Dudley_NodeFile * in)
157
index_t min_id, max_id;
158
Dudley_NodeFile_setGlobalNodeIDIndexRange(&min_id, &max_id, in);
162
void Dudley_NodeFile_setGlobalNodeIDIndexRange(index_t * min_id, index_t * max_id, Dudley_NodeFile * in)
164
index_t min_id_local, max_id_local;
166
index_t global_id_range[2], id_range[2];
169
max_id_local = Dudley_Util_getMaxInt(1, in->numNodes, in->globalNodesIndex);
170
min_id_local = Dudley_Util_getMinInt(1, in->numNodes, in->globalNodesIndex);
173
id_range[0] = -min_id_local;
174
id_range[1] = max_id_local;
175
MPI_Allreduce(id_range, global_id_range, 2, MPI_INT, MPI_MAX, in->MPIInfo->comm);
176
*min_id = -global_id_range[0];
177
*max_id = global_id_range[1];
179
*min_id = min_id_local;
180
*max_id = max_id_local;
182
if (*max_id < *min_id)
189
index_t Dudley_NodeFile_maxGlobalReducedNodeIDIndex(Dudley_NodeFile * in)
191
index_t min_id, max_id;
192
Dudley_NodeFile_setGlobalReducedNodeIDIndexRange(&min_id, &max_id, in);
196
void Dudley_NodeFile_setGlobalReducedNodeIDIndexRange(index_t * min_id, index_t * max_id, Dudley_NodeFile * in)
198
index_t min_id_local, max_id_local;
200
index_t global_id_range[2], id_range[2];
203
max_id_local = Dudley_Util_getFlaggedMaxInt(1, in->numNodes, in->globalReducedNodesIndex, -1);
204
min_id_local = Dudley_Util_getFlaggedMinInt(1, in->numNodes, in->globalReducedNodesIndex, -1);
207
id_range[0] = -min_id_local;
208
id_range[1] = max_id_local;
209
MPI_Allreduce(id_range, global_id_range, 2, MPI_INT, MPI_MAX, in->MPIInfo->comm);
210
*min_id = -global_id_range[0];
211
*max_id = global_id_range[1];
213
*min_id = min_id_local;
214
*max_id = max_id_local;
216
if (*max_id < *min_id)