Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
ElmerCSC
GitHub Repository: ElmerCSC/elmerfem
Path: blob/devel/ElmerGUI/netgen/libsrc/interface/writetecplot.cpp
3206 views
1
//
2
//
3
// TECPLOT file by Jawor Georgiew
4
//
5
#include <mystdlib.h>
6
7
#include <myadt.hpp>
8
#include <linalg.hpp>
9
#include <csg.hpp>
10
#include <meshing.hpp>
11
12
13
14
namespace netgen
15
{
16
#include "writeuser.hpp"
17
18
void WriteTecPlotFormat (const Mesh & mesh,
19
const CSGeometry & geom,
20
const string & filename)
21
{
22
INDEX i;
23
int j, k, e, z;
24
Vec<3> n;
25
26
INDEX np = mesh.GetNP();
27
INDEX ne = mesh.GetNE();
28
INDEX nse = mesh.GetNSE();
29
30
ARRAY<int> sn(np);
31
ofstream outfile(filename.c_str());
32
33
outfile << "TITLE=\" " << filename << "\"" << endl;
34
35
// fill hashtable
36
37
INDEX_3_HASHTABLE<int> face2volelement(ne);
38
39
for (i = 1; i <= ne; i++)
40
{
41
const Element & el = mesh.VolumeElement(i);
42
INDEX_3 i3;
43
int l;
44
for (j = 1; j <= 4; j++) // loop over faces of tet
45
{
46
l = 0;
47
for (k = 1; k <= 4; k++)
48
if (k != j)
49
{
50
l++;
51
i3.I(l) = el.PNum(k);
52
}
53
i3.Sort();
54
face2volelement.Set (i3, i);
55
}
56
}
57
58
59
for (j = 1; j <= geom.GetNSurf(); j++) /* Flaeche Nummer j */
60
{
61
for (i = 1; i <= np; i++)
62
sn.Elem(i) = 0;
63
64
e = 0;
65
66
for (i = 1; i <= nse; i++)
67
{
68
const Element2d & el = mesh.SurfaceElement(i);
69
if (j == mesh.GetFaceDescriptor (el.GetIndex ()).SurfNr())
70
{
71
for (k = 1; k <= 3; k++)
72
sn.Elem(el.PNum(k)) = 1;
73
e++; /* e= Anzahl der neuen Elemente */
74
}
75
}
76
77
z = 0;
78
for (i = 1; i <= np; i++)
79
if (sn.Elem(i) == 1)
80
sn.Elem(i) = ++z;
81
82
outfile << "ZONE T=\" Surface " << j << " \", N=" << z
83
<< ", E=" << e << ", ET=TRIANGLE, F=FEPOINT" << endl;
84
85
for (i = 1; i <= np; i++)
86
if (sn.Elem(i) != 0)
87
{
88
n = geom.GetSurface(j) -> GetNormalVector ( mesh.Point(i) );
89
90
outfile << mesh.Point(i)(0) << " " /* Knoten Koordinaten */
91
<< mesh.Point(i)(1) << " "
92
<< mesh.Point(i)(2) << " "
93
<< n(0) << " "
94
<< n(1) << " "
95
<< n(2) << " "
96
<< i << endl;
97
}
98
99
100
for (i = 1; i <= nse; i++)
101
{
102
const Element2d & el = mesh.SurfaceElement(i);
103
if (j == mesh.GetFaceDescriptor(el.GetIndex ()).SurfNr())
104
/* FlaechenKnoten (3) */
105
outfile << sn.Get(el.PNum(1)) << " "
106
<< sn.Get(el.PNum(2)) << " "
107
<< sn.Get(el.PNum(3)) << endl;
108
109
/// Hier soll noch die Ausgabe der Nummer des angrenzenden
110
/// Vol.elements erfolgen !
111
112
for (k = 1; k <= nse; k++)
113
{
114
const Element2d & sel = mesh.SurfaceElement(k);
115
INDEX_3 i3;
116
for (j = 1; j <= 3; j++)
117
i3.I(j) = sel.PNum(j);
118
i3.Sort();
119
120
//int elind = face2volelement.Get(i3);
121
}
122
}
123
}
124
}
125
126
127
}
128
129