/[escript]/branches/arrayview_from_1695_trunk/finley/src/ElementFile.h
ViewVC logotype

Annotation of /branches/arrayview_from_1695_trunk/finley/src/ElementFile.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 782 - (hide annotations)
Tue Jul 18 00:47:47 2006 UTC (13 years, 1 month ago) by bcumming
Original Path: trunk/finley/src/ElementFile.h
File MIME type: text/plain
File size: 6675 byte(s)
Large number of changes to Finley for meshing in MPI.

- optimisation and neatening up of rectcanglular mesh generation code
- first and second order 1D, 2D and 3D rectangular meshes are now
  available in finley and escript using MPI.
- reduced meshes now generated in MPI, and interpolation to and from 
  reduced data types now supported.  

1 jgs 150 /*
2 elspeth 626 ************************************************************
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 jgs 82
13 jgs 150 /* Version: $Id$ */
14    
15 jgs 82 #ifndef INC_FINLEY_ELEMENTFILE
16     #define INC_FINLEY_ELEMENTFILE
17    
18 jgs 150 #include "Finley.h"
19 gross 776 #include "NodeFile.h"
20 jgs 82 #include "ReferenceElements.h"
21 robwdcock 682 #include "escript/DataC.h"
22 jgs 82
23 bcumming 730 #ifdef PASO_MPI
24     #include "paso/Paso_MPI.h"
25     #include "Distribution.h"
26     #endif
27    
28 gross 776 struct Finley_ElementFile_Jacobeans {
29 gross 777 Finley_Status_t status; /* status of mesh when jacobeans where updated last time */
30 gross 781 dim_t numDim; /* spatial dimension */
31 gross 777 Finley_RefElement* ReferenceElement; /* reference elemnt used to calculate jacobeans (this is a borrowd reference) */
32     double* volume; /* local volume */
33     double* DSDX; /* derivatives of shape functions in global coordinates at quadrature points*/
34 gross 776 };
35    
36     typedef struct Finley_ElementFile_Jacobeans Finley_ElementFile_Jacobeans;
37    
38 jgs 82 struct Finley_ElementFile {
39 bcumming 730 #ifdef PASO_MPI
40     Paso_MPIInfo *MPIInfo;
41     Finley_ElementDistribution *elementDistribution;
42 bcumming 782 index_t *Dom;
43 bcumming 730 #endif
44 jgs 82
45     Finley_RefElement* ReferenceElement; /* the reference element, see
46     Reference element.c */
47    
48     Finley_RefElement* LinearReferenceElement; /* the reference element for
49     the linear mesh. it is
50     vital that both are using
51     the same quadrature
52     scheme */
53    
54 jgs 123 dim_t numElements; /* number of elements. */
55    
56     index_t *Id; /* Id[i] is the id nmber of
57 jgs 82 node i. this number is not
58     used but useful when
59     elements are resorted. in
60     the entire code the term
61     'element id' refers to i
62     but nor to Id[i] if not
63     explicitly stated
64     otherwise. */
65    
66 jgs 123 index_t *Tag; /* Tag[i] is the tag of
67 jgs 82 element i. */
68    
69 jgs 123 index_t *Nodes; /* Nodes[INDEX(k, i,
70 jgs 82 ReferenceElement.Type.numNodes)
71     is the k-the node in the
72     i-the element. note that
73     in the way the nodes are
74     ordered Nodes[INDEX(k, i,
75     LinearReferenceElement.Type.numNodes)
76     is k-the node of element i
77     when refering to the
78     linear version of the
79     mesh. */
80 jgs 123 index_t minColor; /* minimum color */
81     index_t maxColor; /* maximum color */
82 gross 532 index_t *Color; /* assigns each element a color. elements with the same color */
83     /* are don't share a node so they can be processed simultaneously */
84     /* at anytime Color must provide a valid value. In any case one can set */
85     /* Color[e]=e for all e */
86     index_t order; /* order of the element */
87    
88 gross 776 Finley_ElementFile_Jacobeans* jacobeans; /* element jacobeans */
89     Finley_ElementFile_Jacobeans* jacobeans_reducedS; /* element jacobeans for reduced order of shape function*/
90     Finley_ElementFile_Jacobeans* jacobeans_reducedQ; /* element jacobeans for reduced integration order*/
91     Finley_ElementFile_Jacobeans* jacobeans_reducedS_reducedQ; /* element jacobeans for reduced integration order and reduced order of shape function*/
92    
93 jgs 82 };
94    
95     typedef struct Finley_ElementFile Finley_ElementFile;
96    
97 bcumming 730 #ifndef PASO_MPI
98 jgs 123 Finley_ElementFile* Finley_ElementFile_alloc(ElementTypeId,dim_t);
99 bcumming 730 #else
100     Finley_ElementFile* Finley_ElementFile_alloc( ElementTypeId, dim_t, Paso_MPIInfo* );
101 bcumming 751 void Finley_ElementFile_markInternalElementNodes(index_t* mask,index_t offset,Finley_ElementFile* in,bool_t useLinear);
102     void Finley_ElementFile_markBoundaryElementNodes(index_t* mask,index_t offset,Finley_ElementFile* in,bool_t useLinear);
103 bcumming 782 void Finley_ElementFile_markInternalElementDOF(index_t* mask,index_t offset,index_t *degreeOfFreedom, Finley_ElementFile* in,bool_t useLinear, index_t startElement);
104     void Finley_ElementFile_markBoundaryElementDOF(index_t* mask,index_t offset,index_t *degreeOfFreedom,Finley_ElementFile* in,bool_t useLinear, index_t startElement);
105     void Finley_ElementFile_setDomainFlags( Finley_ElementFile *in );
106 bcumming 730 #endif
107    
108 jgs 82 void Finley_ElementFile_dealloc(Finley_ElementFile*);
109 jgs 123 void Finley_ElementFile_improveColoring(Finley_ElementFile* in,dim_t numNodes,dim_t* degreeOfFreedom);
110 jgs 82 void Finley_ElementFile_optimizeDistribution(Finley_ElementFile** in);
111 jgs 123 void Finley_ElementFile_setNodeRange(dim_t*,dim_t*,Finley_ElementFile*);
112     void Finley_ElementFile_relableNodes(dim_t*,dim_t,Finley_ElementFile*);
113     void Finley_ElementFile_markNodes(dim_t*,dim_t,Finley_ElementFile*,dim_t);
114     void Finley_ElementFile_scatter(dim_t*,Finley_ElementFile*,Finley_ElementFile*);
115     void Finley_ElementFile_gather(dim_t*,Finley_ElementFile*,Finley_ElementFile*);
116     void Finley_ElementFile_copyTable(dim_t,Finley_ElementFile*,dim_t,dim_t,Finley_ElementFile*);
117     void Finley_ElementFile_allocTable(Finley_ElementFile*,dim_t);
118 jgs 82 void Finley_ElementFile_deallocTable(Finley_ElementFile*);
119 jgs 123 void Finley_ElementFile_prepare(Finley_ElementFile** in,dim_t numNodes,dim_t* degreeOfFreedom);
120 gross 767 void Finley_ElementFile_setTags(Finley_ElementFile*,const int,escriptDataC*);
121 gross 777 Finley_ElementFile_Jacobeans* Finley_ElementFile_Jacobeans_alloc(Finley_RefElement*);
122 gross 776 void Finley_ElementFile_Jacobeans_dealloc(Finley_ElementFile_Jacobeans*);
123     Finley_ElementFile_Jacobeans* Finley_ElementFile_borrowJacobeans(Finley_ElementFile*, Finley_NodeFile*, bool_t, bool_t);
124 jgs 82
125 gross 776
126 jgs 82 #endif /* #ifndef INC_FINLEY_ELEMENTFILE */
127    
128     /*
129     * $Log$
130 jgs 150 * Revision 1.3 2005/09/15 03:44:21 jgs
131     * Merge of development branch dev-02 back to main trunk on 2005-09-15
132     *
133     * Revision 1.2.2.1 2005/09/07 06:26:18 gross
134     * the solver from finley are put into the standalone package paso now
135     *
136 jgs 123 * Revision 1.2 2005/07/08 04:07:49 jgs
137     * Merge of development branch back to main trunk on 2005-07-08
138 jgs 82 *
139 jgs 123 * Revision 1.1.1.1.2.1 2005/06/29 02:34:49 gross
140     * some changes towards 64 integers in finley
141     *
142     * Revision 1.1.1.1 2004/10/26 06:53:57 jgs
143     * initial import of project esys2
144     *
145 jgs 82 * Revision 1.1.1.1 2004/06/24 04:00:40 johng
146     * Initial version of eys using boost-python.
147     *
148     *
149     */

Properties

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

  ViewVC Help
Powered by ViewVC 1.1.26