/[escript]/branches/doubleplusgood/dudley/src/Mesh.cpp
ViewVC logotype

Contents of /branches/doubleplusgood/dudley/src/Mesh.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3152 - (show annotations)
Fri Sep 3 05:48:31 2010 UTC (8 years, 6 months ago) by jfenwick
Original Path: branches/domexper/dudley/src/Mesh.c
File MIME type: text/plain
File size: 5653 byte(s)
Collapsed duplicate fields
1 /*******************************************************
2 *
3 * Copyright (c) 2003-2010 by University of Queensland
4 * Earth Systems Science Computational Center (ESSCC)
5 * http://www.uq.edu.au/esscc
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 *******************************************************/
12
13
14 /**************************************************************/
15
16 /* Dudley: Mesh */
17
18 /**************************************************************/
19
20 #include "Mesh.h"
21
22 /**************************************************************/
23
24 /* allocates a Mesh with name name for elements of type id using an integration order. If order is negative, */
25 /* the most appropriate order is selected indepently. */
26
27 Dudley_Mesh* Dudley_Mesh_alloc(char* name,dim_t numDim, Paso_MPIInfo *mpi_info)
28 {
29 Dudley_Mesh *out;
30
31 /* allocate the return value */
32
33 out=MEMALLOC(1,Dudley_Mesh);
34 if (Dudley_checkPtr(out)) return NULL;
35 out->Name=NULL;
36 out->Nodes=NULL;
37 out->Elements=NULL;
38 out->FaceElements=NULL;
39 out->Points=NULL;
40 out->TagMap=NULL;
41 out->reference_counter=0;
42
43 out->FullFullPattern=NULL;
44 out->FullReducedPattern=NULL;
45 out->ReducedFullPattern=NULL;
46 out->ReducedReducedPattern=NULL;
47 out->MPIInfo = Paso_MPIInfo_getReference( mpi_info );
48 if (! Dudley_noError()) {
49 Dudley_Mesh_free(out);
50 return NULL;
51 }
52 /* copy name: */
53
54 out->Name=MEMALLOC(strlen(name)+1,char);
55 if (Dudley_checkPtr(out->Name)) {
56 Dudley_Mesh_free(out);
57 return NULL;
58 }
59 strcpy(out->Name,name);
60
61 /* allocate node table: */
62 out->Nodes=Dudley_NodeFile_alloc( numDim, mpi_info );
63 if (! Dudley_noError()) {
64 Dudley_Mesh_free(out);
65 return NULL;
66 }
67 out->approximationOrder=-1;
68 out->reducedApproximationOrder=-1;
69 out->integrationOrder=-1;
70 out->reducedIntegrationOrder=-1;
71
72 out->Elements=NULL;
73 out->FaceElements=NULL;
74 out->Points=NULL;
75 out->reference_counter++;
76 return out;
77 }
78
79 /* returns a reference to Dudley_Mesh in */
80
81 Dudley_Mesh* Dudley_Mesh_reference(Dudley_Mesh* in) {
82 if (in!=NULL) ++(in->reference_counter);
83 return in;
84 }
85
86 /* freeates a mesh: */
87
88 void Dudley_Mesh_free(Dudley_Mesh* in) {
89 if (in!=NULL) {
90 in->reference_counter--;
91 if (in->reference_counter<1) {
92 MEMFREE(in->Name);
93 Dudley_NodeFile_free(in->Nodes);
94 Dudley_ElementFile_free(in->FaceElements);
95 Dudley_ElementFile_free(in->Elements);
96 Dudley_ElementFile_free(in->Points);
97 Dudley_TagMap_free(in->TagMap);
98 Paso_SystemMatrixPattern_free(in->FullFullPattern);
99 Paso_SystemMatrixPattern_free(in->FullReducedPattern);
100 Paso_SystemMatrixPattern_free(in->ReducedFullPattern);
101 Paso_SystemMatrixPattern_free(in->ReducedReducedPattern);
102 Paso_MPIInfo_free( in->MPIInfo );
103 MEMFREE(in);
104 }
105 }
106 }
107
108 /**************************************************************/
109
110 /* returns the spatial dimension of the mesh: */
111
112 dim_t Dudley_Mesh_getDim(Dudley_Mesh *in) {
113 return in->Nodes->numDim;
114 }
115
116 void Dudley_Mesh_setElements(Dudley_Mesh* self,Dudley_ElementFile *elements) {
117 Dudley_ElementFile_free(self->Elements);
118 self->Elements=elements;
119 }
120 void Dudley_Mesh_setFaceElements(Dudley_Mesh* self,Dudley_ElementFile *elements) {
121 Dudley_ElementFile_free(self->FaceElements);
122 self->FaceElements=elements;
123 }
124 void Dudley_Mesh_setPoints(Dudley_Mesh* self,Dudley_ElementFile *elements) {
125 Dudley_ElementFile_free(self->Points);
126 self->Points=elements;
127 }
128 int Dudley_Mesh_getStatus(Dudley_Mesh* in) {
129 if (in == NULL) {
130 return -1;
131 } else if (in->Nodes == NULL) {
132 return -1;
133 } else {
134 return in->Nodes->status;
135 }
136 }
137
138 void Mesh_setOrders(Dudley_Mesh *in)
139 {
140 const dim_t order_max=9999999;
141 dim_t locals[3];
142 #ifdef PASO_MPI
143 dim_t globals[4];
144 #endif
145 locals[0]=order_max; locals[1]=order_max; locals[2]=order_max;
146
147 if ( in->Elements!=NULL) {
148 if (in->Elements->numElements > 0) {
149 locals[0]=MIN(locals[0], in->Elements->referenceElementSet->referenceElement->BasisFunctions->Type->numOrder);
150 locals[1]=MIN(locals[1], in->Elements->referenceElementSet->referenceElement->integrationOrder);
151 locals[2]=MIN(locals[2], in->Elements->referenceElementSet->referenceElementReducedQuadrature->integrationOrder);
152 }
153 }
154 if ( in->FaceElements!=NULL) {
155 if (in->FaceElements->numElements > 0) {
156 locals[0]=MIN(locals[0], in->FaceElements->referenceElementSet->referenceElement->BasisFunctions->Type->numOrder);
157 locals[1]=MIN(locals[1], in->FaceElements->referenceElementSet->referenceElement->integrationOrder);
158 locals[2]=MIN(locals[2], in->FaceElements->referenceElementSet->referenceElementReducedQuadrature->integrationOrder);
159 }
160
161
162 }
163
164 #ifdef PASO_MPI
165 MPI_Allreduce( locals, globals, 4, MPI_INT, MPI_MIN, in->MPIInfo->comm );
166 in->approximationOrder=(globals[0] < order_max ? globals[0] : -1 );
167 in->reducedApproximationOrder=(globals[1] < order_max ? globals[1] : -1 );
168 in->integrationOrder=(globals[2] < order_max ? globals[2] : -1 );
169 in->reducedIntegrationOrder=(globals[3] < order_max ? globals[3] : -1 );
170 #else
171 in->approximationOrder=(locals[0] < order_max ? locals[0] : -1 );
172 in->reducedApproximationOrder=(locals[0] < order_max ? locals[0] : -1 );
173 in->integrationOrder=(locals[1] < order_max ? locals[1] : -1 );
174 in->reducedIntegrationOrder=(locals[2] < order_max ? locals[2] : -1 );
175 #endif
176
177
178 }
179

Properties

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

  ViewVC Help
Powered by ViewVC 1.1.26