X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FMEFISTO2%2Faptrte.h;fp=src%2FMEFISTO2%2Faptrte.h;h=ab407ec89a46b03b1992eb3d2666ab4c4b074837;hp=53108770018d2b774fb2b6fa67d19dc69fac7e11;hb=79b1ac2b6df9117f16f11d444b1f165d477a1813;hpb=984c4ffdd7df62aeaedc544cd0b8e64ff8f53f1a diff --git a/src/MEFISTO2/aptrte.h b/src/MEFISTO2/aptrte.h index 531087700..ab407ec89 100755 --- a/src/MEFISTO2/aptrte.h +++ b/src/MEFISTO2/aptrte.h @@ -1,6 +1,6 @@ // SMESH MEFISTO2 : algorithm for meshing // -// Copyright (C) 2003 Laboratoire J.-L. Lions UPMC Paris +// Copyright (C) 2006 Laboratoire J.-L. Lions UPMC Paris // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -21,17 +21,22 @@ // // // File : aptrte.h -// Author: Alain PERRONNET +// Author : Alain PERRONNET // Module : SMESH +// Date : 13 novembre 2006 #ifndef aptrte__h #define aptrte__h #include // limites min max int long real ... +#ifndef WIN32 #include // gethostname, ... +#endif #include +#ifndef WIN32 #include // pour cout cin ... #include // pour le format des io setw, stx, setfill, ... +#endif #include // pour les fonctions sur les chaines de caracteres #include #include @@ -39,43 +44,23 @@ #include #include +#ifndef WIN32 #include +#endif -void qualitetrte( R3 *mnpxyd, - Z & mosoar, Z & mxsoar, Z *mnsoar, - Z & moartr, Z & mxartr, Z *mnartr, - Z & nbtria, R & quamoy, R & quamin ); -// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -// but : calculer la qualite moyenne et minimale de la triangulation -// ----- actuelle definie par les tableaux nosoar et noartr -// entrees: -// -------- -// mnpxyd : tableau des coordonnees 2d des points -// par point : x y distance_souhaitee -// mosoar : nombre maximal d'entiers par arete et -// indice dans nosoar de l'arete suivante dans le hachage -// mxsoar : nombre maximal d'aretes stockables dans le tableau nosoar -// attention: mxsoar>3*mxsomm obligatoire! -// nosoar : numero des 2 sommets , no ligne, 2 triangles de l'arete, -// chainage des aretes frontalieres, chainage du hachage des aretes -// hachage des aretes = nosoar(1)+nosoar(2)*2 -// avec mxsoar>=3*mxsomm -// une arete i de nosoar est vide <=> nosoar(1,i)=0 et -// nosoar(2,arete vide)=l'arete vide qui precede -// nosoar(3,arete vide)=l'arete vide qui suit -// moartr : nombre maximal d'entiers par arete du tableau noartr -// mxartr : nombre maximal de triangles declarables -// noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3 -// arete1 = 0 si triangle vide => arete2 = triangle vide suivant -// sorties: -// -------- -// nbtria : nombre de triangles internes au domaine -// quamoy : qualite moyenne des triangles actuels -// quamin : qualite minimale des triangles actuels -// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +#ifdef WNT + #if defined MEFISTO2D_EXPORTS + #define MEFISTO2D_EXPORT __declspec( dllexport ) + #else + #define MEFISTO2D_EXPORT __declspec( dllimport ) + #endif +#else + #define MEFISTO2D_EXPORT +#endif -void aptrte( Z nutysu, R aretmx, +MEFISTO2D_EXPORT + void aptrte( Z nutysu, R aretmx, Z nblf, Z *nudslf, R2 *uvslf, Z nbpti, R2 *uvpti, Z & nbst, R2 * & uvst, Z & nbt, Z * & nust, @@ -124,21 +109,130 @@ void aptrte( Z nutysu, R aretmx, // auteur : Alain Perronnet Analyse Numerique Paris UPMC decembre 2001 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -extern "C" { void tempscpu_( double & tempsec ); } +#if WIN32 & DFORTRAN + #define tempscpu TEMPSCPU + #define deltacpu DELTACPU + #define insoar INSOAR + #define azeroi AZEROI + #define fasoar FASOAR + #define teajte TEAJTE + #define tehote TEHOTE + #define tetrte TETRTE + #define aisoar AISOAR + #define tedela TEDELA + #define terefr TEREFR + #define tesuex TESUEX + #define teamqt TEAMQT + #define nusotr NUSOTR + #define qutr2d QUTR2D + #define surtd2 SURTD2 + #define qualitetrte QUALITETRTE + + #define areteideale ARETEIDEALE + +#else + #define tempscpu tempscpu_ + #define deltacpu deltacpu_ + #define insoar insoar_ + #define azeroi azeroi_ + #define fasoar fasoar_ + #define teajte teajte_ + #define tehote tehote_ + #define tetrte tetrte_ + #define aisoar aisoar_ + #define tedela tedela_ + #define terefr terefr_ + #define tesuex tesuex_ + #define teamqt teamqt_ + #define nusotr nusotr_ + #define qutr2d qutr2d_ + #define surtd2 surtd2_ + #define qualitetrte qualitetrte_ + + #define areteideale areteideale_ + +#endif + + +extern "C" { void +#ifdef WIN32 + __stdcall +#endif + qualitetrte( R3 *mnpxyd, + Z & mosoar, Z & mxsoar, Z *mnsoar, + Z & moartr, Z & mxartr, Z *mnartr, + Z & nbtria, R & quamoy, R & quamin ); } +// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +// but : calculer la qualite moyenne et minimale de la triangulation +// ----- actuelle definie par les tableaux nosoar et noartr +// entrees: +// -------- +// mnpxyd : tableau des coordonnees 2d des points +// par point : x y distance_souhaitee +// mosoar : nombre maximal d'entiers par arete et +// indice dans nosoar de l'arete suivante dans le hachage +// mxsoar : nombre maximal d'aretes stockables dans le tableau nosoar +// attention: mxsoar>3*mxsomm obligatoire! +// nosoar : numero des 2 sommets , no ligne, 2 triangles de l'arete, +// chainage des aretes frontalieres, chainage du hachage des aretes +// hachage des aretes = nosoar(1)+nosoar(2)*2 +// avec mxsoar>=3*mxsomm +// une arete i de nosoar est vide <=> nosoar(1,i)=0 et +// nosoar(2,arete vide)=l'arete vide qui precede +// nosoar(3,arete vide)=l'arete vide qui suit +// moartr : nombre maximal d'entiers par arete du tableau noartr +// mxartr : nombre maximal de triangles declarables +// noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3 +// arete1 = 0 si triangle vide => arete2 = triangle vide suivant +// sorties: +// -------- +// nbtria : nombre de triangles internes au domaine +// quamoy : qualite moyenne des triangles actuels +// quamin : qualite minimale des triangles actuels +// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +extern "C" { void +#ifdef WIN32 + __stdcall +#endif + tempscpu( double & tempsec ); +} + //Retourne le temps CPU utilise en secondes -extern "C" { void deltacpu_( R & dtcpu ); } +extern "C" { void +#ifdef WIN32 + __stdcall +#endif + deltacpu( R & dtcpu ); +} + //Retourne le temps CPU utilise en secondes depuis le precedent appel //initialiser le tableau mnsoar pour le hachage des aretes -extern "C" {void insoar_( Z & mxsomm, Z & mosoar, Z & mxsoar, Z & n1soar, Z * mnsoar );} +extern "C" {void +#ifdef WIN32 + __stdcall +#endif + insoar( Z & mxsomm, Z & mosoar, Z & mxsoar, Z & n1soar, Z * mnsoar ); +} //mettre a zero les nb entiers de tab -extern "C" {void azeroi_( Z & nb, Z * tab );} +extern "C" {void +#ifdef WIN32 + __stdcall +#endif + azeroi( Z & nb, Z * tab ); +} -extern "C" {void fasoar_( Z & ns1, Z & ns2, Z & nt1, Z & nt2, Z & nolign, - Z & mosoar, Z & mxsoar, Z & n1soar, Z * mnsoar, Z * mnarst, - Z & noar, Z & ierr );} +extern "C" {void +#ifdef WIN32 + __stdcall +#endif + fasoar( Z & ns1, Z & ns2, Z & nt1, Z & nt2, Z & nolign, + Z & mosoar, Z & mxsoar, Z & n1soar, Z * mnsoar, Z * mnarst, + Z & noar, Z & ierr ); +} //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // but : former l'arete de sommet ns1-ns2 dans le hachage du tableau // ----- nosoar des aretes de la triangulation @@ -183,73 +277,126 @@ extern "C" {void fasoar_( Z & ns1, Z & ns2, Z & nt1, Z & nt2, Z & nolign, //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //initialisation du tableau letree et ajout dans letree des sommets 1 a nbsomm -extern "C" {void teajte_( Z & mxsomm, Z & nbsomm, R3 * mnpxyd, R3 * comxmi, - R & aretmx, Z & mxtree, Z * letree, - Z & ierr );} - +extern "C" {void +#ifdef WIN32 + __stdcall +#endif + teajte( Z & mxsomm, Z & nbsomm, R3 * mnpxyd, R3 * comxmi, + R & aretmx, Z & mxtree, Z * letree, + Z & ierr ); +} -extern "C" {void tehote_( Z & nutysu, Z & nbarpi, Z & mxsomm, Z & nbsomm, R3 * mnpxyd, - R3 * comxmi, R & aretmx, - Z * letree, Z & mxqueu, Z * mnqueu, - Z & ierr );} +extern "C" {void +#ifdef WIN32 + __stdcall +#endif + tehote( Z & nutysu, Z & nbarpi, Z & mxsomm, Z & nbsomm, R3 * mnpxyd, + R3 * comxmi, R & aretmx, + Z * letree, Z & mxqueu, Z * mnqueu, + Z & ierr ); +} // homogeneisation de l'arbre des te a un saut de taille au plus // prise en compte des tailles d'aretes souhaitees autour des sommets initiaux -extern "C" {void tetrte_( R3 * comxmi, R & aretmx, Z & nbarpi, Z & mxsomm, R3 * mnpxyd, - Z & mxqueu, Z * mnqueu, Z * mntree, - Z & mosoar, Z & mxsoar, Z & n1soar, Z * mnsoar, - Z & moartr, Z & mxartr, Z & n1artr, Z * mnartr, Z * mnarst, - Z & ierr );} +extern "C" {void +#ifdef WIN32 + __stdcall +#endif + tetrte( R3 * comxmi, R & aretmx, Z & nbarpi, Z & mxsomm, R3 * mnpxyd, + Z & mxqueu, Z * mnqueu, Z * mntree, + Z & mosoar, Z & mxsoar, Z & n1soar, Z * mnsoar, + Z & moartr, Z & mxartr, Z & n1artr, Z * mnartr, Z * mnarst, + Z & ierr ); +} // trianguler les triangles equilateraux feuilles a partir de leurs 3 sommets // et des points de la frontiere, des points internes imposes interieurs -extern "C" {void aisoar_( Z & mosoar, Z & mxsoar, Z * mnsoar, Z & na );} - // formation du chainage 6 des aretes internes a echanger eventuellement +extern "C" {void +#ifdef WIN32 + __stdcall +#endif + aisoar( Z & mosoar, Z & mxsoar, Z * mnsoar, Z & na ); +} +// formation du chainage 6 des aretes internes a echanger eventuellement -extern "C" {void tedela_( R3 * mnpxyd, Z * mnarst, - Z & mosoar, Z & mxsoar, Z & n1soar, Z * mnsoar, Z & na, - Z & moartr, Z & mxartr, Z & n1artr, Z * mnartr, Z & n );} - // boucle sur les aretes internes (non sur une ligne de la frontiere) - // avec echange des 2 diagonales afin de rendre la triangulation delaunay +extern "C" {void +#ifdef WIN32 + __stdcall +#endif + tedela( R3 * mnpxyd, Z * mnarst, + Z & mosoar, Z & mxsoar, Z & n1soar, Z * mnsoar, Z & na, + Z & moartr, Z & mxartr, Z & n1artr, Z * mnartr, Z & n ); +} +// boucle sur les aretes internes (non sur une ligne de la frontiere) +// avec echange des 2 diagonales afin de rendre la triangulation delaunay -extern "C" {void terefr_( Z & nbarpi, R3 * mnpxyd, - Z & mosoar, Z & mxsoar, Z & n1soar, Z * mnsoar, - Z & moartr, Z & n1artr, Z * mnartr, Z * mnarst, - Z & mxarcf, Z * mnarc1, Z * mnarc2, - Z * mnarc3, Z * mnarc4, - Z & n, Z & ierr );} +extern "C" {void +#ifdef WIN32 + __stdcall +#endif + terefr( Z & nbarpi, R3 * mnpxyd, + Z & mosoar, Z & mxsoar, Z & n1soar, Z * mnsoar, + Z & moartr, Z & mxartr, Z & n1artr, Z * mnartr, Z * mnarst, + Z & mxarcf, Z * mnarc1, Z * mnarc2, + Z * mnarc3, Z * mnarc4, + Z & n, Z & ierr ); +} // detection des aretes frontalieres initiales perdues // triangulation frontale pour les restaurer -extern "C" {void tesuex_( Z & nblf, Z * nulftr, - Z & ndtri0, Z & nbsomm, R3 * mnpxyd, Z * mnslig, - Z & mosoar, Z & mxsoar, Z * mnsoar, - Z & moartr, Z & mxartr, Z & n1artr, Z * mnartr, Z * mnarst, - Z & nbtria, Z * mntrsu, Z & ierr );} +extern "C" {void +#ifdef WIN32 + __stdcall +#endif + tesuex( Z & nblf, Z * nulftr, + Z & ndtri0, Z & nbsomm, R3 * mnpxyd, Z * mnslig, + Z & mosoar, Z & mxsoar, Z * mnsoar, + Z & moartr, Z & mxartr, Z & n1artr, Z * mnartr, Z * mnarst, + Z & nbtria, Z * mntrsu, Z & ierr ); +} // suppression des triangles externes a la surface -extern "C" {void teamqt_( Z & nutysu, - Z * mnarst, Z & mosoar, Z & mxsoar, Z & n1soar, Z * mnsoar, - Z & moartr, Z & mxartr, Z & n1artr, Z * mnartr, - Z & mxarcf, Z * mntrcf, Z * mnstbo, - Z * n1arcf, Z * mnarcf, Z * mnarc1, - R3 * comxmi, Z & nbarpi, Z & nbsomm, Z & mxsomm, - R3 * mnpxyd, Z * mnslig, - Z & ierr );} +extern "C" {void +#ifdef WIN32 + __stdcall +#endif + teamqt( Z & nutysu, R & aretmx, R & airemx, + Z * mnarst, Z & mosoar, Z & mxsoar, Z & n1soar, Z * mnsoar, + Z & moartr, Z & mxartr, Z & n1artr, Z * mnartr, + Z & mxarcf, Z * mntrcf, Z * mnstbo, + Z * n1arcf, Z * mnarcf, Z * mnarc1, + Z & nbarpi, Z & nbsomm, Z & mxsomm, + R3 * mnpxyd, Z * mnslig, + Z & ierr ); +} // amelioration de la qualite de la triangulation par // barycentrage des sommets internes a la triangulation // suppression des aretes trop longues ou trop courtes // modification de la topologie des groupes de triangles // mise en delaunay de la triangulation -extern "C" {void nusotr_( Z & nt, Z & mosoar, Z * mnsoar, Z & moartr, Z * mnartr, - Z * nosotr );} +extern "C" {void +#ifdef WIN32 + __stdcall +#endif + nusotr( Z & nt, Z & mosoar, Z * mnsoar, Z & moartr, Z * mnartr,Z * nosotr ); +} //retrouver les numero des 3 sommets du triangle nt -extern "C" {void qutr2d_( R3 & p1, R3 & p2, R3 & p3, R & qualite );} +extern "C" {void +#ifdef WIN32 + __stdcall +#endif + qutr2d( R3 & p1, R3 & p2, R3 & p3, R & qualite ); +} //calculer la qualite d'un triangle de R2 de sommets p1, p2, p3 -extern "C" { R surtd2_( R3 & p1, R3 & p2, R3 & p3 ); } +extern "C" { R +#ifdef WIN32 + __stdcall +#endif + surtd2( R3 & p1, R3 & p2, R3 & p3 ); +} //calcul de la surface d'un triangle defini par 3 points de r**2 #endif