/[escript]/branches/doubleplusgood/dudley/src/ElementFile_markNodes.c
ViewVC logotype

Annotation of /branches/doubleplusgood/dudley/src/ElementFile_markNodes.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 751 - (hide annotations)
Mon Jun 26 01:46:34 2006 UTC (13 years, 1 month ago) by bcumming
Original Path: trunk/finley/src/ElementFile_markNodes.c
File MIME type: text/plain
File size: 6719 byte(s)
Changes relating to the MPI version of escript
The standard OpenMP version of escript is unchanged

- updated data types (Finley_Mesh, Finley_NodeFile, etc) to store meshes
  over multiple MPI processes.
- added CommBuffer code in Paso for communication of Data associated
  with distributed meshes
- updates in Finley and Escript to support distributed data and operations
  on distributed data (such as interpolation).
- construction of RHS in MPI, so that simple explicit schemes (such as
  /docs/examples/wave.py without IO and the Locator) can run in MPI.
- updated mesh generation for first order line, rectangle and brick
  meshes and second order line meshes in MPI.        
- small changes to trunk/SConstruct and trunk/scons/ess_options.py to
  build the MPI version, these changes are turned off by default.

1 jgs 150 /*
2 elspeth 616 ************************************************************
3     * Copyright 2006 by ACcESS MNRF *
4     * *
5     * http://www.access.edu.au *
6     * Primary Business: Queensland, Australia *
7     * Licensed under the Open Software License version 3.0 *
8     * http://www.opensource.org/licenses/osl-3.0.php *
9     * *
10     ************************************************************
11 jgs 150 */
12    
13 jgs 82 /**************************************************************/
14    
15     /* Finley: ElementFile */
16    
17     /* mark the used nodes with offeset: */
18    
19     /**************************************************************/
20    
21 jgs 150 /* Copyrights by ACcESS Australia 2003,2004,2005 */
22     /* Author: gross@access.edu.au */
23     /* Version: $Id$ */
24 jgs 82
25     /**************************************************************/
26    
27     #include "ElementFile.h"
28    
29     /**************************************************************/
30    
31 jgs 123 void Finley_ElementFile_markNodes(index_t* mask,index_t offset,Finley_ElementFile* in,bool_t useLinear) {
32     dim_t i,NN,NN2,e;
33     index_t color,*lin_node;
34 jgs 82 if (in!=NULL) {
35 jgs 123 index_t id[in->ReferenceElement->Type->numNodes];
36 jgs 82 for (i=0;i<in->ReferenceElement->Type->numNodes;i++) id[i]=i;
37     if (useLinear) {
38     NN=in->LinearReferenceElement->Type->numNodes;
39     lin_node=in->ReferenceElement->Type->linearNodes;
40     } else {
41     NN=in->ReferenceElement->Type->numNodes;
42     lin_node=id;
43     }
44     NN2=in->ReferenceElement->Type->numNodes;
45 bcumming 751 /* knock out the OpenMP directives for the MPI version, get the OpenMP running
46     after the MPI is working satisfactorily */
47     #ifndef PASO_MPI
48 jgs 126 if ((in->maxColor-in->minColor+1)*NN<in->numElements) {
49     #pragma omp parallel private(color)
50     {
51     for (color=in->minColor;color<=in->maxColor;color++) {
52     #pragma omp for private(e,i) schedule(static)
53     for (e=0;e<in->numElements;e++) {
54     if (in->Color[e]==color) {
55 bcumming 730 for (i=0;i<NN;i++)
56     mask[in->Nodes[INDEX2(lin_node[i],e,NN2)]-offset]=1;
57 jgs 126 }
58     }
59     }
60     #pragma omp barrier
61 jgs 82 }
62 jgs 126 } else {
63     #pragma omp parallel for private(e,i) schedule(static)
64 bcumming 751 #endif
65 jgs 126 for (e=0;e<in->numElements;e++) {
66 bcumming 730 for (i=0;i<NN;i++)
67     mask[in->Nodes[INDEX2(lin_node[i],e,NN2)]-offset]=1;
68 jgs 126 }
69 bcumming 751 #ifndef PASO_MPI
70 jgs 126 }
71 bcumming 751 #endif
72 jgs 82 }
73     }
74 bcumming 751
75     #ifdef PASO_MPI
76    
77     /* these have been trimmed down from the colors-based scheme for simplicity of testing
78     in the MPI scheme. */
79     void Finley_ElementFile_markBoundaryElementNodes(index_t* mask,index_t offset,Finley_ElementFile* in,bool_t useLinear) {
80     dim_t i,NN,NN2,e;
81     index_t color,*lin_node;
82     if (in!=NULL&& in->numElements>0) {
83     index_t id[in->ReferenceElement->Type->numNodes];
84     for (i=0;i<in->ReferenceElement->Type->numNodes;i++) id[i]=i;
85     if (useLinear) {
86     NN=in->LinearReferenceElement->Type->numNodes;
87     lin_node=in->ReferenceElement->Type->linearNodes;
88     } else {
89     NN=in->ReferenceElement->Type->numNodes;
90     lin_node=id;
91     }
92     NN2=in->ReferenceElement->Type->numNodes;
93     for (e=0;e<in->elementDistribution->numBoundary;e++)
94     for (i=0;i<NN;i++)
95     mask[in->Nodes[INDEX2(lin_node[i],e+in->elementDistribution->numInternal,NN2)]-offset]=1;
96     }
97     }
98    
99     void Finley_ElementFile_markInternalElementNodes(index_t* mask,index_t offset,Finley_ElementFile* in,bool_t useLinear) {
100     dim_t i,NN,NN2,e;
101     index_t color,*lin_node;
102     if (in!=NULL && in->numElements>0) {
103     index_t id[in->ReferenceElement->Type->numNodes];
104     for (i=0;i<in->ReferenceElement->Type->numNodes;i++) id[i]=i;
105     if (useLinear) {
106     NN=in->LinearReferenceElement->Type->numNodes;
107     lin_node=in->ReferenceElement->Type->linearNodes;
108     } else {
109     NN=in->ReferenceElement->Type->numNodes;
110     lin_node=id;
111     }
112     NN2=in->ReferenceElement->Type->numNodes;
113    
114     for (e=0;e<in->elementDistribution->numInternal;e++)
115     for (i=0;i<NN;i++)
116     mask[in->Nodes[INDEX2(lin_node[i],e,NN2)]-offset]=1;
117     }
118     }
119    
120     void Finley_ElementFile_markBoundaryElementDOF(index_t* mask,index_t offset,index_t *degreeOfFreedom,Finley_ElementFile* in,bool_t useLinear) {
121     dim_t i,NN,NN2,e;
122     index_t color,*lin_node;
123     if (in!=NULL&& in->numElements>0) {
124     index_t id[in->ReferenceElement->Type->numNodes];
125     for (i=0;i<in->ReferenceElement->Type->numNodes;i++) id[i]=i;
126     if (useLinear) {
127     NN=in->LinearReferenceElement->Type->numNodes;
128     lin_node=in->ReferenceElement->Type->linearNodes;
129     } else {
130     NN=in->ReferenceElement->Type->numNodes;
131     lin_node=id;
132     }
133     NN2=in->ReferenceElement->Type->numNodes;
134     for (e=0;e<in->elementDistribution->numBoundary;e++)
135     for (i=0;i<NN;i++)
136     mask[degreeOfFreedom[in->Nodes[INDEX2(lin_node[i],e+in->elementDistribution->numInternal,NN2)]]-offset]=1;
137     }
138     }
139    
140     void Finley_ElementFile_markInternalElementDOF(index_t* mask,index_t offset,index_t *degreeOfFreedom, Finley_ElementFile* in,bool_t useLinear) {
141     dim_t i,NN,NN2,e;
142     index_t color,*lin_node;
143     if (in!=NULL && in->numElements>0) {
144     index_t id[in->ReferenceElement->Type->numNodes];
145     for (i=0;i<in->ReferenceElement->Type->numNodes;i++) id[i]=i;
146     if (useLinear) {
147     NN=in->LinearReferenceElement->Type->numNodes;
148     lin_node=in->ReferenceElement->Type->linearNodes;
149     } else {
150     NN=in->ReferenceElement->Type->numNodes;
151     lin_node=id;
152     }
153     NN2=in->ReferenceElement->Type->numNodes;
154    
155     for (e=0;e<in->elementDistribution->numInternal;e++)
156     for (i=0;i<NN;i++)
157     mask[degreeOfFreedom[in->Nodes[INDEX2(lin_node[i],e,NN2)]]-offset]=1;
158     }
159     }
160     #endif
161    
162 jgs 82 /*
163     * $Log$
164 jgs 150 * Revision 1.4 2005/09/15 03:44:22 jgs
165     * Merge of development branch dev-02 back to main trunk on 2005-09-15
166     *
167     * Revision 1.3.2.1 2005/09/07 06:26:18 gross
168     * the solver from finley are put into the standalone package paso now
169     *
170 jgs 126 * Revision 1.3 2005/07/22 03:53:08 jgs
171     * Merge of development branch back to main trunk on 2005-07-22
172     *
173 jgs 123 * Revision 1.2 2005/07/08 04:07:50 jgs
174     * Merge of development branch back to main trunk on 2005-07-08
175 jgs 82 *
176 jgs 126 * Revision 1.1.1.1.2.2 2005/07/18 10:34:54 gross
177     * some informance improvements when reading meshes
178     *
179 jgs 123 * Revision 1.1.1.1.2.1 2005/06/29 02:34:49 gross
180     * some changes towards 64 integers in finley
181     *
182     * Revision 1.1.1.1 2004/10/26 06:53:57 jgs
183     * initial import of project esys2
184     *
185 jgs 82 * Revision 1.1.1.1 2004/06/24 04:00:40 johng
186     * Initial version of eys using boost-python.
187     *
188     *
189     */

Properties

Name Value
svn:eol-style native
svn:keywords Author Date Id Revision

  ViewVC Help
Powered by ViewVC 1.1.26