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: write Mesh */
18
/**************************************************************/
22
/**************************************************************/
24
/* writes the mesh to the external file fname unsing the Dudley file format: */
26
void Dudley_Mesh_write(Dudley_Mesh * in, char *fname)
28
char error_msg[LenErrorMsg_MAX];
31
Dudley_TagMap *tag_map = in->TagMap;
33
if (in->MPIInfo->size > 1)
35
Dudley_setError(IO_ERROR, "Mesh_write: only single processor runs are supported.");
40
f = fopen(fname, "w");
43
sprintf(error_msg, "Mesh_write: Opening file %s for writing failed.", fname);
44
Dudley_setError(IO_ERROR, error_msg);
50
fprintf(f, "%s\n", in->Name);
54
if (in->Nodes != NULL)
56
numDim = Dudley_Mesh_getDim(in);
57
fprintf(f, "%1dD-Nodes %d\n", numDim, in->Nodes->numNodes);
58
for (i = 0; i < in->Nodes->numNodes; i++)
60
fprintf(f, "%d %d %d", in->Nodes->Id[i], in->Nodes->globalDegreesOfFreedom[i], in->Nodes->Tag[i]);
61
for (j = 0; j < numDim; j++)
62
fprintf(f, " %20.15e", in->Nodes->Coordinates[INDEX2(j, i, numDim)]);
68
fprintf(f, "0D-Nodes 0\n");
73
if (in->Elements != NULL)
75
fprintf(f, "%s %d\n", in->Elements->ename /*referenceElementSet->referenceElement->Type->Name */ ,
76
in->Elements->numElements);
77
NN = in->Elements->numNodes;
78
for (i = 0; i < in->Elements->numElements; i++)
80
fprintf(f, "%d %d", in->Elements->Id[i], in->Elements->Tag[i]);
81
for (j = 0; j < NN; j++)
82
fprintf(f, " %d", in->Nodes->Id[in->Elements->Nodes[INDEX2(j, i, NN)]]);
88
fprintf(f, "Tet4 0\n");
91
/* write face elements: */
92
if (in->FaceElements != NULL)
94
fprintf(f, "%s %d\n", in->FaceElements->ename /*referenceElementSet->referenceElement->Type->Name */ ,
95
in->FaceElements->numElements);
96
NN = in->FaceElements->numNodes;
97
for (i = 0; i < in->FaceElements->numElements; i++)
99
fprintf(f, "%d %d", in->FaceElements->Id[i], in->FaceElements->Tag[i]);
100
for (j = 0; j < NN; j++)
101
fprintf(f, " %d", in->Nodes->Id[in->FaceElements->Nodes[INDEX2(j, i, NN)]]);
107
fprintf(f, "Tri3 0\n");
111
if (in->Points != NULL)
113
fprintf(f, "%s %d\n", in->Points->ename /*referenceElementSet->referenceElement->Type->Name */ ,
114
in->Points->numElements);
115
for (i = 0; i < in->Points->numElements; i++)
117
fprintf(f, "%d %d %d\n", in->Points->Id[i], in->Points->Tag[i],
118
in->Nodes->Id[in->Points->Nodes[INDEX2(0, i, 1)]]);
123
fprintf(f, "Point1 0\n");
129
fprintf(f, "Tags\n");
132
fprintf(f, "%s %d\n", tag_map->name, tag_map->tag_key);
133
tag_map = tag_map->next;
138
printf("mesh %s has been written to file %s\n", in->Name, fname);
142
void Dudley_PrintMesh_Info(Dudley_Mesh * in, bool_t full)
144
int NN, i, j, numDim;
145
Dudley_TagMap *tag_map = in->TagMap;
147
fprintf(stdout, "Dudley_PrintMesh_Info running on CPU %d of %d\n", in->MPIInfo->rank, in->MPIInfo->size);
148
fprintf(stdout, "\tMesh name '%s'\n", in->Name);
149
fprintf(stdout, "\tApproximation order %d\n", in->approximationOrder);
150
fprintf(stdout, "\tReduced Approximation order %d\n", in->reducedApproximationOrder);
151
fprintf(stdout, "\tIntegration order %d\n", in->integrationOrder);
152
fprintf(stdout, "\tReduced Integration order %d\n", in->reducedIntegrationOrder);
155
if (in->Nodes != NULL)
157
numDim = Dudley_Mesh_getDim(in);
158
fprintf(stdout, "\tNodes: %1dD-Nodes %d\n", numDim, in->Nodes->numNodes);
161
fprintf(stdout, "\t Id Tag gDOF gNI grDfI grNI: Coordinates\n");
162
for (i = 0; i < in->Nodes->numNodes; i++)
164
fprintf(stdout, "\t %5d %5d %5d %5d %5d %5d: ", in->Nodes->Id[i], in->Nodes->Tag[i],
165
in->Nodes->globalDegreesOfFreedom[i], in->Nodes->globalNodesIndex[i],
166
in->Nodes->globalReducedDOFIndex[i], in->Nodes->globalReducedNodesIndex[i]);
167
for (j = 0; j < numDim; j++)
168
fprintf(stdout, " %20.15e", in->Nodes->Coordinates[INDEX2(j, i, numDim)]);
169
fprintf(stdout, "\n");
175
fprintf(stdout, "\tNodes: 0D-Nodes 0\n");
178
/* write elements: */
179
if (in->Elements != NULL)
181
int mine = 0, overlap = 0;
182
for (i = 0; i < in->Elements->numElements; i++)
184
if (in->Elements->Owner[i] == in->MPIInfo->rank)
189
fprintf(stdout, "\tElements: %s %d (TypeId=%d) owner=%d overlap=%d\n",
190
in->Elements->ename /*referenceElementSet->referenceElement->Type->Name */ , in->Elements->numElements,
191
in->Elements->etype /*referenceElementSet->referenceElement->Type->TypeId */ , mine, overlap);
192
NN = in->Elements->numNodes;
195
fprintf(stdout, "\t Id Tag Owner Color: Nodes\n");
196
for (i = 0; i < in->Elements->numElements; i++)
198
fprintf(stdout, "\t %5d %5d %5d %5d: ", in->Elements->Id[i], in->Elements->Tag[i],
199
in->Elements->Owner[i], in->Elements->Color[i]);
200
for (j = 0; j < NN; j++)
201
fprintf(stdout, " %5d", in->Nodes->Id[in->Elements->Nodes[INDEX2(j, i, NN)]]);
202
fprintf(stdout, "\n");
208
fprintf(stdout, "\tElements: Tet4 0\n");
211
/* write face elements: */
212
if (in->FaceElements != NULL)
214
int mine = 0, overlap = 0;
215
for (i = 0; i < in->FaceElements->numElements; i++)
217
if (in->FaceElements->Owner[i] == in->MPIInfo->rank)
222
fprintf(stdout, "\tFace elements: %s %d (TypeId=%d) owner=%d overlap=%d\n",
223
in->FaceElements->ename /*referenceElementSet->referenceElement->Type->Name */ ,
224
in->FaceElements->numElements,
225
in->FaceElements->etype /*->referenceElementSet->referenceElement->Type->TypeId*/ , mine, overlap);
226
NN = in->FaceElements->numNodes;
229
fprintf(stdout, "\t Id Tag Owner Color: Nodes\n");
230
for (i = 0; i < in->FaceElements->numElements; i++)
232
fprintf(stdout, "\t %5d %5d %5d %5d: ", in->FaceElements->Id[i], in->FaceElements->Tag[i],
233
in->FaceElements->Owner[i], in->FaceElements->Color[i]);
234
for (j = 0; j < NN; j++)
235
fprintf(stdout, " %5d", in->Nodes->Id[in->FaceElements->Nodes[INDEX2(j, i, NN)]]);
236
fprintf(stdout, "\n");
242
fprintf(stdout, "\tFace elements: Tri3 0\n");
246
if (in->Points != NULL)
248
int mine = 0, overlap = 0;
249
for (i = 0; i < in->Points->numElements; i++)
251
if (in->Points->Owner[i] == in->MPIInfo->rank)
256
fprintf(stdout, "\tPoints: %s %d (TypeId=%d) owner=%d overlap=%d\n",
257
in->Points->ename /*->referenceElementSet->referenceElement->Type->Name*/ , in->Points->numElements,
258
in->Points->etype /*referenceElementSet->referenceElement->Type->TypeId */ , mine, overlap);
261
fprintf(stdout, "\t Id Tag Owner Color: Nodes\n");
262
for (i = 0; i < in->Points->numElements; i++)
264
fprintf(stdout, "\t %5d %5d %5d %5d %5d\n", in->Points->Id[i], in->Points->Tag[i],
265
in->Points->Owner[i], in->Points->Color[i], in->Nodes->Id[in->Points->Nodes[INDEX2(0, i, 1)]]);
271
fprintf(stdout, "\tPoints: Point1 0\n");
277
fprintf(stdout, "\tTags:\n");
280
fprintf(stdout, "\t %5d %s\n", tag_map->tag_key, tag_map->name);
281
tag_map = tag_map->next;