Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
ElmerCSC
GitHub Repository: ElmerCSC/elmerfem
Path: blob/devel/ElmerGUI/netgen/libsrc/interface/writefeap.cpp
3206 views
1
//
2
// Write FEAP file
3
// FEAP by Bob Taylor, Berkely
4
//
5
// contact Peter Wriggers or Albrecht Rieger, Hannover
6
// [email protected]
7
//
8
9
#include <mystdlib.h>
10
11
#include <myadt.hpp>
12
#include <linalg.hpp>
13
#include <csg.hpp>
14
#include <meshing.hpp>
15
16
namespace netgen
17
{
18
19
#include "writeuser.hpp"
20
21
22
void WriteFEAPFormat (const Mesh & mesh,
23
const string & filename)
24
25
{
26
// Feap format by A. Rieger
27
// [email protected]
28
29
int inverttets = mparam.inverttets;
30
//int invertsurf = mparam.inverttrigs;
31
32
int i, j;
33
34
double scale = 1; // globflags.GetNumFlag ("scale", 1);
35
36
ofstream outfile(filename.c_str());
37
38
outfile << "feap" << "\n";
39
outfile << mesh.GetNP();
40
outfile << ",";
41
outfile << mesh.GetNE();
42
outfile << ",";
43
outfile << "1,3,3,4" << "\n" << "\n";
44
outfile << "!numnp,numel,nummat,ndm,ndf,nen";
45
outfile << "\n";
46
47
outfile << "\n" << "\n";
48
outfile << "!node,, X Y Z" << "\n";
49
outfile << "COOR" << "\n";
50
outfile.precision(4);
51
outfile.setf (ios::fixed, ios::floatfield);
52
outfile.setf (ios::showpoint);
53
54
for (i = 1; i <= mesh.GetNP(); i++)
55
{
56
outfile.width(5);
57
outfile << i;
58
outfile << ",,";
59
outfile.width(10);
60
outfile << mesh.Point(i)(0)/scale << " ";
61
outfile.width(10);
62
outfile << mesh.Point(i)(1)/scale << " ";
63
outfile.width(10);
64
outfile << mesh.Point(i)(2)/scale << "\n";
65
}
66
67
outfile << "\n" << "\n";
68
outfile << "!elm,,mat, n1 n2 n3 n4" << "\n";
69
outfile << "ELEM" << "\n";
70
71
for (i = 1; i <= mesh.GetNE(); i++)
72
{
73
Element el = mesh.VolumeElement(i);
74
if (inverttets)
75
el.Invert();
76
77
78
outfile.width(5);
79
outfile << i;
80
outfile << ",,";
81
outfile << el.GetIndex();
82
outfile << ",";
83
84
85
for (j = 1; j <= el.NP(); j++)
86
{
87
outfile.width(8);
88
outfile << el.PNum(j);
89
}
90
outfile << "\n";
91
}
92
93
outfile << "\n" << "\n";
94
95
96
/*
97
98
//outfile << "SLOA" << "\n";
99
//outfile << "2,3,3" << "\n";
100
//outfile << GetNSE() << "\n";
101
outfile << "selm" << "\n" << GetNSE() << "\n";
102
for (i = 1; i <= GetNSE(); i++)
103
{
104
if (SurfaceElement(i).GetIndex())
105
{
106
outfile.width(8);
107
outfile << facedecoding.Get(SurfaceElement(i).GetIndex ()).surfnr;
108
//outfile.width(8);
109
//outfile << facedecoding.Get(SurfaceElement(i).GetIndex ()).domin;
110
//outfile.width(8);
111
//outfile << facedecoding.Get(SurfaceElement(i).GetIndex ()).domout;
112
}
113
else
114
outfile << " 0 0 0";
115
116
117
Element2d sel = SurfaceElement(i);
118
if (invertsurf)
119
sel.Invert();
120
//outfile.width(8);
121
//outfile << sel.GetNP();
122
//if (facedecoding.Get(SurfaceElement(i).GetIndex ()).surfnr == 4)
123
//{
124
for (j = 1; j <= sel.GetNP(); j++)
125
{
126
outfile.width(8);
127
outfile << sel.PNum(j);
128
}
129
//outfile.width(8);
130
//outfile << "0.0";
131
//outfile.width(8);
132
//outfile << "0.0";
133
//outfile.width(8);
134
//outfile << "1.0" << "\n";
135
//}
136
outfile << "\n";
137
//outfile << endl;
138
}
139
*/
140
141
142
143
// BEGIN CONTACT OUTPUT
144
/*
145
int masterindex, slaveindex;
146
cout << "Master Surface index = ";
147
cin >> masterindex;
148
cout << "Slave Surface index = ";
149
cin >> slaveindex;
150
151
152
// CONTACT SURFACE 1
153
outfile << "\n";
154
outfile << "\n";
155
outfile << "surface,1" << "\n";;
156
outfile.width(6);
157
outfile << "tria" << "\n";;
158
outfile.width(13);
159
outfile << "facet" << "\n";;
160
zz = 0;
161
for (i = 1; i <= mesh.GetNSE(); i++)
162
{
163
Element2d sel = mesh.SurfaceElement(i);
164
if (invertsurf)
165
sel.Invert();
166
if (mesh.GetFaceDescriptor(sel.GetIndex ()).BCProperty() == masterindex)
167
{
168
zz++;
169
outfile.width(14);
170
outfile << zz;
171
outfile << ",,";
172
for (j = 1; j <= sel.GetNP(); j++)
173
{
174
outfile << sel.PNum(j);
175
outfile << ",";
176
}
177
outfile << "\n";
178
}
179
}
180
181
182
// CONTACT SURFACE 2
183
outfile << "\n";
184
outfile << "\n";
185
outfile << "surface,2" << "\n";;
186
outfile.width(6);
187
outfile << "tria" << "\n";;
188
outfile.width(13);
189
outfile << "facet" << "\n";;
190
zz = 0;
191
for (i = 1; i <= mesh.GetNSE(); i++)
192
{
193
194
Element2d sel = mesh.SurfaceElement(i);
195
if (invertsurf)
196
sel.Invert();
197
if (mesh.GetFaceDescriptor(sel.GetIndex ()).BCProperty() == slaveindex)
198
{
199
zz++;
200
outfile.width(14);
201
outfile << zz;
202
outfile << ",,";
203
for (j = 1; j <= sel.GetNP(); j++)
204
{
205
outfile << sel.PNum(j);
206
outfile << ",";
207
}
208
outfile << "\n";
209
}
210
}
211
212
outfile << "\n";
213
outfile << "\n";
214
*/
215
216
// END CONTACT OUTPUT
217
218
cout << "done" << endl;
219
}
220
}
221
222