Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
ElmerCSC
GitHub Repository: ElmerCSC/elmerfem
Path: blob/devel/meshgen2d/src/TriangleNELayer.cpp
3196 views
1
#include "TriangleNELayer.h"
2
#include "TriangleElement.h"
3
4
#define LL grid[j*m+i+1]
5
#define LR grid[(j+1)*m+i+1]
6
#define UR grid[(j+1)*m+i]
7
#define UL grid[j*m+i]
8
9
void TriangleNELayer::
10
discretize(NodeMap& fixedNodes, NodeMap& allNodes, std::list< Element* >& allElements)
11
{
12
int i, j;
13
14
int m = edges[1]->size();
15
int n = edges[0]->size();
16
17
makeGrid( allNodes, m, n );
18
19
std::vector<BoundaryElement*> bels[4];
20
for (i = 0; i < 4; i++)
21
edges[i]->elements(bels[i], directions[i]);
22
23
for( j = 0; j < (n - 1); ++j)
24
for( i = 0; i < (m - 1); ++i)
25
{
26
TriangleElement *t;
27
28
t = new TriangleElement( LL, LR, UR );
29
allElements.push_back( t );
30
31
if (i == m - 2)
32
bels[0][j]->setLeft(t->elementId());
33
if (j == n - 2)
34
bels[1][m - 2 - i]->setLeft(t->elementId());
35
36
t = new TriangleElement( LL, UR, UL );
37
allElements.push_back( t );
38
39
if (i == 0)
40
bels[2][n - 2 - j]->setLeft(t->elementId());
41
if (j == 0)
42
bels[3][i]->setLeft(t->elementId());
43
}
44
45
delete [] grid;
46
}
47
48
void TriangleNWLayer::
49
discretize(NodeMap& fixedNodes, NodeMap& allNodes, std::list< Element* >& allElements)
50
{
51
int i, j;
52
53
int m = edges[1]->size();
54
int n = edges[0]->size();
55
56
makeGrid( allNodes, m, n );
57
58
std::vector<BoundaryElement*> bels[4];
59
for (i = 0; i < 4; i++)
60
edges[i]->elements(bels[i], directions[i]);
61
62
for( j = 0; j < (n - 1); ++j)
63
for( i = 0; i < (m - 1); ++i)
64
{
65
TriangleElement *t;
66
67
t = new TriangleElement( LL, LR, UL);
68
allElements.push_back( t );
69
70
if (i == m - 2)
71
bels[0][j]->setLeft(t->elementId());
72
if (j == 0)
73
bels[3][i]->setLeft(t->elementId());
74
75
t = new TriangleElement( LR, UR, UL);
76
allElements.push_back( t );
77
78
if (i == 0)
79
bels[2][n - 2 - j]->setLeft(t->elementId());
80
if (j == n - 2)
81
bels[1][m - 2 - i]->setLeft(t->elementId());
82
}
83
84
delete [] grid;
85
}
86
87
void TriangleUJNELayer::
88
discretize(NodeMap& fixedNodes, NodeMap& allNodes, std::list< Element* >& allElements)
89
{
90
int i, j;
91
92
int m = edges[1]->size();
93
int n = edges[0]->size();
94
95
makeGrid( allNodes, m, n );
96
97
std::vector<BoundaryElement*> bels[4];
98
for (i = 0; i < 4; i++)
99
edges[i]->elements(bels[i], directions[i]);
100
101
for( j = 0; j < (n - 1); j += 2 )
102
{
103
for( i = m-2; i >= 0; i -= 2 )
104
{
105
TriangleElement *t;
106
107
t = new TriangleElement( LL, LR, UR );
108
allElements.push_back( t );
109
110
if (i == m - 2)
111
bels[0][j]->setLeft(t->elementId());
112
if (j == n - 2)
113
bels[1][m - 2 - i]->setLeft(t->elementId());
114
115
t = new TriangleElement( LL, UR, UL );
116
allElements.push_back( t );
117
118
if (i == 0)
119
bels[2][n - 2 - j]->setLeft(t->elementId());
120
if (j == 0)
121
bels[3][i]->setLeft(t->elementId());
122
}
123
for( i = m-3; i >= 0; i -= 2 )
124
{
125
TriangleElement *t;
126
127
t = new TriangleElement( LL, LR, UL);
128
allElements.push_back( t );
129
130
if (j == 0)
131
bels[3][i]->setLeft(t->elementId());
132
133
t = new TriangleElement( LR, UR, UL);
134
allElements.push_back( t );
135
136
if (i == 0)
137
bels[2][n - 2 - j]->setLeft(t->elementId());
138
if (j == n - 2)
139
bels[1][m - 2 - i]->setLeft(t->elementId());
140
}
141
}
142
143
for( j = 1; j < (n - 1); j += 2 )
144
{
145
for( i = m-2; i >= 0; i -= 2 )
146
{
147
TriangleElement *t;
148
149
t = new TriangleElement( LL, LR, UL);
150
allElements.push_back( t );
151
152
if (i == m - 2)
153
bels[0][j]->setLeft(t->elementId());
154
155
t = new TriangleElement( LR, UR, UL);
156
allElements.push_back( t );
157
158
if (i == 0)
159
bels[2][n - 2 - j]->setLeft(t->elementId());
160
if (j == n - 2)
161
bels[1][m - 2 - i]->setLeft(t->elementId());
162
}
163
for( i = m-3; i >= 0; i -= 2 )
164
{
165
TriangleElement *t;
166
167
t = new TriangleElement( LL, LR, UR );
168
allElements.push_back( t );
169
170
if (j == n - 2)
171
bels[1][m - 2 - i]->setLeft(t->elementId());
172
173
t = new TriangleElement( LL, UR, UL );
174
allElements.push_back( t );
175
176
if (i == 0)
177
bels[2][n - 2 - j]->setLeft(t->elementId());
178
}
179
}
180
181
delete [] grid;
182
}
183
184
void TriangleUJNWLayer::
185
discretize(NodeMap& fixedNodes, NodeMap& allNodes, std::list< Element* >& allElements)
186
{
187
int i, j;
188
189
int m = edges[1]->size();
190
int n = edges[0]->size();
191
192
makeGrid( allNodes, m, n );
193
194
std::vector<BoundaryElement*> bels[4];
195
for (i = 0; i < 4; i++)
196
edges[i]->elements(bels[i], directions[i]);
197
198
for( j = 0; j < (n - 1); j += 2 )
199
{
200
for( i = m-2; i >= 0; i -= 2 )
201
{
202
TriangleElement *t;
203
204
t = new TriangleElement( LL, LR, UL);
205
allElements.push_back( t );
206
207
if (i == m - 2)
208
bels[0][j]->setLeft(t->elementId());
209
if (j == 0)
210
bels[3][i]->setLeft(t->elementId());
211
212
t = new TriangleElement( LR, UR, UL);
213
allElements.push_back( t );
214
215
if (i == 0)
216
bels[2][n - 2 - j]->setLeft(t->elementId());
217
if (j == n - 2)
218
bels[1][m - 2 - i]->setLeft(t->elementId());
219
}
220
for( i = m-3; i >= 0; i -= 2 )
221
{
222
TriangleElement *t;
223
224
t = new TriangleElement( LL, LR, UR );
225
allElements.push_back( t );
226
227
if (j == n - 2)
228
bels[1][m - 2 - i]->setLeft(t->elementId());
229
230
t = new TriangleElement( LL, UR, UL );
231
allElements.push_back( t );
232
233
if (i == 0)
234
bels[2][n - 2 - j]->setLeft(t->elementId());
235
if (j == 0)
236
bels[3][i]->setLeft(t->elementId());
237
}
238
}
239
240
for( j = 1; j < (n - 1); j += 2 )
241
{
242
for( i = m-2; i >= 0; i -= 2 )
243
{
244
TriangleElement *t;
245
246
t = new TriangleElement( LL, LR, UR );
247
allElements.push_back( t );
248
249
if (i == m - 2)
250
bels[0][j]->setLeft(t->elementId());
251
if (j == n - 2)
252
bels[1][m - 2 - i]->setLeft(t->elementId());
253
254
t = new TriangleElement( LL, UR, UL );
255
allElements.push_back( t );
256
257
if (i == 0)
258
bels[2][n - 2 - j]->setLeft(t->elementId());
259
}
260
for( i = m-3; i >= 0; i -= 2 )
261
{
262
TriangleElement *t;
263
264
t = new TriangleElement( LL, LR, UL);
265
allElements.push_back( t );
266
267
t = new TriangleElement( LR, UR, UL);
268
allElements.push_back( t );
269
270
if (i == 0)
271
bels[2][n - 2 - j]->setLeft(t->elementId());
272
if (j == n - 2)
273
bels[1][m - 2 - i]->setLeft(t->elementId());
274
}
275
}
276
277
delete [] grid;
278
}
279
280
void TriangleFBNELayer::
281
discretize(NodeMap& fixedNodes, NodeMap& allNodes, std::list< Element* >& allElements)
282
{
283
int i, j;
284
285
int m = edges[1]->size();
286
int n = edges[0]->size();
287
288
makeGrid( allNodes, m, n );
289
290
std::vector<BoundaryElement*> bels[4];
291
for (i = 0; i < 4; i++)
292
edges[i]->elements(bels[i], directions[i]);
293
294
for( j = 0; j < (n - 1); j += 2 )
295
for( i = m-2; i >= 0; --i )
296
{
297
TriangleElement *t;
298
299
t = new TriangleElement( LL, LR, UR );
300
allElements.push_back( t );
301
302
if (i == m - 2)
303
bels[0][j]->setLeft(t->elementId());
304
if (j == n - 2)
305
bels[1][m - 2 - i]->setLeft(t->elementId());
306
307
t = new TriangleElement( LL, UR, UL );
308
allElements.push_back( t );
309
310
if (i == 0)
311
bels[2][n - 2 - j]->setLeft(t->elementId());
312
if (j == 0)
313
bels[3][i]->setLeft(t->elementId());
314
}
315
316
for( j = 1; j < (n - 1); j += 2 )
317
for( i = m-2; i >= 0; --i )
318
{
319
TriangleElement *t;
320
321
t = new TriangleElement( LL, LR, UL);
322
allElements.push_back( t );
323
324
if (i == m - 2)
325
bels[0][j]->setLeft(t->elementId());
326
327
t = new TriangleElement( LR, UR, UL);
328
allElements.push_back( t );
329
330
if (i == 0)
331
bels[2][n - 2 - j]->setLeft(t->elementId());
332
if (j == n - 2)
333
bels[1][m - 2 - i]->setLeft(t->elementId());
334
}
335
336
delete [] grid;
337
}
338
339
void TriangleFBNWLayer::
340
discretize(NodeMap& fixedNodes, NodeMap& allNodes, std::list< Element* >& allElements)
341
{
342
int i, j;
343
int m = edges[1]->size();
344
int n = edges[0]->size();
345
346
makeGrid( allNodes, m, n );
347
348
std::vector<BoundaryElement*> bels[4];
349
for (i = 0; i < 4; i++)
350
edges[i]->elements(bels[i], directions[i]);
351
352
for( j = 0; j < (n - 1); j += 2 )
353
for( i = m-2; i >= 0; --i )
354
{
355
TriangleElement *t;
356
357
t = new TriangleElement( LL, LR, UL);
358
allElements.push_back( t );
359
360
if (i == m - 2)
361
bels[0][j]->setLeft(t->elementId());
362
if (j == 0)
363
bels[3][i]->setLeft(t->elementId());
364
365
t = new TriangleElement( LR, UR, UL);
366
allElements.push_back( t );
367
368
if (i == 0)
369
bels[2][n - 2 - j]->setLeft(t->elementId());
370
if (j == n - 2)
371
bels[1][m - 2 - i]->setLeft(t->elementId());
372
}
373
374
for( j = 1; j < (n - 1); j += 2 )
375
for( i = m-2; i >= 0; --i )
376
{
377
TriangleElement *t;
378
379
t = new TriangleElement( LL, LR, UR );
380
allElements.push_back( t );
381
382
if (i == m - 2)
383
bels[0][j]->setLeft(t->elementId());
384
if (j == n - 2)
385
bels[1][m - 2 - i]->setLeft(t->elementId());
386
387
t = new TriangleElement( LL, UR, UL );
388
allElements.push_back( t );
389
390
if (i == 0)
391
bels[2][n - 2 - j]->setLeft(t->elementId());
392
}
393
394
delete [] grid;
395
}
396
397