~vcs-imports/escript-finley/trunk

« back to all changes in this revision

Viewing changes to dudley/src/NodeFile.h

  • Committer: jfenwick
  • Date: 2010-10-11 01:48:14 UTC
  • Revision ID: svn-v4:77569008-7704-0410-b7a0-a92fef0b09fd:trunk:3259
Merging dudley and scons updates from branches

Show diffs side-by-side

added added

removed removed

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