mnsoar = new Z[mosoar*mxsoar];
if( mnsoar==NULL ) goto ERREUR;
//initialiser le tableau mnsoar pour le hachage des aretes
+#ifdef DFORTRAN
+ INSOAR( mxsomm, mosoar, mxsoar, n1soar, mnsoar );
+#else
insoar_( mxsomm, mosoar, mxsoar, n1soar, mnsoar );
+#endif
// mnarst( mxsomm ) numero mnsoar d'une arete pour chacun des sommets
if( mnarst!=NULL ) delete [] mnarst;
mnarst = new Z[1+mxsomm];
if( mnarst==NULL ) goto ERREUR;
n = 1+mxsomm;
+
+#ifdef DFORTRAN
+ AZEROI( n, mnarst );
+#else
azeroi_( n, mnarst );
+#endif
// mnslig( mxsomm ) no de sommet dans sa ligne pour chaque sommet frontalier
// ou no du point si interne forc'e par l'utilisateur
if( mnslig!=NULL ) delete [] mnslig;
mnslig = new Z[mxsomm];
if( mnslig==NULL ) goto ERREUR;
+#ifdef DFORTRAN
+ AZEROI( mxsomm, mnslig );
+#else
azeroi_( mxsomm, mnslig );
+#endif
// initialisation des aretes frontalieres de la triangulation future
// renumerotation des sommets des aretes des lignes pour la triangulation
// << " " << mnpxyd[ns0].y << " longueur arete=" << mnpxyd[ns0].z);
//carre de la longueur de l'arete 1 de la ligne fermee n
- d = pow( uvslf[ns0+1].x - uvslf[ns0].x, 2 )
- + pow( uvslf[ns0+1].y - uvslf[ns0].y, 2 ) ;
+ d = pow( uvslf[ns0+1].x - uvslf[ns0].x, 2 );
+ d = d + pow( uvslf[ns0+1].y - uvslf[ns0].y, 2 ) ;
aremin = Min( aremin, d );
aremax = Max( aremax, d );
//le numero n de la ligne du sommet et son numero ns1 dans la ligne
mnslig[ns0-1] = 1000000 * n + ns1-nudslf[n-1];
+#ifdef DFORTRAN
+ FASOAR( ns1, ns2, moins1, moins1, n,
+#else
fasoar_( ns1, ns2, moins1, moins1, n,
+#endif
mosoar, mxsoar, n1soar, mnsoar, mnarst,
noar0, ierr );
//pas de test sur ierr car pas de saturation possible a ce niveau
// << " " << mnpxyd[ns].y << " longueur arete=" << mnpxyd[ns].z);
//carre de la longueur de l'arete
- d = pow( uvslf[ns2-1].x - uvslf[ns1-1].x, 2)
- + pow( uvslf[ns2-1].y - uvslf[ns1-1].y, 2);
+ d = pow( uvslf[ns2-1].x - uvslf[ns1-1].x, 2);
+ d = d + pow( uvslf[ns2-1].y - uvslf[ns1-1].y, 2);
aremin = Min( aremin, d );
aremax = Max( aremax, d );
mnslig[ns] = 1000000 * n + ns1-nudslf[n-1];
//ajout de l'arete dans la liste
+#ifdef DFORTRAN
+ FASOAR( ns1, ns2, moins1, moins1, n,
+#else
fasoar_( ns1, ns2, moins1, moins1, n,
+#endif
mosoar, mxsoar, n1soar, mnsoar,
mnarst, noar, ierr );
//pas de test sur ierr car pas de saturation possible a ce niveau
if( mntree==NULL ) goto ERREUR;
//initialisation du tableau letree et ajout dans letree des sommets 1 a nbsomm
+#ifdef DFORTRAN
+ TEAJTE( mxsomm, nbsomm, mnpxyd, comxmi, aretmx, mxtree, mntree, ierr );
+#else
teajte_( mxsomm, nbsomm, mnpxyd, comxmi, aretmx, mxtree, mntree, ierr );
+#endif
comxmi[0].z=0;
comxmi[1].z=0;
mnqueu = new Z[mxqueu];
if( mnqueu==NULL) goto ERREUR;
+#ifdef DFORTRAN
+ TEHOTE( nutysu, nbarpi, mxsomm, nbsomm, mnpxyd,
+#else
tehote_( nutysu, nbarpi, mxsomm, nbsomm, mnpxyd,
+#endif
comxmi, aretmx,
mntree, mxqueu, mnqueu,
ierr );
// trianguler les triangles equilateraux feuilles a partir de leurs 3 sommets
// et des points de la frontiere, des points internes imposes interieurs
// ==========================================================================
+#ifdef DFORTRAN
+ TETRTE( comxmi, aretmx, nbarpi, mxsomm, mnpxyd,
+#else
tetrte_( comxmi, aretmx, nbarpi, mxsomm, mnpxyd,
+#endif
mxqueu, mnqueu, mntree, mosoar, mxsoar, n1soar, mnsoar,
moartr, mxartr, n1artr, mnartr, mnarst,
ierr );
// avec echange des 2 diagonales afin de rendre la triangulation delaunay
// ======================================================================
// formation du chainage 6 des aretes internes a echanger eventuellement
+#ifdef DFORTRAN
+ AISOAR( mosoar, mxsoar, mnsoar, na );
+ TEDELA( mnpxyd, mnarst,
+#else
aisoar_( mosoar, mxsoar, mnsoar, na );
tedela_( mnpxyd, mnarst,
+#endif
+
mosoar, mxsoar, n1soar, mnsoar, na,
moartr, mxartr, n1artr, mnartr, n );
mnarcf2 = new Z[mxarcf];
if( mnarcf2 == NULL ) goto ERREUR;
+#ifdef DFORTRAN
+ TEREFR( nbarpi, mnpxyd,
+#else
terefr_( nbarpi, mnpxyd,
+#endif
mosoar, mxsoar, n1soar, mnsoar,
moartr, n1artr, mnartr, mnarst,
mxarcf, mn1arcf, mnarcf, mnarcf1, mnarcf2,
for (n=0; n<nblf; n++) //numero de la ligne fermee de 1 a nblf
mnlftr[n] = n+1;
+#ifdef DFORTRAN
+ TESUEX( nblf, mnlftr,
+#else
tesuex_( nblf, mnlftr,
+#endif
ndtri0, nbsomm, mnpxyd, mnslig,
mosoar, mxsoar, mnsoar,
moartr, mxartr, n1artr, mnartr, mnarst,
mnarcf3 = new Z[mxarcf];
if( mnarcf3 == NULL ) goto ERREUR;
+#ifdef DFORTRAN
+ TEAMQT( nutysu,
+#else
teamqt_( nutysu,
+#endif
mnarst, mosoar, mxsoar, n1soar, mnsoar,
moartr, mxartr, n1artr, mnartr,
mxarcf, mnarcf2, mnarcf3,
if( mnartr[nt*moartr-moartr] != 0 )
{
//le numero des 3 sommets du triangle nt
+#ifdef DFORTRAN
+ NUSOTR( nt, mosoar, mnsoar, moartr, mnartr, nosotr );
+#else
nusotr_( nt, mosoar, mnsoar, moartr, mnartr, nosotr );
+#endif
//les 3 sommets du triangle sont actifs
mnarst[ nosotr[0] ] = 1;
mnarst[ nosotr[1] ] = 1;
if( mnartr[i*moartr-moartr] != 0 )
{
//le triangle i est interne => nosotr numero de ses 3 sommets
+#ifdef DFORTRAN
+ NUSOTR( i, mosoar, mnsoar, moartr, mnartr, nosotr );
+#else
nusotr_( i, mosoar, mnsoar, moartr, mnartr, nosotr );
+#endif
nust[nbt++] = mnarst[ nosotr[0] ];
nust[nbt++] = mnarst[ nosotr[1] ];
nust[nbt++] = mnarst[ nosotr[2] ];
nbtria++;
//le numero des 3 sommets du triangle nt
+#ifdef DFORTRAN
+ NUSOTR( nt, mosoar, mnsoar, moartr, mnartr, nosotr );
+#else
nusotr_( nt, mosoar, mnsoar, moartr, mnartr, nosotr );
+#endif
//la qualite du triangle ns1 ns2 ns3
+#ifdef DFORTRAN
+ QUTR2D( mnpxyd[nosotr[0]-1], mnpxyd[nosotr[1]-1], mnpxyd[nosotr[2]-1],
+#else
qutr2d_( mnpxyd[nosotr[0]-1], mnpxyd[nosotr[1]-1], mnpxyd[nosotr[2]-1],
+#endif
qualite );
//la qualite moyenne
quamin = Min( quamin, qualite );
//aire signee du triangle nt
+#ifdef DFORTRAN
+ d = SURTD2( mnpxyd[nosotr[0]-1], mnpxyd[nosotr[1]-1], mnpxyd[nosotr[2]-1] );
+#else
d = surtd2_( mnpxyd[nosotr[0]-1], mnpxyd[nosotr[1]-1], mnpxyd[nosotr[2]-1] );
+#endif
+
if( d<0 )
{
//un triangle d'aire negative de plus
// auteur : Alain Perronnet Analyse Numerique Paris UPMC decembre 2001
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-extern "C" { void tempscpu_( double & tempsec ); }
+extern "C" { void
+#ifdef WIN32
+ __stdcall
+#endif
+#ifdef DFORTRAN
+ TEMPSCPU( double & tempsec ); }
+#else
+ tempscpu_( double & tempsec ); }
+#endif
+
//Retourne le temps CPU utilise en secondes
-extern "C" { void deltacpu_( R & dtcpu ); }
+extern "C" { void
+#ifdef WIN32
+ __stdcall
+#endif
+#ifdef DFORTRAN
+ DELTACPU( R & dtcpu ); }
+#else
+ deltacpu_( R & dtcpu ); }
+#endif
+
//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
+#ifdef DFORTRAN
+ INSOAR( Z & mxsomm, Z & mosoar, Z & mxsoar, Z & n1soar, Z * mnsoar );}
+#else
+ insoar_( Z & mxsomm, Z & mosoar, Z & mxsoar, Z & n1soar, Z * mnsoar );}
+#endif
//mettre a zero les nb entiers de tab
-extern "C" {void azeroi_( Z & nb, Z * tab );}
+extern "C" {void
+#ifdef WIN32
+ __stdcall
+#endif
+#ifdef DFORTRAN
+ AZEROI( Z & nb, Z * tab );}
+#else
+ azeroi_( Z & nb, Z * tab );}
+#endif
-extern "C" {void fasoar_( Z & ns1, Z & ns2, Z & nt1, Z & nt2, Z & nolign,
+extern "C" {void
+#ifdef WIN32
+ __stdcall
+#endif
+#ifdef DFORTRAN
+ FASOAR( Z & ns1, Z & ns2, Z & nt1, Z & nt2, Z & nolign,
+#else
+ fasoar_( Z & ns1, Z & ns2, Z & nt1, Z & nt2, Z & nolign,
+#endif
Z & mosoar, Z & mxsoar, Z & n1soar, Z * mnsoar, Z * mnarst,
Z & noar, Z & ierr );}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//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,
+extern "C" {void
+#ifdef WIN32
+ __stdcall
+#endif
+#ifdef DFORTRAN
+ TEAJTE
+#else
+ teajte_
+#endif
+ ( 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,
+extern "C" {void
+#ifdef WIN32
+ __stdcall
+#endif
+#ifdef DFORTRAN
+ TEHOTE
+#else
+ tehote_
+#endif
+ ( 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,
+extern "C" {void
+#ifdef WIN32
+ __stdcall
+#endif
+#ifdef DFORTRAN
+ TETRTE
+#else
+ tetrte_
+#endif
+ ( 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,
// 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 );}
+extern "C" {void
+#ifdef WIN32
+ __stdcall
+#endif
+#ifdef DFORTRAN
+ AISOAR
+#else
+ aisoar_
+#endif
+ ( 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,
+extern "C" {void
+#ifdef WIN32
+ __stdcall
+#endif
+#ifdef DFORTRAN
+ TEDELA
+#else
+ tedela_
+#endif
+ ( 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,
+extern "C" {void
+#ifdef WIN32
+ __stdcall
+#endif
+#ifdef DFORTRAN
+ TEREFR
+#else
+ terefr_
+#endif
+ ( 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,
// detection des aretes frontalieres initiales perdues
// triangulation frontale pour les restaurer
-extern "C" {void tesuex_( Z & nblf, Z * nulftr,
+extern "C" {void
+#ifdef WIN32
+ __stdcall
+#endif
+#ifdef DFORTRAN
+ TESUEX
+#else
+ tesuex_
+#endif
+ ( 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,
+extern "C" {void
+#ifdef WIN32
+ __stdcall
+#endif
+#ifdef DFORTRAN
+ TEAMQT
+#else
+ teamqt_
+#endif
+ ( 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,
// 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
+#ifdef DFORTRAN
+ NUSOTR
+#else
+ nusotr_
+#endif
+ ( 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
+#ifdef DFORTRAN
+ QUTR2D
+#else
+ qutr2d_
+#endif
+ ( 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
+#ifdef DFORTRAN
+ SURTD2
+#else
+ surtd2_
+#endif
+ ( R3 & p1, R3 & p2, R3 & p3 ); }
//calcul de la surface d'un triangle defini par 3 points de r**2
#endif