SALOME - SMESH
Main Page
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
aptrte.h
Go to the documentation of this file.
1
// SMESH MEFISTO2 : algorithm for meshing
2
//
3
// Copyright (C) 2006 Laboratoire J.-L. Lions UPMC Paris
4
//
5
// This library is free software; you can redistribute it and/or
6
// modify it under the terms of the GNU Lesser General Public
7
// License as published by the Free Software Foundation; either
8
// version 2.1 of the License.
9
//
10
// This library is distributed in the hope that it will be useful,
11
// but WITHOUT ANY WARRANTY; without even the implied warranty of
12
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
// Lesser General Public License for more details.
14
//
15
// You should have received a copy of the GNU Lesser General Public
16
// License along with this library; if not, write to the Free Software
17
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18
//
19
// See http://www.ann.jussieu.fr/~perronne or email Perronnet@ann.jussieu.fr
20
//
21
//
22
//
23
// File : aptrte.h
24
// Author : Alain PERRONNET
25
// Module : SMESH
26
// Date : 13 novembre 2006
27
28
#ifndef aptrte__h
29
#define aptrte__h
30
31
#include <climits>
// limites min max int long real ...
32
#ifndef WIN32
33
#include <unistd.h>
// gethostname, ...
34
#endif
35
#include <stdio.h>
36
#ifndef WIN32
37
#include <iostream>
// pour cout cin ...
38
#include <iomanip>
// pour le format des io setw, stx, setfill, ...
39
#endif
40
#include <string.h>
// pour les fonctions sur les chaines de caracteres
41
#include <ctype.h>
42
#include <stdlib.h>
43
#include <math.h>
// pour les fonctions mathematiques
44
#include <time.h>
45
46
#include <sys/types.h>
47
#ifndef WIN32
48
#include <sys/time.h>
49
#endif
50
51
#ifdef WNT
52
#if defined MEFISTO2D_EXPORTS
53
#define MEFISTO2D_EXPORT __declspec( dllexport )
54
#else
55
#define MEFISTO2D_EXPORT __declspec( dllimport )
56
#endif
57
#else
58
#define MEFISTO2D_EXPORT
59
#endif
60
61
MEFISTO2D_EXPORT
62
void
aptrte
(
Z
nutysu,
R
aretmx,
63
Z
nblf,
Z
*nudslf,
R2
*uvslf,
64
Z
nbpti,
R2
*uvpti,
65
Z
& nbst,
R2
* & uvst,
Z
& nbt,
Z
* & nust,
66
Z
& ierr );
67
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
68
// but : appel de la triangulation par un arbre-4 recouvrant
69
// ----- de triangles equilateraux
70
// le contour du domaine plan est defini par des lignes fermees
71
// la premiere ligne etant l'enveloppe de toutes les autres
72
// la fonction areteideale_(s,d) donne la taille d'arete
73
// au point s dans la direction d (direction inactive pour l'instant)
74
// des lors toute arete issue d'un sommet s devrait avoir une longueur
75
// comprise entre 0.65 areteideale_(s,d) et 1.3 areteideale_(s,d)
76
//
77
//Attention:
78
// Les tableaux uvslf et uvpti sont supposes ne pas avoir de sommets identiques!
79
// De meme, un sommet d'une ligne fermee ne peut appartenir a une autre ligne fermee
80
//
81
// entrees:
82
// --------
83
// nutysu : numero de traitement de areteideale_() selon le type de surface
84
// 0 pas d'emploi de la fonction areteideale_() et aretmx est active
85
// 1 il existe une fonction areteideale_(s,d)
86
// dont seules les 2 premieres composantes de uv sont actives
87
// ... autres options a definir ...
88
// aretmx : longueur maximale des aretes de la future triangulation
89
// nblf : nombre de lignes fermees de la surface
90
// nudslf : numero du dernier sommet de chacune des nblf lignes fermees
91
// nudslf(0)=0 pour permettre la difference sans test
92
// Attention le dernier sommet de chaque ligne est raccorde au premier
93
// tous les sommets et les points internes ont des coordonnees
94
// UV differentes <=> Pas de point double!
95
// uvslf : uv des nudslf(nblf) sommets des lignes fermees
96
// nbpti : nombre de points internes futurs sommets de la triangulation
97
// uvpti : uv des points internes futurs sommets de la triangulation
98
//
99
// sorties:
100
// --------
101
// nbst : nombre de sommets de la triangulation finale
102
// uvst : coordonnees uv des nbst sommets de la triangulation
103
// nbt : nombre de triangles de la triangulation finale
104
// nust : 3 numeros dans uvst des sommets des nbt triangles
105
// ierr : 0 si pas d'erreur
106
// > 0 sinon
107
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
108
// auteur : Alain Perronnet Analyse Numerique Paris UPMC decembre 2001
109
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
110
111
#if defined(WIN32) && defined(DFORTRAN)
112
113
#define tempscpu TEMPSCPU
114
#define deltacpu DELTACPU
115
#define insoar INSOAR
116
#define azeroi AZEROI
117
#define fasoar FASOAR
118
#define teajte TEAJTE
119
#define tehote TEHOTE
120
#define tetrte TETRTE
121
#define aisoar AISOAR
122
#define tedela TEDELA
123
#define terefr TEREFR
124
#define tesuex TESUEX
125
#define teamqt TEAMQT
126
#define nusotr NUSOTR
127
#define qutr2d QUTR2D
128
#define surtd2 SURTD2
129
#define qualitetrte QUALITETRTE
130
131
#define areteideale ARETEIDEALE
132
133
#define MEFISTO2D_STDCALL __stdcall
134
135
#elif defined(WIN32) && defined (__WATCOM__)
136
137
#define MEFISTO2D_STDCALL
138
139
#else //Lin and MacOSX use f77
140
141
#define MEFISTO2D_STDCALL
142
143
#define insoar insoar_
144
#define azeroi azeroi_
145
#define fasoar fasoar_
146
#define teajte teajte_
147
#define tehote tehote_
148
#define tetrte tetrte_
149
#define aisoar aisoar_
150
#define tedela tedela_
151
#define terefr terefr_
152
#define tesuex tesuex_
153
#define teamqt teamqt_
154
#define nusotr nusotr_
155
#define qutr2d qutr2d_
156
#define surtd2 surtd2_
157
#define qualitetrte qualitetrte_
158
#define areteideale areteideale_
159
160
#endif
161
162
extern
"C"
{
MEFISTO2D_EXPORT
void
MEFISTO2D_STDCALL
qualitetrte
(
R3
*mnpxyd,
163
Z
& mosoar,
Z
& mxsoar,
Z
*mnsoar,
164
Z
& moartr,
Z
& mxartr,
Z
*mnartr,
165
Z
& nbtria,
R
& quamoy,
R
& quamin ); }
166
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
167
// but : calculer la qualite moyenne et minimale de la triangulation
168
// ----- actuelle definie par les tableaux nosoar et noartr
169
// entrees:
170
// --------
171
// mnpxyd : tableau des coordonnees 2d des points
172
// par point : x y distance_souhaitee
173
// mosoar : nombre maximal d'entiers par arete et
174
// indice dans nosoar de l'arete suivante dans le hachage
175
// mxsoar : nombre maximal d'aretes stockables dans le tableau nosoar
176
// attention: mxsoar>3*mxsomm obligatoire!
177
// nosoar : numero des 2 sommets , no ligne, 2 triangles de l'arete,
178
// chainage des aretes frontalieres, chainage du hachage des aretes
179
// hachage des aretes = nosoar(1)+nosoar(2)*2
180
// avec mxsoar>=3*mxsomm
181
// une arete i de nosoar est vide <=> nosoar(1,i)=0 et
182
// nosoar(2,arete vide)=l'arete vide qui precede
183
// nosoar(3,arete vide)=l'arete vide qui suit
184
// moartr : nombre maximal d'entiers par arete du tableau noartr
185
// mxartr : nombre maximal de triangles declarables
186
// noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3
187
// arete1 = 0 si triangle vide => arete2 = triangle vide suivant
188
// sorties:
189
// --------
190
// nbtria : nombre de triangles internes au domaine
191
// quamoy : qualite moyenne des triangles actuels
192
// quamin : qualite minimale des triangles actuels
193
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
194
195
extern
"C"
{
void
MEFISTO2D_STDCALL
tempscpu
(
double
& tempsec ); }
196
197
//Retourne le temps CPU utilise en secondes
198
199
extern
"C"
{
void
MEFISTO2D_STDCALL
deltacpu
(
R
& dtcpu ); }
200
201
//Retourne le temps CPU utilise en secondes depuis le precedent appel
202
203
//initialiser le tableau mnsoar pour le hachage des aretes
204
extern
"C"
{
void
MEFISTO2D_STDCALL
insoar
(
Z
& mxsomm,
205
Z
& mosoar,
206
Z
& mxsoar,
207
Z
& n1soar,
208
Z
* mnsoar );}
209
210
//mettre a zero les nb entiers de tab
211
extern
"C"
{
void
MEFISTO2D_STDCALL
azeroi
(
Z
& nb,
Z
* tab ); }
212
213
extern
"C"
{
void
MEFISTO2D_STDCALL
fasoar
(
Z
& ns1,
Z
& ns2,
Z
& nt1,
Z
& nt2,
Z
& nolign,
214
Z
& mosoar,
Z
& mxsoar,
Z
& n1soar,
Z
* mnsoar,
Z
* mnarst,
215
Z
& noar,
Z
& ierr );
216
}
217
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
218
// but : former l'arete de sommet ns1-ns2 dans le hachage du tableau
219
// ----- nosoar des aretes de la triangulation
220
// entrees:
221
// --------
222
// ns1 ns2: numero pxyd des 2 sommets de l'arete
223
// nt1 : numero du triangle auquel appartient l'arete
224
// nt1=-1 si numero inconnu
225
// nt2 : numero de l'eventuel second triangle de l'arete si connu
226
// nt2=-1 si numero inconnu
227
// nolign : numero de la ligne fermee de l'arete
228
// =0 si l'arete n'est une arete de ligne
229
// ce numero est ajoute seulement si l'arete est creee
230
// mosoar : nombre maximal d'entiers par arete du tableau nosoar
231
// mxsoar : nombre maximal d'aretes stockables dans le tableau nosoar
232
// modifies:
233
// ---------
234
// n1soar : numero de la premiere arete vide dans le tableau nosoar
235
// une arete i de nosoar est vide <=> nosoar(1,i)=0
236
// chainage des aretes vides amont et aval
237
// l'arete vide qui precede=nosoar(4,i)
238
// l'arete vide qui suit =nosoar(5,i)
239
// nosoar : numero des 2 sommets, no ligne, 2 triangles de l'arete,
240
// chainage momentan'e d'aretes, chainage du hachage des aretes
241
// hachage des aretes = min( nosoar(1), nosoar(2) )
242
// noarst : noarst(np) numero d'une arete du sommet np
243
244
// ierr : si < 0 en entree pas d'affichage en cas d'erreur du type
245
// "arete appartenant a plus de 2 triangles et a creer!"
246
// si >=0 en entree affichage de ce type d'erreur
247
// sorties:
248
// --------
249
// noar : >0 numero de l'arete retrouvee ou ajoutee
250
// ierr : =0 si pas d'erreur
251
// =1 si le tableau nosoar est sature
252
// =2 si arete a creer et appartenant a 2 triangles distincts
253
// des triangles nt1 et nt2
254
// =3 si arete appartenant a 2 triangles distincts
255
// differents des triangles nt1 et nt2
256
// =4 si arete appartenant a 2 triangles distincts
257
// dont le second n'est pas le triangle nt2
258
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
259
260
//initialisation du tableau letree et ajout dans letree des sommets 1 a nbsomm
261
extern
"C"
{
void
MEFISTO2D_STDCALL
teajte
(
Z
& mxsomm,
Z
& nbsomm,
R3
* mnpxyd,
R3
* comxmi,
262
R
& aretmx,
Z
& mxtree,
Z
* letree,
263
Z
& ierr );
264
}
265
266
extern
"C"
{
void
MEFISTO2D_STDCALL
tehote
(
Z
& nutysu,
Z
& nbarpi,
Z
& mxsomm,
Z
& nbsomm,
R3
* mnpxyd,
267
R3
* comxmi,
R
& aretmx,
268
Z
* letree,
Z
& mxqueu,
Z
* mnqueu,
269
Z
& ierr );
270
}
271
// homogeneisation de l'arbre des te a un saut de taille au plus
272
// prise en compte des tailles d'aretes souhaitees autour des sommets initiaux
273
274
extern
"C"
{
void
MEFISTO2D_STDCALL
tetrte
(
R3
* comxmi,
R
& aretmx,
Z
& nbarpi,
Z
& mxsomm,
R3
* mnpxyd,
275
Z
& mxqueu,
Z
* mnqueu,
Z
* mntree,
276
Z
& mosoar,
Z
& mxsoar,
Z
& n1soar,
Z
* mnsoar,
277
Z
& moartr,
Z
& mxartr,
Z
& n1artr,
Z
* mnartr,
Z
* mnarst,
278
Z
& ierr );
279
}
280
// trianguler les triangles equilateraux feuilles a partir de leurs 3 sommets
281
// et des points de la frontiere, des points internes imposes interieurs
282
283
extern
"C"
{
void
MEFISTO2D_STDCALL
aisoar
(
Z
& mosoar,
Z
& mxsoar,
Z
* mnsoar,
Z
& na ); }
284
// formation du chainage 6 des aretes internes a echanger eventuellement
285
286
extern
"C"
{
void
MEFISTO2D_STDCALL
tedela
(
R3
* mnpxyd,
Z
* mnarst,
287
Z
& mosoar,
Z
& mxsoar,
Z
& n1soar,
Z
* mnsoar,
Z
& na,
288
Z
& moartr,
Z
& mxartr,
Z
& n1artr,
Z
* mnartr,
Z
& n );
289
}
290
// boucle sur les aretes internes (non sur une ligne de la frontiere)
291
// avec echange des 2 diagonales afin de rendre la triangulation delaunay
292
293
extern
"C"
{
void
MEFISTO2D_STDCALL
terefr
(
Z
& nbarpi,
R3
* mnpxyd,
294
Z
& mosoar,
Z
& mxsoar,
Z
& n1soar,
Z
* mnsoar,
295
Z
& moartr,
Z
& mxartr,
Z
& n1artr,
Z
* mnartr,
Z
* mnarst,
296
Z
& mxarcf,
Z
* mnarc1,
Z
* mnarc2,
297
Z
* mnarc3,
Z
* mnarc4,
298
Z
& n,
Z
& ierr );
299
}
300
// detection des aretes frontalieres initiales perdues
301
// triangulation frontale pour les restaurer
302
303
extern
"C"
{
void
MEFISTO2D_STDCALL
tesuex
(
Z
& nblf,
Z
* nulftr,
304
Z
& ndtri0,
Z
& nbsomm,
R3
* mnpxyd,
Z
* mnslig,
305
Z
& mosoar,
Z
& mxsoar,
Z
* mnsoar,
306
Z
& moartr,
Z
& mxartr,
Z
& n1artr,
Z
* mnartr,
Z
* mnarst,
307
Z
& nbtria,
Z
* mntrsu,
Z
& ierr );
308
}
309
// suppression des triangles externes a la surface
310
311
extern
"C"
{
void
MEFISTO2D_STDCALL
teamqt
(
Z
& nutysu,
R
& aretmx,
R
& airemx,
312
Z
* mnarst,
Z
& mosoar,
Z
& mxsoar,
Z
& n1soar,
Z
* mnsoar,
313
Z
& moartr,
Z
& mxartr,
Z
& n1artr,
Z
* mnartr,
314
Z
& mxarcf,
Z
* mntrcf,
Z
* mnstbo,
315
Z
* n1arcf,
Z
* mnarcf,
Z
* mnarc1,
316
Z
& nbarpi,
Z
& nbsomm,
Z
& mxsomm,
317
R3
* mnpxyd,
Z
* mnslig,
318
Z
& ierr );
319
}
320
// amelioration de la qualite de la triangulation par
321
// barycentrage des sommets internes a la triangulation
322
// suppression des aretes trop longues ou trop courtes
323
// modification de la topologie des groupes de triangles
324
// mise en delaunay de la triangulation
325
326
extern
"C"
{
void
MEFISTO2D_STDCALL
nusotr
(
Z
& nt,
Z
& mosoar,
Z
* mnsoar,
Z
& moartr,
Z
* mnartr,
Z
* nosotr );
327
}
328
//retrouver les numero des 3 sommets du triangle nt
329
330
extern
"C"
{
void
MEFISTO2D_STDCALL
qutr2d
(
R3
& p1,
R3
& p2,
R3
& p3,
R
& qualite ); }
331
//calculer la qualite d'un triangle de R2 de sommets p1, p2, p3
332
333
extern
"C"
{
R
MEFISTO2D_STDCALL
surtd2
(
R3
& p1,
R3
& p2,
R3
& p3 ); }
334
//calcul de la surface d'un triangle defini par 3 points de r**2
335
336
#endif
teajte
#define teajte
Definition:
aptrte.h:146
MEFISTO2D_STDCALL
#define MEFISTO2D_STDCALL
Definition:
aptrte.h:141
tetrte
#define tetrte
Definition:
aptrte.h:148
teamqt
#define teamqt
Definition:
aptrte.h:153
aptrte
void aptrte(Z nutysu, R aretmx, Z nblf, Z *nudslf, R2 *uvslf, Z nbpti, R2 *uvpti, Z &nbst, R2 *&uvst, Z &nbt, Z *&nust, Z &ierr)
R2
Definition:
Rn.h:89
surtd2
#define surtd2
Definition:
aptrte.h:156
terefr
#define terefr
Definition:
aptrte.h:151
tehote
#define tehote
Definition:
aptrte.h:147
aisoar
#define aisoar
Definition:
aptrte.h:149
qutr2d
#define qutr2d
Definition:
aptrte.h:155
Z
long int Z
Definition:
Rn.h:74
tesuex
#define tesuex
Definition:
aptrte.h:152
fasoar
#define fasoar
Definition:
aptrte.h:145
azeroi
#define azeroi
Definition:
aptrte.h:144
R3
Definition:
Rn.h:128
tempscpu
void tempscpu(double &tempsec)
nusotr
#define nusotr
Definition:
aptrte.h:154
qualitetrte
#define qualitetrte
Definition:
aptrte.h:157
R
double R
Definition:
Rn.h:81
deltacpu
void deltacpu(R &dtcpu)
MEFISTO2D_EXPORT
#define MEFISTO2D_EXPORT
Definition:
aptrte.h:58
insoar
#define insoar
Definition:
aptrte.h:143
tedela
#define tedela
Definition:
aptrte.h:150
inc
aptrte.h
Generated on Fri Jun 12 2015 11:11:23 for SALOME - SMESH by
1.8.8