Download ameli2.eso

Back to the list

   1 : C AMELI2    SOURCE    PV        07/11/23    21:15:18     5978           
   2 :       SUBROUTINE AMELI2 (NUM,NSA,NBNN,NUMELG,NUMNP,NBVOIS,MAXVOI,KON)
   3 : ************************************************************************
   4 : *     
   5 : *                             A M E L I 2
   6 : *                             -----------
   7 : *     
   8 : * FONCTION:
   9 : * ---------
  10 : *     
  11 : *     AMELIORATION D'UN MAILLAGE DE "QUA4" ET/OU "TRI3" SANS
  12 : *     DEPLACEMENT DES NOEUDS.
  13 : *     
  14 : * MODULES UTILISES:
  15 : * -----------------
  16 : *     
  17 :       IMPLICIT INTEGER(I-N)
  18 :       implicit real*8 (a-h,o-z)
  19 : -INC CCREEL
  20 : -INC CCOPTIO
  21 : *     
  22 : * PARAMETRES:   (E)=ENTREE   (S)=SORTIE   (+ = CONTENU DANS UN COMMUN)
  23 : * -----------
  24 : *     
  25 : *     NUM(I,J)  E/S  NUMERO DU I-EME NOEUD DU J-EME ELEMENT.
  26 : *                    - MELANGE "QUA4" ET "TRI3" DANS LE MEME TABLEAU,
  27 : *                    - TABLEAU SURDIMENSIONNE.
  28 : *                    - NUMEROTATION DES NOEUDS LOCALE A L'OPERATEUR.
  29 : *     NSA       (E)  TABLEAU DE CORRESPONDANCE ENTRE NUMEROS LOCAUX ET
  30 : *                    GLOBAUX.
  31 : *     NBNN      (E)  NOMBRE MAXI DE NOEUDS PAR ELEMENT.
  32 : *     NUMELG    E/S  NOMBRE D'ELEMENTS DU MAILLAGE.
  33 : *     NUMNP     (E)  NOMBRE DE NOEUDS DU MAILLAGE.
  34 : *     NBVOIS    (E)  NOMBRE D'ELEMENTS APPUYES SUR UN NOEUD DONNE.
  35 : *     KON       (E)  TABLEAU DE CONNEXIONS DES NOEUDS.
  36 : *                    KON(I, N.NOEUD - CSTE) = N.ELEMENT
  37 : *     
  38 :       INTEGER NUM(NBNN,*),NSA(*),NBVOIS(*),KON(MAXVOI,*)
  39 : *     
  40 : * CONSTANTES:
  41 : * -----------
  42 : *     
  43 :       PARAMETER (PI = XPI)
  44 :       PARAMETER (ANGMIN =  30.D0 * XPI/180.D0)
  45 :       PARAMETER (ANGMAX = XPI - ANGMIN)
  46 :       PARAMETER (QUAL0 = 0.3)
  47 : *     
  48 : * VARIABLES:
  49 : * ----------
  50 : *     
  51 : *     QUADRA = .TRUE.  SI ON CHERCHE A MAILLER EN QUADRANGLES.
  52 : *     
  53 :       LOGICAL QUADRA
  54 : *     
  55 : * FONCTIONS:
  56 : * ----------
  57 : *     
  58 :       LOGICAL QUAD
  59 :       QUAD(I) = (NBNN.EQ.4).AND.(NUM(NBNN,I).NE.0)
  60 : *     
  61 : * REMARQUES:
  62 : * ----------
  63 : *     
  64 : *     CRITERES DE QUALITE:
  65 : *     - PLUS GRAND ANGLE DE QUADRANGLE (ANALOGUE AU S.P. "AMELIO"),
  66 : *     - PLUS PETIT ANGLE DE QUADRANGLE,
  67 : *     - SURFACE TRIANGLE PAR RAPPORT A EQUILATERAL (ANALOGUE AU S.P.
  68 : *       "AMELIO", LIMITE A 0.3 AU LIEU DE 0.4)
  69 : *     MAIS CALCUL DANS L'ESPACE GEOMETRIQUE REEL ET IMPOSSIBILITE DE
  70 : *     DEPLACER LES NOEUDS.
  71 : *     
  72 : * AUTEUR, DATE DE CREATION:
  73 : * -------------------------
  74 : *     
  75 : *     PASCAL MANIGOT     19 NOVEMBRE 1990
  76 : *     
  77 : * LANGAGE:
  78 : * --------
  79 : *     
  80 : *     FORTRAN77
  81 : *     
  82 : ************************************************************************
  83 : *     
  84 :       IF (NUMELG.LE.1) RETURN
  85 : *     
  86 :       QUADRA = NBNN.EQ.4
  87 : *     
  88 : *     
  89 : *     1) CONVERSION DES QUADRANGLES APLATIS EN COUPLES DE TRIANGLES
  90 : *     
  91 :       IF (QUADRA) THEN
  92 : *     
  93 :          NUMEL0 = NUMELG
  94 :          DO 100 L1=1,NUMEL0
  95 :             IF (.NOT. QUAD(L1)) GOTO 100
  96 : *     
  97 :             I1=NUM(1,L1)
  98 :             I2=NUM(2,L1)
  99 :             I3=NUM(3,L1)
 100 :             I4=NUM(4,L1)
 101 :             N1 = NSA(I1)
 102 :             N2 = NSA(I2)
 103 :             N3 = NSA(I3)
 104 :             N4 = NSA(I4)
 104 :             CALL ANGQUA (N1,N2,N3,N4,  ANG1,ANG2,ANG3,ANG4)
 105 :             IF  (ANG1.GT.ANGMAX .OR. ANG2.LT.ANGMIN
 106 :      &           .OR. ANG3.GT.ANGMAX .OR. ANG4.LT.ANGMIN) THEN
 107 :                NUM(4,L1)=0
 108 :                NUMELG=NUMELG+1
 109 :                NUM(1,NUMELG)=I1
 110 :                NUM(2,NUMELG)=I3
 111 :                NUM(3,NUMELG)=I4
 112 :                NUM(4,NUMELG)=0
 113 :             ELSE IF  (ANG1.LT.ANGMIN .OR. ANG2.GT.ANGMAX
 114 :      &              .OR. ANG3.LT.ANGMIN .OR. ANG4.GT.ANGMAX) THEN
 115 :                NUM(4,L1)=0
 116 :                NUM(3,L1)=I4
 117 :                NUMELG=NUMELG+1
 118 :                NUM(1,NUMELG)=I2
 119 :                NUM(2,NUMELG)=I3
 120 :                NUM(3,NUMELG)=I4
 121 :                NUM(4,NUMELG)=0
 122 :             END IF
 123 :  100     CONTINUE
 124 : *        END DO
 125 : *     
 126 :          IF (IIMPI .EQ. 1808) THEN
 127 :             WRITE (IOIMP,2100) (NUMELG - NUMEL0)
 128 :  2100       FORMAT (1X,I5,' DECOUPAGES DE 1 QUADRANGLE EN 2 TRIANGLES.')
 129 :          END IF
 130 : *     
 131 :       END IF
 132 : *     
 133 : *     
 134 :       MODIF2 = 0
 135 :       MODIF4 = 0
 136 :       MODIF6 = 0
 137 : *     DO
 138 :  400  CONTINUE
 139 :       MODIF1 = MODIF2
 140 :       MODIF3 = MODIF4
 141 :       MODIF5 = MODIF6
 142 : *     
 143 : *     
 144 : *        2) RECHERCHE DE TRIANGLES ADJACENTS POUR:
 145 : *           - CREATION DE QUADRANGLE, OU
 146 : *           - INVERSION EVENTUELLE DE DIAGONALE.
 147 : *     
 148 : *     
 149 : *        DEFINITION DE LA TABLE DES CONNEXIONS:
 150 :       DO 200 I=1,NUMNP
 151 :          NBVOIS(I)=0
 152 :  200  CONTINUE
 153 : *        END DO
 154 :       DO 202 L2=1,NUMELG
 155 :          DO 2021 I=1,NBNN
 156 :             IA = NUM(I,L2)
 157 :             IF (IA .NE. 0) THEN
 158 :                NBVOIS(IA)=NBVOIS(IA)+1
 159 :                KON(NBVOIS(IA),IA)=L2
 160 :             END IF
 161 :  2021    CONTINUE
 162 :  202  CONTINUE
 163 : *        END DO
 164 : *     
 165 :       L1 = 0
 166 :  500  IF (L1.LT.NUMELG) THEN
 167 :          L1 = L1 + 1
 168 :          IF (QUAD(L1)) GOTO 500
 169 : *     
 170 :          I1=NUM(1,L1)
 171 :          I2=NUM(2,L1)
 172 :          I3=NUM(3,L1)
 173 :          N1 = NSA(I1)
 174 :          N2 = NSA(I2)
 175 :          N3 = NSA(I3)
 175 :          CALL VALTRI (N1,N2,N3,  CAL1)
 176 : *     
 177 :          DO 540 IPOI=1,3
 178 : *     
 179 :             NODL1 = NUM(IPOI,L1)
 180 :             NM=NBVOIS(NODL1)
 181 : *     
 182 :             DO 520 IVOIS=1,NM
 183 : *     
 184 :                L2=KON(IVOIS,NODL1)
 185 :                IF (L2 .EQ. L1) GOTO 520
 186 :                IF (QUAD(L2)) GOTO 520
 187 : *     
 188 :                IF    ((I1.EQ.NUM(1,L2)).AND.(I2.EQ.NUM(3,L2))) THEN
 189 :                   I9=NUM(2,L2)
 190 :                ELSEIF((I1.EQ.NUM(2,L2)).AND.(I2.EQ.NUM(1,L2))) THEN
 191 :                   I9=NUM(3,L2)
 192 :                ELSEIF((I1.EQ.NUM(3,L2)).AND.(I2.EQ.NUM(2,L2))) THEN
 193 :                   I9=NUM(1,L2)
 194 : *     
 195 :                ELSEIF((I1.EQ.NUM(1,L2)).AND.(I3.EQ.NUM(2,L2))) THEN
 196 :                   IAA=I1
 197 :                   I1=I3
 198 :                   I3=I2
 199 :                   I2=IAA
 200 :                   I9=NUM(3,L2)
 201 :                ELSEIF((I1.EQ.NUM(2,L2)).AND.(I3.EQ.NUM(3,L2))) THEN
 202 :                   IAA=I1
 203 :                   I1=I3
 204 :                   I3=I2
 205 :                   I2=IAA
 206 :                   I9=NUM(1,L2)
 207 :                ELSEIF((I1.EQ.NUM(3,L2)).AND.(I3.EQ.NUM(1,L2))) THEN
 208 :                   IAA=I1
 209 :                   I1=I3
 210 :                   I3=I2
 211 :                   I2=IAA
 212 :                   I9=NUM(2,L2)
 213 : *     
 214 :                ELSEIF((I2.EQ.NUM(1,L2)).AND.(I3.EQ.NUM(3,L2))) THEN
 215 :                   IAA=I1
 216 :                   I1=I2
 217 :                   I2=I3
 218 :                   I3=IAA
 219 :                   I9=NUM(2,L2)
 220 :                ELSEIF((I2.EQ.NUM(2,L2)).AND.(I3.EQ.NUM(1,L2))) THEN
 221 :                   IAA=I1
 222 :                   I1=I2
 223 :                   I2=I3
 224 :                   I3=IAA
 225 :                   I9=NUM(3,L2)
 226 :                ELSEIF((I2.EQ.NUM(3,L2)).AND.(I3.EQ.NUM(2,L2))) THEN
 227 :                   IAA=I1
 228 :                   I1=I2
 229 :                   I2=I3
 230 :                   I3=IAA
 231 :                   I9=NUM(1,L2)
 232 :                ELSE
 233 : *                    ITERATE
 234 :                   GOTO 520
 235 :                END IF
 236 : *     
 237 :                N1 = NSA(I1)
 238 :                N9 = NSA(I9)
 239 :                N2 = NSA(I2)
 240 :                N3 = NSA(I3)
 240 :                CALL ANGQUA (N1,N9,N2,N3,  ANG1,ANG2,ANG3,ANG4)
 241 : *     
 242 :                IF (QUADRA) THEN
 243 :                   IF   (MIN(ANG1,ANG2,ANG3,ANG4).GT.ANGMIN
 244 :      &                 .AND. MAX(ANG1,ANG2,ANG3,ANG4).LT.ANGMAX) THEN
 245 : *                       ON PEUT ASSEMBLER UN QUADRANGLE:
 246 :                      NUM(1,L1)=I1
 247 :                      NUM(2,L1)=I9
 248 :                      NUM(3,L1)=I2
 249 :                      NUM(4,L1)=I3
 250 : *     
 251 : *                       ON ENLEVE L'ELEMENT "L2":
 252 :                      NUMELG=NUMELG-1
 253 :                      DO 102 K=L2,NUMELG
 254 :                         NUM(1,K)=NUM(1,K+1)
 255 :                         NUM(2,K)=NUM(2,K+1)
 256 :                         NUM(3,K)=NUM(3,K+1)
 257 :                         NUM(4,K)=NUM(4,K+1)
 258 :  102                 CONTINUE
 259 : *                       END DO
 260 :                      IF (L1.GT.L2) L1 = L1 - 1
 261 :                      DO 103 K1=1,MAXVOI
 262 :                         DO 1031 K2=1,NUMNP
 263 :                            IF (KON(K1,K2).GT.L2) THEN
 264 :                               KON(K1,K2)=KON(K1,K2)-1
 265 :                            ELSE IF (KON(K1,K2).EQ.L2) THEN
 266 :                               NBVOIS(K2) = NBVOIS(K2) - 1
 267 :                               DO 120 K1B = K1,NBVOIS(K2)
 268 :                                  KON(K1B,K2) = KON(K1B+1,K2)
 269 :  120                          CONTINUE
 270 : *                             END DO
 271 :                            END IF
 272 :  1031                   CONTINUE
 273 :  103                 CONTINUE
 274 : *                       END DO
 275 : *                       FIN DE LA SUPPRESSION DE L'ELEMENT "L2"
 276 : *     
 277 :                      MODIF2 = MODIF2 + 1
 278 :                      GOTO 500
 279 :                   END IF
 280 :                END IF
 281 : *     
 282 :                IF (MAX(ANG1,ANG2,ANG3,ANG4) .LT. PI) THEN
 283 : *                    INVERSION EVENTUELLE DE DIAGONALE POUR LES 2
 284 : *                    TRIANGLES ADJACENTS:
 284 :                   CALL VALTRI (N1,N9,N3,  CAL2)
 285 :                   IF (CAL2.GT.CAL1) THEN
 285 :                      CALL VALTRI (N9,N2,N3,  CAL2)
 286 :                      IF (CAL2.GT.CAL1) THEN
 287 : *                          ON PEUT COUPER SUIVANT LA DEUXIEME DIAGONALE
 288 :                         NUM(1,L1)=I1
 289 :                         NUM(2,L1)=I9
 290 :                         NUM(3,L1)=I3
 291 :                         NUM(1,L2)=I9
 292 :                         NUM(2,L2)=I2
 293 :                         NUM(3,L2)=I3
 294 :                         MODIF4 = MODIF4 + 1
 295 :                         GOTO 500
 296 :                      END IF
 297 :                   END IF
 298 :                END IF
 299 : *     
 300 :  520        CONTINUE
 301 : *              END DO
 302 : *     
 303 :  540     CONTINUE
 304 : *           END DO
 305 : *     
 306 :          GOTO 500
 307 :       END IF
 308 : *     
 309 :       IF (IIMPI .EQ. 1808) THEN
 310 :          WRITE (IOIMP,2000) (MODIF2 - MODIF1)
 311 :  2000    FORMAT (1X,I5,
 312 :      &        ' TRANSFORMATIONS DE 2 TRIANGLES EN 1 QUADRANGLE.')
 313 :          WRITE (IOIMP,2110) (MODIF4 - MODIF3)
 314 :  2110    FORMAT (1X,I5,' INVERSIONS DE DIAGONALES.')
 315 :       END IF
 316 : *     
 317 :       IF (.NOT. QUADRA) THEN
 318 :          IF (MODIF4 .GT. MODIF3) GOTO 400
 319 :          RETURN
 320 :       END IF
 321 : *     
 322 : *     
 323 : *        3) AMELIORATION DES QUADRANGLES PAR GLISSEMENT DES TRIANGLES
 324 : *     
 325 : *     
 326 :       IF ((MODIF2+MODIF4) .GT. (MODIF1+MODIF3)) THEN
 327 : *           REDEFINITION DE LA TABLE DES CONNEXIONS:
 328 :          DO 610 I=1,NUMNP
 329 :             NBVOIS(I)=0
 330 :  610     CONTINUE
 331 : *           END DO
 332 :          DO 620 L2=1,NUMELG
 333 :             DO 6201 I=1,NBNN
 334 :                IA = NUM(I,L2)
 335 :                IF (IA .NE. 0) THEN
 336 :                   NBVOIS(IA)=NBVOIS(IA)+1
 337 :                   KON(NBVOIS(IA),IA)=L2
 338 :                END IF
 339 :  6201       CONTINUE
 340 :  620     CONTINUE
 341 : *           END DO
 342 :       END IF
 343 : *     
 344 :       L1 = 0
 345 :  700  IF (L1.LT.NUMELG) THEN
 346 :          L1 = L1 + 1
 347 :          IF (QUAD(L1)) GOTO 700
 348 : *     
 349 :          I1=NUM(1,L1)
 350 :          I2=NUM(2,L1)
 351 :          I3=NUM(3,L1)
 352 :          PABO1 = ANGMAX * 1.01
 353 : *     
 354 :          DO 740 IPOI=1,3
 355 : *     
 356 :             NODL1 = NUM(IPOI,L1)
 357 :             NM=NBVOIS(NODL1)
 358 : *     
 359 :             DO 720 IVOIS=1,NM
 360 : *     
 361 :                L2=KON(IVOIS,NODL1)
 362 :                IF (.NOT.QUAD(L2)) GOTO 720
 363 : *     
 364 :                IF ((I1.EQ.NUM(1,L2)).AND.(I2.EQ.NUM(4,L2))) THEN
 365 :                   II1 = I2
 366 :                   II2 = I3
 367 :                   II3 = I1
 368 :                   II4 = NUM(2,L2)
 369 :                   II5 = NUM(3,L2)
 370 :                ELSEIF((I1.EQ.NUM(2,L2)).AND.(I2.EQ.NUM(1,L2))) THEN
 371 :                   II1 = I2
 372 :                   II2 = I3
 373 :                   II3 = I1
 374 :                   II4 = NUM(3,L2)
 375 :                   II5 = NUM(4,L2)
 376 :                ELSEIF((I1.EQ.NUM(3,L2)).AND.(I2.EQ.NUM(2,L2))) THEN
 377 :                   II1 = I2
 378 :                   II2 = I3
 379 :                   II3 = I1
 380 :                   II4 = NUM(4,L2)
 381 :                   II5 = NUM(1,L2)
 382 :                ELSEIF((I1.EQ.NUM(4,L2)).AND.(I2.EQ.NUM(3,L2))) THEN
 383 :                   II1 = I2
 384 :                   II2 = I3
 385 :                   II3 = I1
 386 :                   II4 = NUM(1,L2)
 387 :                   II5 = NUM(2,L2)
 388 : *     
 389 :                ELSEIF((I1.EQ.NUM(1,L2)).AND.(I3.EQ.NUM(2,L2))) THEN
 390 :                   II1 = I1
 391 :                   II2 = I2
 392 :                   II3 = I3
 393 :                   II4 = NUM(3,L2)
 394 :                   II5 = NUM(4,L2)
 395 :                ELSEIF((I1.EQ.NUM(2,L2)).AND.(I3.EQ.NUM(3,L2))) THEN
 396 :                   II1 = I1
 397 :                   II2 = I2
 398 :                   II3 = I3
 399 :                   II4 = NUM(4,L2)
 400 :                   II5 = NUM(1,L2)
 401 :                ELSEIF((I1.EQ.NUM(3,L2)).AND.(I3.EQ.NUM(4,L2))) THEN
 402 :                   II1 = I1
 403 :                   II2 = I2
 404 :                   II3 = I3
 405 :                   II4 = NUM(1,L2)
 406 :                   II5 = NUM(2,L2)
 407 :                ELSEIF((I1.EQ.NUM(4,L2)).AND.(I3.EQ.NUM(1,L2))) THEN
 408 :                   II1 = I1
 409 :                   II2 = I2
 410 :                   II3 = I3
 411 :                   II4 = NUM(2,L2)
 412 :                   II5 = NUM(3,L2)
 413 : *     
 414 :                ELSEIF((I2.EQ.NUM(1,L2)).AND.(I3.EQ.NUM(4,L2))) THEN
 415 :                   II1 = I3
 416 :                   II2 = I1
 417 :                   II3 = I2
 418 :                   II4 = NUM(2,L2)
 419 :                   II5 = NUM(3,L2)
 420 :                ELSEIF((I2.EQ.NUM(2,L2)).AND.(I3.EQ.NUM(1,L2))) THEN
 421 :                   II1 = I3
 422 :                   II2 = I1
 423 :                   II3 = I2
 424 :                   II4 = NUM(3,L2)
 425 :                   II5 = NUM(4,L2)
 426 :                ELSEIF((I2.EQ.NUM(3,L2)).AND.(I3.EQ.NUM(2,L2))) THEN
 427 :                   II1 = I3
 428 :                   II2 = I1
 429 :                   II3 = I2
 430 :                   II4 = NUM(4,L2)
 431 :                   II5 = NUM(1,L2)
 432 :                ELSEIF((I2.EQ.NUM(4,L2)).AND.(I3.EQ.NUM(3,L2))) THEN
 433 :                   II1 = I3
 434 :                   II2 = I1
 435 :                   II3 = I2
 436 :                   II4 = NUM(1,L2)
 437 :                   II5 = NUM(2,L2)
 438 :                ELSE
 439 : *                    ITERATE
 440 :                   GOTO 720
 441 :                END IF
 442 : *     
 443 :                N1 = NSA(II1)
 444 :                N2 = NSA(II2)
 445 :                N3 = NSA(II3)
 446 :                N4 = NSA(II4)
 447 :                N5 = NSA(II5)
 448 : *                 TRIANGLE=1,2,3    QUADRANGLE=1,3,4,5
 449 : *     
 450 : *                 QUALITE DU QUADRANGLE ACTUEL:
 450 :                CALL ANGQUA (N1,N3,N4,N5,  ANG1,ANG2,ANG3,ANG4)
 451 :                AN1345 = MAX(ANG1,ANG2,ANG3,ANG4,
 452 :      &              PI-ANG1,PI-ANG2,PI-ANG3,PI-ANG4)
 453 : *                 2 AUTRES QUADRANGLES POSSIBLES:
 453 :                CALL ANGQUA (N1,N2,N3,N4,  ANG1,ANG2,ANG3,ANG4)
 454 :                AN1234 = MAX(ANG1,ANG2,ANG3,ANG4,
 455 :      &              PI-ANG1,PI-ANG2,PI-ANG3,PI-ANG4)
 455 :                CALL ANGQUA (N1,N2,N3,N5,  ANG1,ANG2,ANG3,ANG4)
 456 :                AN1235 = MAX(ANG1,ANG2,ANG3,ANG4,
 457 :      &              PI-ANG1,PI-ANG2,PI-ANG3,PI-ANG4)
 458 : *     
 459 :                IF (AN1234 .LT. AN1345) THEN
 460 :                   IF (AN1234 .LT. PABO1) THEN
 461 : *                       1ER NOUVEAU TRIANGLE POSSIBLE:
 461 :                      CALL VALTRI (N1,N4,N5,  CAL1)
 462 :                      IF (CAL1 .GT. QUAL0) THEN
 463 :                         PABO1 = AN1234
 464 :                         L2BEST = L2
 465 :                         III1 = II4
 466 :                         III2 = II5
 467 :                         III3 = II1
 468 :                         III4 = II2
 469 :                         III5 = II3
 470 :                      END IF
 471 :                   END IF
 472 :                END IF
 473 :                IF (AN1235 .LT. PI) THEN
 474 : *                    2EME NOUVEAU TRIANGLE POSSIBLE:
 474 :                   CALL VALTRI (N1,N2,N5,  CAL1)
 475 :                   IF (CAL1 .GT. QUAL0) THEN
 475 :                      CALL ANGQUA (N2,N3,N4,N5,  ANG1,ANG2,ANG3,ANG4)
 476 :                      PABO3 = MAX(ANG1,ANG2,ANG3,ANG4,
 477 :      &                    PI-ANG1,PI-ANG2,PI-ANG3,PI-ANG4)
 478 :                      IF (PABO3 .LT. AN1345) THEN
 479 :                         IF (PABO3 .LT. PABO1) THEN
 480 :                            PABO1 = PABO3
 481 :                            L2BEST = L2
 482 :                            III1 = II5
 483 :                            III2 = II1
 484 :                            III3 = II2
 485 :                            III4 = II3
 486 :                            III5 = II4
 487 :                         END IF
 488 :                      END IF
 489 :                   END IF
 490 :                END IF
 491 :                IF (AN1234 .LT. PI) THEN
 492 : *                    3EME NOUVEAU TRIANGLE POSSIBLE:
 492 :                   CALL VALTRI (N2,N3,N4,  CAL1)
 493 :                   IF (CAL1 .GT. QUAL0) THEN
 493 :                      CALL ANGQUA (N4,N5,N1,N2,  ANG1,ANG2,ANG3,ANG4)
 494 :                      PABO3 = MAX(ANG1,ANG2,ANG3,ANG4,
 495 :      &                    PI-ANG1,PI-ANG2,PI-ANG3,PI-ANG4)
 496 :                      IF (PABO3 .LT. AN1345) THEN
 497 :                         IF (PABO3 .LT. PABO1) THEN
 498 :                            PABO1 = PABO3
 499 :                            L2BEST = L2
 500 :                            III1 = II2
 501 :                            III2 = II3
 502 :                            III3 = II4
 503 :                            III4 = II5
 504 :                            III5 = II1
 505 :                         END IF
 506 :                      END IF
 507 :                   END IF
 508 :                END IF
 509 :                IF (AN1235 .LT. AN1345) THEN
 510 :                   IF (AN1235 .LT. PABO1) THEN
 511 : *                       4EME NOUVEAU TRIANGLE POSSIBLE:
 511 :                      CALL VALTRI (N3,N4,N5,  CAL1)
 512 :                      IF (CAL1 .GT. QUAL0) THEN
 513 :                         PABO1 = AN1235
 514 :                         L2BEST = L2
 515 :                         III1 = II3
 516 :                         III2 = II4
 517 :                         III3 = II5
 518 :                         III4 = II1
 519 :                         III5 = II2
 520 :                      END IF
 521 :                   END IF
 522 :                END IF
 523 : *     
 524 :  720        CONTINUE
 525 : *              END DO
 526 : *     
 527 :  740     CONTINUE
 528 : *           END DO
 529 : *     
 530 :          IF (PABO1 .LT. ANGMAX) THEN
 531 : *              ON A TROUVE LE MOYEN DE MIEUX REPRESENTER UN ENSEMBLE
 532 : *              QUADRANGLE+TRIANGLE DANS UN POLYGONE DE 5 POINTS.
 533 :             MODIF6 = MODIF6 + 1
 534 :             L2 = MAX(L1,L2BEST)
 535 :             L1 = MIN(L1,L2BEST)
 536 :             NUM(1,L1) = III1
 537 :             NUM(2,L1) = III2
 538 :             NUM(3,L1) = III3
 539 :             NUM(4,L1) = 0
 540 :             NUM(1,L2) = III1
 541 :             NUM(2,L2) = III3
 542 :             NUM(3,L2) = III4
 543 :             NUM(4,L2) = III5
 544 :             L1 = L1 - 1
 545 :          END IF
 546 : *     
 547 :          GOTO 700
 548 :       END IF
 549 : *     
 550 :       IF (IIMPI .EQ. 1808) THEN
 551 :          WRITE (IOIMP,2010) (MODIF6 - MODIF5)
 552 :  2010    FORMAT (1X,I5,' DEPLACEMENTS DE TRIANGLES.')
 553 :       END IF
 554 : *     
 555 :       IF ((MODIF4+MODIF6) .GT. (MODIF3+MODIF5)) GOTO 400
 556 : *     END DO
 557 : *     
 558 :       END
 559 : 
 560 : 
 561 :  
 562 :  
 563 :  
 564 :  

© Cast3M 2003 - All rights reserved.
Disclaimer