Download reseau.procedur

Back to the list

   1 : * RESEAU    PROCEDUR  JC220346  12/09/12    21:15:08     7501           
   2 : 'DEBPROC' RESEAU TAB*'TABLE' NIND*'ENTIER' PARAM*'FLOTTANT';
   3 : ************************************************************************
   4 : *                                                                      *
   5 : *          PROCEDURE RESEAU   (APPELEE PAR LA PROCEDURE TRACTUFI)      *
   6 : *                                                                      *
   7 : *       INTERPOLATION D'UN RESEAU PARAMETRE DE COURBES                 *
   8 : *                                                                      *
   9 : ************************************************************************
  10 : ************************************************************************
  11 : *                                                                      *
  12 : *      LA PROCEDURE RESEAU S'APPLIQUE A DES COURBES MONOTONES          *
  13 : *                                                                      *
  14 : *   IL N'EST PAS NECESSAIRE QU'ELLES AIENT DES BORNES COMMUNES         *
  15 : *                                                                      *
  16 : *   QUAND CELA EST POSSIBLE ON PROLONGE LINEAIREMENT LES LISTES        *
  17 : *         D'ABSCISSES ET D'ORDONNEES POUR ATTEINDRE DES BORNES         *
  18 : *         COMMUNES SANS POUR AUTANT MODIFIER LES COURBES FOURNIES      *
  19 : *                                                                      *
  20 : ************************************************************************
  21 : *-----------------------------------------------------------------------
  22 : * RECEPTION DES ARGUMENTS
  23 : 
  24 : TIN='INDEX' TAB;
  25 : 
  26 : * ON CREE LA LISTE CONTENANT LES PARAMETRES
  27 : 
  28 : LPAR=PROG NIND * 0.;
  29 : I=0;
  30 : 'REPE' BOUCLE NIND;
  31 :        I=I + 1;
  32 :        IND=TIN.I;
  33 :       'REMP' LPAR I IND;
  34 : 'FIN' BOUCLE;
  35 : 
  36 : * ON ORDONNE LA LISTE CONTENANT LES PARAMETRES
  37 : * ON RECHERCHE LES DEUX PARAMETRES QUI ENTOURENT PARAM ET ON DETERMINE
  38 : * LA POSITION DE PARAM ENTRE CES DEUX PARAMETRES
  39 : 
  40 : LPAR = ORDONNER LPAR;
  41 : N='DIME' LPAR;
  42 : T1='EXTR' LPAR 1;
  43 : T2='EXTR' LPAR N;
  44 : 'SI' (PARAM < T1);
  45 :      PAR1=T1;
  46 :      PAR2='EXTR' LPAR 2;
  47 : 'FINSI';
  48 : 'SI' (PARAM > T2);
  49 :      PAR1='EXTR' LPAR (N - 1);
  50 :      PAR2=T2;
  51 : 'FINSI';
  52 : 'SI' ('ET' (PARAM >EG T1) (PARAM <EG T2));
  53 :      I=1;
  54 :      'REPE' BOUCLE0 (N - 1);
  55 :             I=I + 1;
  56 :             T2='EXTR' LPAR I;
  57 :             'SI' (T2 > PARAM);
  58 :                  PAR1=T1;
  59 :                  PAR2=T2;
  60 :                 'QUITTER' BOUCLE0;
  61 :             'SINON';
  62 :                  T1=T2;
  63 :             'FINSI';
  64 :      'FIN' BOUCLE0;
  65 : 'FINSI';
  66 : 
  67 : LAMBDA=(PAR2 - PARAM) / (PAR2 - PAR1);
  68 : 
  69 : EV1=TAB.PAR1;
  70 : EV2=TAB.PAR2;
  71 : LABS1='EXTR' EV1 ABSC;
  72 : LORD1='EXTR' EV1 ORDO;
  73 : LABS2='EXTR' EV2 ABSC;
  74 : LORD2='EXTR' EV2 ORDO;
  75 : L1='DIME' LABS1;M1=L1;
  76 : L2='DIME' LABS2;M2=L2;
  77 : *=======================================================================
  78 : *=                                                                     =
  79 : *=        ON VERIFIE QUE LES DEUX COURBES SONT MONOTONES               =
  80 : *=          ET ON CREE LES LISTES DE TRAVAIL A MODIFIER                =
  81 : *=                                                                     =
  82 : *=======================================================================
  83 : X1='EXTR' LABS1 1;
  84 : Y1='EXTR' LORD1 1;
  85 : X2='EXTR' LABS1 2;
  86 : Y2='EXTR' LORD1 2;
  87 : PI1=(Y2 - Y1) / (X2 - X1);
  88 : P1=PI1;
  89 : I=1;
  90 : 'REPETER' BOUCLE1 (L1 - 2);
  91 :     I=I + 1;
  92 :     X1='EXTR' LABS1 I;
  93 :     Y1='EXTR' LORD1 I;
  94 :     X2='EXTR' LABS1 (I + 1);
  95 :     Y2='EXTR' LORD1 (I + 1);
  96 :     P2=(Y2 - Y1) / (X2 - X1);
  97 :     'SI' ((P1 * P2) < 0.);
  98 :          MESS 'UNE COURBE AU MOINS NON MONOTONE';
  99 :         'QUITTER' RESEAU;
 100 :     'FINSI';
 101 :     P1=P2;
 102 : 'FIN' BOUCLE1;
 103 : PF1=P2;
 104 : X1='EXTR' LABS2 1;
 105 : Y1='EXTR' LORD2 1;
 106 : X2='EXTR' LABS2 2;
 107 : Y2='EXTR' LORD2 2;
 108 : PI2=(Y2 - Y1) / (X2 - X1);
 109 : P1=PI2;
 110 : I=1;
 111 : 'REPETER' BOUCLE2 (L2 - 2);
 112 :     I=I + 1;
 113 :     X1='EXTR' LABS2 I;
 114 :     Y1='EXTR' LORD2 I;
 115 :     X2='EXTR' LABS2 (I + 1);
 116 :     Y2='EXTR' LORD2 (I + 1);
 117 :     P2=(Y2 - Y1) / (X2 - X1);
 118 :     'SI' ((P1 * P2) < 0.);
 119 :          MESS 'UNE COURBE AU MOINS NON MONOTONE';
 120 :         'QUITTER' RESEAU;
 121 :     'FINSI';
 122 :     P1=P2;
 123 : 'FIN' BOUCLE2;
 124 : PF2=P2;
 125 : TABS1=COPI LABS1;
 126 : TORD1=COPI LORD1;
 127 : TABS2=COPI LABS2;
 128 : TORD2=COPI LORD2;
 129 : *=======================================================================
 130 : *=                                                                     =
 131 : *= ON COMPARE LES PENTES INITIALES ET FINALES A 1 (EN VALEUR ABSOLUE)  =
 132 : *=                                                                     =
 133 : *=======================================================================
 134 : *--------------------------------------------------------DEBUT DE COURBE
 135 : 'SI' ('ET' ((ABS(PI1)) >EG 1.) ((ABS(PI2)) >EG 1.));IPEND=A;'FINSI';
 136 : 'SI' ('ET' ((ABS(PI1)) < 1.) ((ABS(PI2)) < 1.));IPEND=B;'FINSI';
 137 : 'SI' ('ET' ((ABS(PI1)) >EG 1.) ((ABS(PI2)) < 1.));IPEND=F;'FINSI';
 138 : 'SI' ('ET' ((ABS(PI1)) < 1.) ((ABS(PI2)) >EG 1.));IPEND=F;'FINSI';
 139 : *----------------------------------------------------------FIN DE COURBE
 140 : 'SI' ('ET' ((ABS(PF1)) >EG 1.) ((ABS(PF2)) >EG 1.));IPENF=A;'FINSI';
 141 : 'SI' ('ET' ((ABS(PF1)) < 1.) ((ABS(PF2)) < 1.));IPENF=B;'FINSI';
 142 : 'SI' ('ET' ((ABS(PF1)) >EG 1.) ((ABS(PF2)) < 1.));IPENF=F;'FINSI';
 143 : 'SI' ('ET' ((ABS(PF1)) < 1.) ((ABS(PF2)) >EG 1.));IPENF=F;'FINSI';
 144 : *=======================================================================
 145 : *=                                                                     =
 146 : *=      CAS OU UNE COURBE EST CROISSANTE ET L'AUTRE DECROISSANTE       =
 147 : *=                                                                     =
 148 : *=======================================================================
 149 : 'SI' ((PI1 * PI2) < 0.);
 150 : XOUY=XX;
 151 : *--------------------------------------------------------DEBUT DE COURBE
 152 :      X1='EXTR' TABS1 1;
 153 :      X2='EXTR' TABS2 1;
 154 :      'SI' ('EGA' IPEND 'B');
 155 :          'SI' (X1 < X2);
 156 : *------------------------------------------PROLONGATION DE LA COURBE N›2
 157 :               M2=M2 + 1;
 158 :               Y='EXTR' TORD2 1;
 159 :               Y=Y + ((X1 - X2) * PI2);
 160 :               LISTE=(PROG X1) ET TABS2;
 161 :               TABS2=COPI LISTE;DETRUIRE LISTE;
 162 :               LISTE=(PROG Y) ET TORD2;
 163 :               TORD2=COPI LISTE;DETRUIRE LISTE;
 164 :          'FINSI';
 165 :          'SI' (X1 > X2);
 166 : *------------------------------------------PROLONGATION DE LA COURBE N›1
 167 :               M1=M1 + 1;
 168 :               Y='EXTR' TORD1 1;
 169 :               Y=Y + ((X2 - X1) * PI1);
 170 :               LISTE=(PROG X2) ET TABS1;
 171 :               TABS1=COPI LISTE;DETRUIRE LISTE;
 172 :               LISTE=(PROG Y) ET TORD1;
 173 :               TORD1=COPI LISTE;DETRUIRE LISTE;
 174 :          'FINSI';
 175 :      'FINSI';
 176 :      'SI' ('OU' ('EGA' IPEND 'A') ('EGA' IPEND 'F'));
 177 :          'SI' (X1 < X2);
 178 : *-------------------------------------------RESTRICTION DE LA COURBE N›1
 179 :               Y='IPOL' X2 LABS1 LORD1;
 180 :               LISTE1=PROG X1;
 181 :               Y1='EXTR' TORD1 1;
 182 :               LISTE2=PROG Y1;
 183 :               I=1;
 184 :               'REPE' BOUCLE3 (M1 - 1);
 185 :                     I=I + 1;
 186 :                     X='EXTR' TABS1 I;
 187 :                     'SI' (X <EG X2);
 188 :                          LISTE1=LISTE1 ET (PROG X);
 189 :                          Y1='EXTR' TORD1 I;
 190 :                          LISTE2=LISTE2 ET (PROG Y1);
 191 :                          M1=M1 - 1;
 192 :                     'SINON';
 193 :                          'QUITTER' BOUCLE3;
 194 :                     'FINSI';
 195 :               'FIN' BOUCLE3;
 196 :               TABS1=TABS1 SAUF LISTE1;DETRUIRE LISTE1;
 197 :               TORD1=TORD1 SAUF LISTE2;DETRUIRE LISTE2;
 198 :               LISTE=(PROG X2) ET TABS1;
 199 :               TABS1=COPI LISTE;DETRUIRE LISTE;
 200 :               LISTE=(PROG Y) ET TORD1;
 201 :               TORD1=COPI LISTE;DETRUIRE LISTE;
 202 :          'FINSI';
 203 :          'SI' (X1 > X2);
 204 : *-------------------------------------------RESTRICTION DE LA COURBE N›2
 205 :               Y='IPOL' X1 LABS2 LORD2;
 206 :               LISTE1=PROG X2;
 207 :               Y1='EXTR' TORD2 1;
 208 :               LISTE2=PROG Y1;
 209 :               I=1;
 210 :               'REPE' BOUCLE4 (M2 - 1);
 211 :                     I=I + 1;
 212 :                     X='EXTR' TABS2 I;
 213 :                     'SI' (X <EG X1);
 214 :                          LISTE1=LISTE1 ET (PROG X);
 215 :                          Y1='EXTR' TORD2 I;
 216 :                          LISTE2=LISTE2 ET (PROG Y1);
 217 :                          M2=M2 - 1;
 218 :                     'SINON';
 219 :                          'QUITTER' BOUCLE4;
 220 :                     'FINSI';
 221 :               'FIN' BOUCLE4;
 222 :               TABS2=TABS2 SAUF LISTE1;DETRUIRE LISTE1;
 223 :               TORD2=TORD2 SAUF LISTE2;DETRUIRE LISTE2;
 224 :               LISTE=(PROG X1) ET TABS2;
 225 :               TABS2=COPI LISTE;DETRUIRE LISTE;
 226 :               LISTE=(PROG Y) ET TORD2;
 227 :               TORD2=COPI LISTE;DETRUIRE LISTE;
 228 :          'FINSI';
 229 :      'FINSI';
 230 : *----------------------------------------------------------FIN DE COURBE
 231 :      X1='EXTR' TABS1 M1;
 232 :      X2='EXTR' TABS2 M2;
 233 :      'SI' ('EGA' IPENF 'B');
 234 :           'SI' (X1 < X2);
 235 : *------------------------------------------PROLONGATION DE LA COURBE N›1
 236 :                Y='EXTR' TORD1 M1;
 237 :                Y=Y + ((X2 - X1) * PF1);
 238 :                M1=M1 + 1;
 239 :                TABS1=TABS1 ET (PROG X2);
 240 :                TORD1=TORD1 ET (PROG Y);
 241 :           'FINSI';
 242 :           'SI' (X1 > X2);
 243 : *------------------------------------------PROLONGATION DE LA COURBE N›2
 244 :                Y='EXTR' TORD2 M2;
 245 :                Y=Y + ((X1 - X2) * PF2);
 246 :                M2=M2 + 1;
 247 :                TABS2=TABS2 ET (PROG X1);
 248 :                TORD2=TORD2 ET (PROG Y);
 249 :           'FINSI';
 250 :      'FINSI';
 251 :      'SI' ('OU' ('EGA' IPENF 'A') ('EGA' IPENF 'B'));
 252 :           'SI' (X1 < X2);
 253 : *-------------------------------------------RESTRICTION DE LA COURBE N›2
 254 :                Y1='IPOL' X1 LABS2 LORD2;
 255 :                I=1;
 256 :                X='EXTR' TABS2 1;LISTE1=PROG X;
 257 :                Y='EXTR' TORD2 1;LISTE2=PROG Y;
 258 :                'REPE' BOUCLE5 (M2 - 1);
 259 :                      I=I + 1;
 260 :                      X='EXTR' TABS2 I;
 261 :                      'SI' (X < X1);
 262 :                           Y='EXTR' TORD2 I;
 263 :                           LISTE1=LISTE1 ET (PROG X);
 264 :                           LISTE2=LISTE2 ET (PROG Y);
 265 :                      'SINON';
 266 :                           LISTE1=LISTE1 ET (PROG X1);
 267 :                           LISTE2=LISTE2 ET (PROG Y1);
 268 :                           M2=I;
 269 :                           'QUITTER' BOUCLE5;
 270 :                      'FINSI';
 271 :                'FIN' BOUCLE5;
 272 :                TABS2=COPI LISTE1;DETRUIRE LISTE1;
 273 :                TORD2=COPI LISTE2;DETRUIRE LISTE2;
 274 :           'FINSI';
 275 :           'SI' (X1 > X2);
 276 : *-------------------------------------------RESTRICTION DE LA COURBE N›1
 277 :                Y1='IPOL' X2 LABS1 LORD1;
 278 :                I=1;
 279 :                X='EXTR' TABS1 1;LISTE1=PROG X;
 280 :                Y='EXTR' TORD1 1;LISTE2=PROG Y;
 281 :                'REPE' BOUCLE6 (M1 - 1);
 282 :                      I=I + 1;
 283 :                      X='EXTR' TABS1 I;
 284 :                      'SI' (X < X2);
 285 :                           Y='EXTR' TORD1 I;
 286 :                           LISTE1=LISTE1 ET (PROG X);
 287 :                           LISTE2=LISTE2 ET (PROG Y);
 288 :                      'SINON';
 289 :                           LISTE1=LISTE1 ET (PROG X2);
 290 :                           LISTE2=LISTE2 ET (PROG Y1);
 291 :                           M1=I;
 292 :                           'QUITTER' BOUCLE6;
 293 :                      'FINSI';
 294 :                'FIN' BOUCLE6;
 295 :                TABS1=COPI LISTE1;DETRUIRE LISTE1;
 296 :                TORD1=COPI LISTE2;DETRUIRE LISTE2;
 297 :           'FINSI';
 298 :      'FINSI';
 299 : 'FINSI';
 300 : *=======================================================================
 301 : *=                                                                     =
 302 : *=      COURBES SIMULTANEMENT SOIT CROISSANTES SOIT DECROISSANTES      =
 303 : *=                                                                     =
 304 : *=======================================================================
 305 : *&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
 306 : *&                                                                     &
 307 : *&  PENTES INITIALES SUPERIEURES A 1                                   &
 308 : *&  PENTES FINALES SUPERIEURES A 1                                     &
 309 : *&                                                                     &
 310 : *&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
 311 : 'SI' ('ET' ('EGA' IPEND 'A') ('EGA' IPENF 'A'));
 312 : XOUY=YY;
 313 : *--------------------------------------------------------DEBUT DE COURBE
 314 :      Y1='EXTR' TORD1 1;
 315 :      Y2='EXTR' TORD2 1;
 316 :      'SI' (Y1 < Y2);
 317 : *------------------------------------------PROLONGATION DE LA COURBE N›2
 318 :           M2=M2 + 1;
 319 :           X='EXTR' TABS2 1;
 320 :           X=X + ((Y1 - Y2) / PI2);
 321 :           LISTE=(PROG X) ET TABS2;
 322 :           TABS2=COPI LISTE;DETRUIRE LISTE;
 323 :           LISTE=(PROG Y1) ET TORD2;
 324 :           TORD2=COPI LISTE;DETRUIRE LISTE;
 325 :      'FINSI';
 326 :      'SI' (Y1 > Y2);
 327 : *------------------------------------------PROLONGATION DE LA COURBE N›1
 328 :           M1=M1 + 1;
 329 :           X='EXTR' TABS1 1;
 330 :           X=X + ((Y2 - Y1) / PI1);
 331 :           LISTE=(PROG X) ET TABS1;
 332 :           TABS1=COPI LISTE;DETRUIRE LISTE;
 333 :           LISTE=(PROG Y2) ET TORD1;
 334 :           TORD1=COPI LISTE;DETRUIRE LISTE;
 335 :      'FINSI';
 336 : *----------------------------------------------------------FIN DE COURBE
 337 :      Y1='EXTR' TORD1 M1;
 338 :      Y2='EXTR' TORD2 M2;
 339 :      'SI' (Y1 < Y2);
 340 : *------------------------------------------PROLONGATION DE LA COURBE N›1
 341 :           X='EXTR' TABS1 M1;
 342 :           X=X + ((Y2 - Y1) / PF1);
 343 :           M1=M1 + 1;
 344 :           TABS1=TABS1 ET (PROG X);
 345 :           TORD1=TORD1 ET (PROG Y2);
 346 :      'FINSI';
 347 :      'SI' (Y1 > Y2);
 348 : *------------------------------------------PROLONGATION DE LA COURBE N›2
 349 :           X='EXTR' TABS2 M2;
 350 :           X=X + ((Y1 - Y2) / PF2);
 351 :           M2=M2 + 1;
 352 :           TABS2=TABS2 ET (PROG X);
 353 :           TORD2=TORD2 ET (PROG Y1);
 354 :      'FINSI';
 355 : 'FINSI';
 356 : *&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
 357 : *&                                                                     &
 358 : *&  PENTES INITIALES INFERIEURES A 1                                   &
 359 : *&  PENTES FINALES INFERIEURES A 1                                     &
 360 : *&                                                                     &
 361 : *&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
 362 : 'SI' ('ET' ('EGA' IPEND 'B') ('EGA' IPENF 'B'));
 363 : XOUY=XX;
 364 : *--------------------------------------------------------DEBUT DE COURBE
 365 :      X1='EXTR' TABS1 1;
 366 :      X2='EXTR' TABS2 1;
 367 :      'SI' (X1 < X2);
 368 : *------------------------------------------PROLONGATION DE LA COURBE N›2
 369 :           M2=M2 + 1;
 370 :           Y='EXTR' TORD2 1;
 371 :           Y=Y + ((X1 - X2) * PI2);
 372 :           LISTE=(PROG X1) ET TABS2;
 373 :           TABS2=COPI LISTE;DETRUIRE LISTE;
 374 :           LISTE=(PROG Y) ET TORD2;
 375 :           TORD2=COPI LISTE;DETRUIRE LISTE;
 376 :      'FINSI';
 377 :      'SI' (X1 > X2);
 378 : *------------------------------------------PROLONGATION DE LA COURBE N›1
 379 :           M1=M1 + 1;
 380 :           Y='EXTR' TORD1 1;
 381 :           Y=Y + ((X2 - X1) * PI1);
 382 :           LISTE=(PROG X2) ET TABS1;
 383 :           TABS1=COPI LISTE;DETRUIRE LISTE;
 384 :           LISTE=(PROG Y) ET TORD1;
 385 :           TORD1=COPI LISTE;DETRUIRE LISTE;
 386 :      'FINSI';
 387 : *----------------------------------------------------------FIN DE COURBE
 388 :      X1='EXTR' TABS1 M1;
 389 :      X2='EXTR' TABS2 M2;
 390 :      'SI' (X1 < X2);
 391 : *------------------------------------------PROLONGATION DE LA COURBE N›1
 392 :           Y='EXTR' TORD1 M1;
 393 :           Y=Y + ((X2 - X1) * PF1);
 394 :           M1=M1 + 1;
 395 :           TABS1=TABS1 ET (PROG X2);
 396 :           TORD1=TORD1 ET (PROG Y);
 397 :      'FINSI';
 398 :      'SI' (X1 > X2);
 399 : *------------------------------------------PROLONGATION DE LA COURBE N›2
 400 :           Y='EXTR' TORD2 M2;
 401 :           Y=Y + ((X1 - X2) * PF2);
 402 :           M2=M2 + 1;
 403 :           TABS2=TABS2 ET (PROG X1);
 404 :           TORD2=TORD2 ET (PROG Y);
 405 :      'FINSI';
 406 : 'FINSI';
 407 : *&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
 408 : *&                                                                     &
 409 : *&  PENTES INITIALES DE CHAQUES COTES DE 1                             &
 410 : *&  PENTES FINALES DE CHAQUES COTES DE 1                               &
 411 : *&                                                                     &
 412 : *&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
 413 : 'SI' ('ET' ('EGA' IPEND 'F') ('EGA' IPENF 'F'));
 414 :      XOUY=XX;
 415 : *--------------------------------------------------------DEBUT DE COURBE
 416 :      X1='EXTR' TABS1 1;
 417 :      X2='EXTR' TABS2 1;
 418 :      'SI' (X1 < X2);
 419 : *-------------------------------------------RESTRICTION DE LA COURBE N›1
 420 :           Y='IPOL' X2 LABS1 LORD1;
 421 :           LISTE1=PROG X1;
 422 :           Y1='EXTR' TORD1 1;
 423 :           LISTE2=PROG Y1;
 424 :           I=1;
 425 :           'REPE' BOUCLE7 (M1 - 1);
 426 :                  I=I + 1;
 427 :                  X='EXTR' TABS1 I;
 428 :                  'SI' (X <EG X2);
 429 :                       LISTE1=LISTE1 ET (PROG X);
 430 :                       Y1='EXTR' TORD1 I;
 431 :                       LISTE2=LISTE2 ET (PROG Y1);
 432 :                       M1=M1 - 1;
 433 :                  'SINON';
 434 :                       'QUITTER' BOUCLE7;
 435 :                  'FINSI';
 436 :           'FIN' BOUCLE7;
 437 :           TABS1=TABS1 SAUF LISTE1;DETRUIRE LISTE1;
 438 :           TORD1=TORD1 SAUF LISTE2;DETRUIRE LISTE2;
 439 :           LISTE=(PROG X2) ET TABS1;
 440 :           TABS1=COPI LISTE;DETRUIRE LISTE;
 441 :           LISTE=(PROG Y) ET TORD1;
 442 :           TORD1=COPI LISTE;DETRUIRE LISTE;
 443 :      'FINSI';
 444 :      'SI' (X1 > X2);
 445 : *-------------------------------------------RESTRICTION DE LA COURBE N›2
 446 :           Y='IPOL' X1 LABS1 LORD1;
 447 :           LISTE1=PROG X2;
 448 :           Y1='EXTR' TORD2 1;
 449 :           LISTE2=PROG Y1;
 450 :           I=1;
 451 :           'REPE' BOUCLE8 (M2 - 1);
 452 :                  I=I + 1;
 453 :                  X='EXTR' TABS2 I;
 454 :                  'SI' (X <EG X1);
 455 :                       LISTE1=LISTE1 ET (PROG X);
 456 :                       Y1='EXTR' TORD2 I;
 457 :                       LISTE2=LISTE2 ET (PROG Y1);
 458 :                       M2=M2 - 1;
 459 :                  'SINON';
 460 :                       'QUITTER' BOUCLE8;
 461 :                  'FINSI';
 462 :           'FIN' BOUCLE8;
 463 :           TABS2=TABS2 SAUF LISTE1;DETRUIRE LISTE1;
 464 :           TORD2=TORD2 SAUF LISTE2;DETRUIRE LISTE2;
 465 :           LISTE=(PROG X1) ET TABS2;
 466 :           TABS2=COPI LISTE;DETRUIRE LISTE;
 467 :           LISTE=(PROG Y) ET TORD2;
 468 :           TORD2=COPI LISTE;DETRUIRE LISTE;
 469 :      'FINSI';
 470 : *----------------------------------------------------------FIN DE COURBE
 471 :      X1='EXTR' TABS1 M1;
 472 :      X2='EXTR' TABS2 M2;
 473 :      'SI' (X1 < X2);
 474 : *-------------------------------------------RESTRICTION DE LA COURBE N›2
 475 :           Y1='IPOL' X1 LABS2 LORD2;
 476 :           I=1;
 477 :           X='EXTR' TABS2 1;LISTE1=PROG X;
 478 :           Y='EXTR' TORD2 1;LISTE2=PROG Y;
 479 :           'REPE' BOUCLE9 (M2 - 1);
 480 :                  I=I + 1;
 481 :                  X='EXTR' TABS2 I;
 482 :                  'SI' (X < X1);
 483 :                       Y='EXTR' TORD2 I;
 484 :                       LISTE1=LISTE1 ET (PROG X);
 485 :                       LISTE2=LISTE2 ET (PROG Y);
 486 :                  'SINON';
 487 :                       LISTE1=LISTE1 ET (PROG X1);
 488 :                       LISTE2=LISTE2 ET (PROG Y1);
 489 :                       M2=I;
 490 :                       'QUITTER' BOUCLE9;
 491 :                  'FINSI';
 492 :           'FIN' BOUCLE9;
 493 :           TABS2=COPI LISTE1;DETRUIRE LISTE1;
 494 :           TORD2=COPI LISTE2;DETRUIRE LISTE2;
 495 :      'FINSI';
 496 :      'SI' (X1 > X2);
 497 : *-------------------------------------------RESTRICTION DE LA COURBE N›1
 498 :           Y1='IPOL' X2 LABS1 LORD1;
 499 :           I=1;
 500 :           X='EXTR' TABS1 1;LISTE1=PROG X;
 501 :           Y='EXTR' TORD1 1;LISTE2=PROG Y;
 502 :           'REPE' BOUCLE10 (M1 - 1);
 503 :                 I=I + 1;
 504 :                 X='EXTR' TABS1 I;
 505 :                 'SI' (X < X2);
 506 :                      Y='EXTR' TORD1 I;
 507 :                      LISTE1=LISTE1 ET (PROG X);
 508 :                      LISTE2=LISTE2 ET (PROG Y);
 509 :                 'SINON';
 510 :                      LISTE1=LISTE1 ET (PROG X2);
 511 :                      LISTE2=LISTE2 ET (PROG Y1);
 512 :                      M1=I;
 513 :                      'QUITTER' BOUCLE10;
 514 :                 'FINSI';
 515 :           'FIN' BOUCLE10;
 516 :           TABS1=COPI LISTE1;DETRUIRE LISTE1;
 517 :           TORD1=COPI LISTE2;DETRUIRE LISTE2;
 518 :     'FINSI';
 519 : 'FINSI';
 520 : *&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
 521 : *&                                                                     &
 522 : *&  PENTES INITIALES SUPERIEURES A 1                                   &
 523 : *&  PENTES FINALES DE CHAQUES COTES DE 1                               &
 524 : *&                                                                     &
 525 : *&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
 526 : 'SI' ('ET' ('EGA' IPEND 'A') ('EGA' IPENF 'F'));
 527 :      XOUY=YY;
 528 : *--------------------------------------------------------DEBUT DE COURBE
 529 :      Y1='EXTR' TORD1 1;
 530 :      Y2='EXTR' TORD2 1;
 531 :      'SI' (Y1 < Y2);
 532 : *------------------------------------------PROLONGATION DE LA COURBE N›2
 533 :           M2= M2 + 1;
 534 :           X='EXTR' TABS2 1;
 535 :           X=X + ((Y1 - Y2) / PI2);
 536 :           LISTE=(PROG X) ET TABS2;
 537 :           TABS2= COPI LISTE;DETRUIRE LISTE;
 538 :           LISTE=(PROG Y1) ET TORD2;
 539 :           TORD2= COPI LISTE;DETRUIRE LISTE;
 540 :      'FINSI';
 541 :      'SI' (Y1 > Y2);
 542 : *------------------------------------------PROLONGATION DE LA COURBE N›1
 543 :           M1= M1 + 1;
 544 :           X='EXTR' TABS1 1;
 545 :           X=X + ((Y2 - Y1) / PI1);
 546 :           LISTE=(PROG X) ET TABS1;
 547 :           TABS1= COPI LISTE;DETRUIRE LISTE;
 548 :           LISTE=(PROG Y2) ET TORD1;
 549 :           TORD1= COPI LISTE;DETRUIRE LISTE;
 550 :      'FINSI';
 551 : *----------------------------------------------------------FIN DE COURBE
 552 :      Y1='EXTR' TORD1 M1;
 553 :      Y2='EXTR' TORD2 M2;
 554 :      'SI' (Y1 < Y2);
 555 : *-------------------------------------------RESTRICTION DE LA COURBE N›2
 556 :           X1='IPOL' Y1 LORD2 LABS2;
 557 :           I=1;
 558 :           X='EXTR' TABS2 1;LISTE1=PROG X;
 559 :           Y='EXTR' TORD2 1;LISTE2=PROG Y;
 560 :           'REPE' BOUCLE11 (M2 - 1);
 561 :                  I=I + 1;
 562 :                  Y='EXTR' TORD2 I;
 563 :                  'SI' (Y < Y1);
 564 :                       X='EXTR' TABS2 I;
 565 :                       LISTE1=LISTE1 ET (PROG X);
 566 :                       LISTE2=LISTE2 ET (PROG Y);
 567 :                  'SINON';
 568 :                       LISTE1=LISTE1 ET (PROG X1);
 569 :                       LISTE2=LISTE2 ET (PROG Y1);
 570 :                       M2=I;
 571 :                       'QUITTER' BOUCLE11;
 572 :                  'FINSI';
 573 :           'FIN' BOUCLE11;
 574 :           TABS2=COPI LISTE1;DETRUIRE LISTE1;
 575 :           TORD2=COPI LISTE2;DETRUIRE LISTE2;
 576 :      'FINSI';
 577 :      'SI' (Y1 > Y2);
 578 : *-------------------------------------------RESTRICTION DE LA COURBE N›1
 579 :           X1='IPOL' Y2 LORD1 LABS1;
 580 :           I=1;
 581 :           X='EXTR' TABS1 1;LISTE1=PROG X;
 582 :           Y='EXTR' TORD1 1;LISTE2=PROG Y;
 583 :           'REPE' BOUCLE12 (M1 - 1);
 584 :                 I=I + 1;
 585 :                 Y='EXTR' TORD1 I;
 586 :                 'SI' (Y < Y2);
 587 :                      X='EXTR' TABS1 I;
 588 :                      LISTE1=LISTE1 ET (PROG X);
 589 :                      LISTE2=LISTE2 ET (PROG Y);
 590 :                 'SINON';
 591 :                      LISTE1=LISTE1 ET (PROG X1);
 592 :                      LISTE2=LISTE2 ET (PROG Y2);
 593 :                      M1=I;
 594 :                      'QUITTER' BOUCLE12;
 595 :                 'FINSI';
 596 :           'FIN' BOUCLE12;
 597 :           TABS1=COPI LISTE1;DETRUIRE LISTE1;
 598 :           TORD1=COPI LISTE2;DETRUIRE LISTE2;
 599 :     'FINSI';
 600 : 'FINSI';
 601 : *&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
 602 : *&                                                                     &
 603 : *&  PENTES INITIALES INFERIEURES A 1                                   &
 604 : *&  PENTES FINALES DE CHAQUES COTES DE 1                               &
 605 : *&                                                                     &
 606 : *&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
 607 : 'SI' ('ET' ('EGA' IPEND 'B') ('EGA' IPENF 'F'));
 608 :      XOUY=XX;
 609 : *--------------------------------------------------------DEBUT DE COURBE
 610 :      X1='EXTR' TABS1 1;
 611 :      X2='EXTR' TABS2 1;
 612 :      'SI' (X1 < X2);
 613 : *------------------------------------------PROLONGATION DE LA COURBE N›2
 614 :           M2= M2 + 1;
 615 :           Y='EXTR' TORD2 1;
 616 :           Y=Y + ((X1 - X2) * PI2);
 617 :           LISTE=(PROG X1) ET TABS2;
 618 :           TABS2= COPI LISTE;DETRUIRE LISTE;
 619 :           LISTE=(PROG Y) ET TORD2;
 620 :           TORD2= COPI LISTE;DETRUIRE LISTE;
 621 :      'FINSI';
 622 :      'SI' (X1 > X2);
 623 : *------------------------------------------PROLONGATION DE LA COURBE N›1
 624 :           M1= M1 + 1;
 625 :           Y='EXTR' TORD1 1;
 626 :           Y=Y + ((X2 - X1) * PI1);
 627 :           LISTE=(PROG X2) ET TABS1;
 628 :           TABS1= COPI LISTE;DETRUIRE LISTE;
 629 :           LISTE=(PROG Y) ET TORD1;
 630 :           TORD1= COPI LISTE;DETRUIRE LISTE;
 631 :      'FINSI';
 632 : *----------------------------------------------------------FIN DE COURBE
 633 :      X1='EXTR' TABS1 M1;
 634 :      X2='EXTR' TABS2 M2;
 635 :      'SI' (X1 < X2);
 636 : *-------------------------------------------RESTRICTION DE LA COURBE N›1
 637 :           Y1='IPOL' X1 LABS2 LORD2;
 638 :           I=1;
 639 :           X='EXTR' TABS2 1;LISTE1=PROG X;
 640 :           Y='EXTR' TORD2 1;LISTE2=PROG Y;
 641 :           'REPE' BOUCLE13 (M2 - 1);
 642 :                  I=I + 1;
 643 :                  X='EXTR' TABS2 I;
 644 :                  'SI' (X < X1);
 645 :                       Y='EXTR' TORD2 I;
 646 :                       LISTE1=LISTE1 ET (PROG X);
 647 :                       LISTE2=LISTE2 ET (PROG Y);
 648 :                  'SINON';
 649 :                       LISTE1=LISTE1 ET (PROG X1);
 650 :                       LISTE2=LISTE2 ET (PROG Y1);
 651 :                       M2=I;
 652 :                       'QUITTER' BOUCLE13;
 653 :                  'FINSI';
 654 :           'FIN' BOUCLE13;
 655 :           TABS2=COPI LISTE1;DETRUIRE LISTE1;
 656 :           TORD2=COPI LISTE2;DETRUIRE LISTE2;
 657 :      'FINSI';
 658 :      'SI' (X1 > X2);
 659 : *-------------------------------------------RESTRICTION DE LA COURBE N›1
 660 :           Y1='IPOL' X2 LABS1 LORD1;
 661 :           I=1;
 662 :           X='EXTR' TABS1 1;LISTE1=PROG X;
 663 :           Y='EXTR' TORD1 1;LISTE2=PROG Y;
 664 :           'REPE' BOUCLE14 (M1 - 1);
 665 :                 I=I + 1;
 666 :                 X='EXTR' TABS1 I;
 667 :                 'SI' (X < X2);
 668 :                      Y='EXTR' TORD1 I;
 669 :                      LISTE1=LISTE1 ET (PROG X);
 670 :                      LISTE2=LISTE2 ET (PROG Y);
 671 :                 'SINON';
 672 :                      LISTE1=LISTE1 ET (PROG X2);
 673 :                      LISTE2=LISTE2 ET (PROG Y1);
 674 :                      M1=I;
 675 :                      'QUITTER' BOUCLE14;
 676 :                 'FINSI';
 677 :           'FIN' BOUCLE14;
 678 :           TABS1=COPI LISTE1;DETRUIRE LISTE1;
 679 :           TORD1=COPI LISTE2;DETRUIRE LISTE2;
 680 :     'FINSI';
 681 : 'FINSI';
 682 : *&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
 683 : *&                                                                     &
 684 : *&  PENTES INITIALES DE CHAQUES COTES DE 1                             &
 685 : *&  PENTES FINALES SUPERIEURES A 1                                     &
 686 : *&                                                                     &
 687 : *&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
 688 : 'SI' ('ET' ('EGA' IPEND 'F') ('EGA' IPENF 'A'));
 689 :      XOUY=YY;
 690 : *--------------------------------------------------------DEBUT DE COURBE
 691 :      Y1='EXTR' TORD1 1;
 692 :      Y2='EXTR' TORD2 1;
 693 :      'SI' (Y1 < Y2);
 694 : *-------------------------------------------RESTRICTION DE LA COURBE N›1
 695 :           X='IPOL' Y2 LORD1 LABS1;
 696 :           X1='EXTR' TABS1 1;
 697 :           LISTE1=PROG X1;
 698 :           LISTE2=PROG Y1;
 699 :           I=1;
 700 :           'REPE' BOUCLE15 (M1 - 1);
 701 :                  I=I + 1;
 702 :                  Y='EXTR' TORD1 I;
 703 :                  'SI' (Y <EG Y2);
 704 :                       X1='EXTR' TABS1 I;
 705 :                       LISTE1=LISTE1 ET (PROG X1);
 706 :                       LISTE2=LISTE2 ET (PROG Y);
 707 :                       M1=M1 - 1;
 708 :                  'SINON';
 709 :                       'QUITTER' BOUCLE15;
 710 :                  'FINSI';
 711 :           'FIN' BOUCLE15;
 712 :           TABS1=TABS1 SAUF LISTE1;DETRUIRE LISTE1;
 713 :           TORD1=TORD1 SAUF LISTE2;DETRUIRE LISTE2;
 714 :           LISTE=(PROG X) ET TABS1;
 715 :           TABS1=COPI LISTE;DETRUIRE LISTE;
 716 :           LISTE=(PROG Y2) ET TORD1;
 717 :           TORD1=COPI LISTE;DETRUIRE LISTE;
 718 :      'FINSI';
 719 :      'SI' (Y1 > Y2);
 720 : *-------------------------------------------RESTRICTION DE LA COURBE N›2
 721 :           X='IPOL' Y1 LORD2 LABS2;
 722 :           X1='EXTR' TABS2 1;
 723 :           LISTE1=PROG X1;
 724 :           LISTE2=PROG Y2;
 725 :           I=1;
 726 :           'REPE' BOUCLE16 (M2 - 1);
 727 :                  I=I + 1;
 728 :                  Y='EXTR' TORD2 I;
 729 :                  'SI' (Y <EG Y1);
 730 :                       X1='EXTR' TABS2 I;
 731 :                       LISTE1=LISTE1 ET (PROG X1);
 732 :                       LISTE2=LISTE2 ET (PROG Y);
 733 :                       M2=M2 - 1;
 734 :                  'SINON';
 735 :                       'QUITTER' BOUCLE16;
 736 :                  'FINSI';
 737 :           'FIN' BOUCLE16;
 738 :           TABS2=TABS2 SAUF LISTE1;DETRUIRE LISTE1;
 739 :           TORD2=TORD2 SAUF LISTE2;DETRUIRE LISTE2;
 740 :           LISTE=(PROG X) ET TABS2;
 741 :           TABS2=COPI LISTE;DETRUIRE LISTE;
 742 :           LISTE=(PROG Y1) ET TORD2;
 743 :           TORD2=COPI LISTE;DETRUIRE LISTE;
 744 :      'FINSI';
 745 : *----------------------------------------------------------FIN DE COURBE
 746 :      Y1='EXTR' TORD1 M1;
 747 :      Y2='EXTR' TORD2 M2;
 748 :      'SI' (Y1 < Y2);
 749 : *------------------------------------------PROLONGATION DE LA COURBE N›1
 750 :           X='EXTR' TABS1 M1;
 751 :           X=X + ((Y2 - Y1) / PF1);
 752 :           M1=M1 + 1;
 753 :           TABS1=TABS1 ET (PROG X);
 754 :           TORD1=TORD1 ET (PROG Y2);
 755 :      'FINSI';
 756 :      'SI' (Y1 > Y2);
 757 : *------------------------------------------PROLONGATION DE LA COURBE N›2
 758 :           X='EXTR' TABS2 M2;
 759 :           X=X + ((Y1 - Y2) / PF2);
 760 :           M2=M2 + 1;
 761 :           TABS2=TABS2 ET (PROG X);
 762 :           TORD2=TORD2 ET (PROG Y1);
 763 :      'FINSI';
 764 : 'FINSI';
 765 : *&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
 766 : *&                                                                     &
 767 : *&  PENTES INITIALES DE CHAQUES COTES DE 1                             &
 768 : *&  PENTES FINALES INFERIEURES A 1                                     &
 769 : *&                                                                     &
 770 : *&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
 771 : 'SI' ('ET' ('EGA' IPEND 'F') ('EGA' IPENF 'B'));
 772 :      XOUY=XX;
 773 : *--------------------------------------------------------DEBUT DE COURBE
 774 :      X1='EXTR' TABS1 1;
 775 :      X2='EXTR' TABS2 1;
 776 :      'SI' (X1 < X2);
 777 : *-------------------------------------------RESTRICTION DE LA COURBE N›1
 778 :           Y='IPOL' X2 LABS1 LORD1;
 779 :           LISTE1=PROG X1;
 780 :           Y1='EXTR' TORD1 1;
 781 :           LISTE2=PROG Y1;
 782 :           I=1;
 783 :           'REPE' BOUCLE17 (M1 - 1);
 784 :                  I=I + 1;
 785 :                  X='EXTR' TABS1 I;
 786 :                  'SI' (X <EG X2);
 787 :                       LISTE1=LISTE1 ET (PROG X);
 788 :                       Y1='EXTR' TORD1 I;
 789 :                       LISTE2=LISTE2 ET (PROG Y1);
 790 :                       M1=M1 - 1;
 791 :                  'SINON';
 792 :                       'QUITTER' BOUCLE17;
 793 :                  'FINSI';
 794 :           'FIN' BOUCLE17;
 795 :           TABS1=TABS1 SAUF LISTE1;DETRUIRE LISTE1;
 796 :           TORD1=TORD1 SAUF LISTE2;DETRUIRE LISTE2;
 797 :           LISTE=(PROG X2) ET TABS1;
 798 :           TABS1=COPI LISTE;DETRUIRE LISTE;
 799 :           LISTE=(PROG Y) ET TORD1;
 800 :           TORD1=COPI LISTE;DETRUIRE LISTE;
 801 :      'FINSI';
 802 :      'SI' (X1 > X2);
 803 : *-------------------------------------------RESTRICTION DE LA COURBE N›2
 804 :           Y='IPOL' X1 LABS1 LORD1;
 805 :           LISTE1=PROG X2;
 806 :           Y1='EXTR' TORD2 1;
 807 :           LISTE2=PROG Y1;
 808 :           I=1;
 809 :           'REPE' BOUCLE18 (M2 - 1);
 810 :                  I=I + 1;
 811 :                  X='EXTR' TABS2 I;
 812 :                  'SI' (X <EG X1);
 813 :                       LISTE1=LISTE1 ET (PROG X);
 814 :                       Y1='EXTR' TORD2 I;
 815 :                       LISTE2=LISTE2 ET (PROG Y1);
 816 :                       M2=M2 - 1;
 817 :                  'SINON';
 818 :                       'QUITTER' BOUCLE18;
 819 :                  'FINSI';
 820 :           'FIN' BOUCLE18;
 821 :           TABS2=TABS2 SAUF LISTE1;DETRUIRE LISTE1;
 822 :           TORD2=TORD2 SAUF LISTE2;DETRUIRE LISTE2;
 823 :           LISTE=(PROG X1) ET TABS2;
 824 :           TABS2=COPI LISTE;DETRUIRE LISTE;
 825 :           LISTE=(PROG Y) ET TORD2;
 826 :           TORD2=COPI LISTE;DETRUIRE LISTE;
 827 :      'FINSI';
 828 : *----------------------------------------------------------FIN DE COURBE
 829 :      X1='EXTR' TABS1 M1;
 830 :      X2='EXTR' TABS2 M2;
 831 :      'SI' (X1 < X2);
 832 : *------------------------------------------PROLONGATION DE LA COURBE N›1
 833 :           Y='EXTR' TORD1 M1;
 834 :           Y=Y + ((X2 - X1) * PF1);
 835 :           M1=M1 + 1;
 836 :           TABS1=TABS1 ET (PROG X2);
 837 :           TORD1=TORD1 ET (PROG Y);
 838 :      'FINSI';
 839 :      'SI' (X1 > X2);
 840 : *------------------------------------------PROLONGATION DE LA COURBE N›2
 841 :           Y='EXTR' TORD2 M2;
 842 :           Y=Y + ((X1 - X2) * PF2);
 843 :           M2=M2 + 1;
 844 :           TABS2=TABS2 ET (PROG X1);
 845 :           TORD2=TORD2 ET (PROG Y);
 846 :      'FINSI';
 847 : 'FINSI';
 848 : *&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
 849 : *&                                                                     &
 850 : *&  PENTES INITIALES SUPERIEURES A 1                                   &
 851 : *&  PENTES FINALES INFERIEURES A 1                                     &
 852 : *&                                                                     &
 853 : *&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
 854 : 'SI' ('ET' ('EGA' IPEND 'A') ('EGA' IPENF 'B'));
 855 :      XOUY=YX;
 856 : *--------------------------------------------------------DEBUT DE COURBE
 857 :      X1='EXTR' TABS1 1;
 858 :      X2='EXTR' TABS2 1;
 859 :      'SI' (X1 < X2);
 860 : *------------------------------------------PROLONGATION DE LA COURBE N›2
 861 :           M2= M2 + 1;
 862 :           X='EXTR' TABS2 1;
 863 :           Y=Y + ((X1 - X2) * PI2);
 864 :           LISTE=(PROG X1) ET TABS2;
 865 :           TABS2= COPI LISTE;DETRUIRE LISTE;
 866 :           LISTE=(PROG Y) ET TORD2;
 867 :           TORD2= COPI LISTE;DETRUIRE LISTE;
 868 :      'FINSI';
 869 :      'SI' (X1 > X2);
 870 : *------------------------------------------PROLONGATION DE LA COURBE N›1
 871 :           M1= M1 + 1;
 872 :           Y='EXTR' TABS1 1;
 873 :           Y=Y + ((X2 - X1) * PI1);
 874 :           LISTE=(PROG X2) ET TABS1;
 875 :           TABS1= COPI LISTE;DETRUIRE LISTE;
 876 :           LISTE=(PROG Y) ET TORD1;
 877 :           TORD1= COPI LISTE;DETRUIRE LISTE;
 878 :      'FINSI';
 879 : *----------------------------------------------------------FIN DE COURBE
 880 :      X1='EXTR' TABS1 M1;
 881 :      X2='EXTR' TABS2 M2;
 882 :      'SI' (X1 < X2);
 883 : *------------------------------------------PROLONGATION DE LA COURBE N›1
 884 :           Y='EXTR' TORD1 M1;
 885 :           Y=Y + ((X2 - X1) * PF1);
 886 :           M1=M1 + 1;
 887 :           TABS1=TABS1 ET (PROG X2);
 888 :           TORD1=TORD1 ET (PROG Y);
 889 :      'FINSI';
 890 :      'SI' (X1 > X2);
 891 : *------------------------------------------PROLONGATION DE LA COURBE N›2
 892 :           Y='EXTR' TORD2 M2;
 893 :           Y=Y + ((X1 - X2) * PF2);
 894 :           M2=M2 + 1;
 895 :           TABS2=TABS2 ET (PROG X1);
 896 :           TORD2=TORD2 ET (PROG Y);
 897 :      'FINSI';
 898 : 'FINSI';
 899 : *&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
 900 : *&                                                                     &
 901 : *&  PENTES INITIALES INFERIEURES A 1                                   &
 902 : *&  PENTES FINALES SUPERIEURES A 1                                     &
 903 : *&                                                                     &
 904 : *&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
 905 : 'SI' ('ET' ('EGA' IPEND 'B') ('EGA' IPENF 'A'));
 906 :      XOUY=XY;
 907 : *--------------------------------------------------------DEBUT DE COURBE
 908 :      X1='EXTR' TABS1 1;
 909 :      X2='EXTR' TABS2 1;
 910 :      'SI' (X1 < X2);
 911 : *------------------------------------------PROLONGATION DE LA COURBE N›2
 912 :           M2= M2 + 1;
 913 :           X='EXTR' TABS2 1;
 914 :           Y=Y + ((X1 - X2) * PI2);
 915 :           LISTE=(PROG X1) ET TABS2;
 916 :           TABS2= COPI LISTE;DETRUIRE LISTE;
 917 :           LISTE=(PROG Y) ET TORD2;
 918 :           TORD2= COPI LISTE;DETRUIRE LISTE;
 919 :      'FINSI';
 920 :      'SI' (X1 > X2);
 921 : *------------------------------------------PROLONGATION DE LA COURBE N›1
 922 :           M1= M1 + 1;
 923 :           Y='EXTR' TABS1 1;
 924 :           Y=Y + ((X2 - X1) * PI1);
 925 :           LISTE=(PROG X2) ET TABS1;
 926 :           TABS1= COPI LISTE;DETRUIRE LISTE;
 927 :           LISTE=(PROG Y) ET TORD1;
 928 :           TORD1= COPI LISTE;DETRUIRE LISTE;
 929 :      'FINSI';
 930 : *----------------------------------------------------------FIN DE COURBE
 931 :      Y1='EXTR' TORD1 M1;
 932 :      Y2='EXTR' TORD2 M2;
 933 :      'SI' (Y1 < Y2);
 934 : *------------------------------------------PROLONGATION DE LA COURBE N›1
 935 :           X='EXTR' TABS1 M1;
 936 :           X=X + ((Y2 - Y1) / PF1);
 937 :           M1=M1 + 1;
 938 :           TABS1=TABS1 ET (PROG X);
 939 :           TORD1=TORD1 ET (PROG Y2);
 940 :      'FINSI';
 941 :      'SI' (Y1 > Y2);
 942 : *------------------------------------------PROLONGATION DE LA COURBE N›2
 943 :           X='EXTR' TABS2 M2;
 944 :           X=X + ((Y1 - Y2) / PF2);
 945 :           M2=M2 + 1;
 946 :           TABS2=TABS2 ET (PROG X);
 947 :           TORD2=TORD2 ET (PROG Y1);
 948 :      'FINSI';
 949 : 'FINSI';
 950 : *=======================================================================
 951 : *=                                                                     =
 952 : *=        ELABORATION DE LA COURBE RELATIVE A PARAM                    =
 953 : *=                                                                     =
 954 : *=======================================================================
 955 : *-----------------------------------------------------------------------
 956 : *- COUPURE DANS LA COURBE : INTERPOLATION D'ABORD EN Y, PUIS EN X      -
 957 : *-----------------------------------------------------------------------
 958 : 'SI' ('EGA' XOUY 'YX');
 959 :      M=M1 / 2;
 960 :      LABS=PROG M1 * 0.;
 961 :      LORD=PROG M1 * 0.;
 962 :      I=0;
 963 :      'REPE' BOUCLE19 M;
 964 :             I=I + 1;
 965 :             Y='EXTR' TORD1 I;
 966 :             X1='EXTR' TABS1 I;
 967 :             MAX='EXTR' TORD2 M2;
 968 :             'SI' (('VALE' Y) 'EGA' MAX);
 969 :                  X2='EXTR' TABS2 M2;
 970 :             'SINON';
 971 :                  X2='IPOL' Y TORD2 TABS2;
 972 :             'FINSI';
 973 :             X=(LAMBDA * X1) + ((1. - LAMBDA) * X2);
 974 :             'REMP' LABS I X;
 975 :             'REMP' LORD I Y;
 976 :      'FIN' BOUCLE19;
 977 :      'REPE' BOUCLE20 (M1 - M);
 978 :             I=I + 1;
 979 :             X='EXTR' TABS1 I;
 980 :             Y1='EXTR' TORD1 I;
 981 :             MAX='EXTR' TABS2 M2;
 982 :             'SI' (('VALE' X) 'EGA' MAX);
 983 :                  Y2='EXTR' TORD2 M2;
 984 :             'SINON';
 985 :                  Y2='IPOL' X TABS2 TORD2;
 986 :             'FINSI';
 987 :             Y=(LAMBDA * Y1) + ((1. - LAMBDA) * Y2);
 988 :             'REMP' LABS I X;
 989 :             'REMP' LORD I Y;
 990 :      'FIN' BOUCLE20;
 991 : 'FINSI';
 992 : *-----------------------------------------------------------------------
 993 : *- COUPURE DANS LA COURBE : INTERPOLATION D'ABORD EN X, PUIS EN Y      -
 994 : *-----------------------------------------------------------------------
 995 : 'SI' ('EGA' XOUY 'XY');
 996 :      M=M1 / 2;
 997 :      LABS=PROG M1 * 0.;
 998 :      LORD=PROG M1 * 0.;
 999 :      I=0;
1000 :      'REPE' BOUCLE21 M;
1001 :             I=I + 1;
1002 :             X='EXTR' TABS1 I;
1003 :             Y1='EXTR' TORD1 I;
1004 :             MAX='EXTR' TABS2 M2;
1005 :             'SI' (('VALE' X) 'EGA' MAX);
1006 :                  Y2='EXTR' TORD2 M2;
1007 :             'SINON';
1008 :                  Y2='IPOL' X TABS2 TORD2;
1009 :             'FINSI';
1010 :             Y=(LAMBDA * Y1) + ((1. - LAMBDA) * Y2);
1011 :             'REMP' LABS I X;
1012 :             'REMP' LORD I Y;
1013 :      'FIN' BOUCLE21;
1014 :      'REPE' BOUCLE22 (M1 - M);
1015 :             I=I + 1;
1016 :             Y='EXTR' TORD1 I;
1017 :             X1='EXTR' TABS1 I;
1018 :             MAX='EXTR' TORD2 M2;
1019 :             'SI' (('VALE' Y) 'EGA' MAX);
1020 :                  X2='EXTR' TABS2 M2;
1021 :             'SINON';
1022 :                  X2='IPOL' Y TORD2 TABS2;
1023 :             'FINSI';
1024 :             X=(LAMBDA * X1) + ((1. - LAMBDA) * X2);
1025 :             'REMP' LABS I X;
1026 :             'REMP' LORD I Y;
1027 :      'FIN' BOUCLE22;
1028 : 'FINSI';
1029 : *-----------------------------------------------------------------------
1030 : *-         CAS D'UNE INTERPOLATION SANS COUPURE EN X                   -
1031 : *-----------------------------------------------------------------------
1032 : 'SI' ('EGA' XOUY 'XX');
1033 :      LABS=COPI TABS1;
1034 :      LORD=PROG M1 * 0.;
1035 :      I=0;
1036 :      'REPE' BOUCLE23 M1;
1037 :             I=I + 1;
1038 :             X='EXTR' LABS I;
1039 :             Y1='EXTR' TORD1 I;
1040 :             MAX='EXTR' TABS2 M2;
1041 :             'SI' (('VALE' X) 'EGA' MAX);
1042 :                  Y2='EXTR' TORD2 M2;
1043 :             'SINON';
1044 :                  Y2='IPOL' X TABS2 TORD2;
1045 :             'FINSI';
1046 :             Y=(LAMBDA * Y1) + ((1. - LAMBDA) * Y2);
1047 :             'REMP' LORD I Y;
1048 :      'FIN' BOUCLE23;
1049 : 'FINSI';
1050 : *-----------------------------------------------------------------------
1051 : *-         CAS D'UNE INTERPOLATION SANS COUPURE EN Y                   -
1052 : *-----------------------------------------------------------------------
1053 : 'SI' ('EGA' XOUY 'YY');
1054 :      LABS=PROG M1 * 0.;
1055 :      LORD=COPI TORD1;
1056 :      I=0;
1057 :      'REPE' BOUCLE24 M1;
1058 :             I=I + 1;
1059 :             Y='EXTR' LORD I;
1060 :             X1='EXTR' TABS1 I;
1061 :             MAX='EXTR' TORD2 M2;
1062 :             'SI' (('VALE' Y) 'EGA' MAX);
1063 :                  X2='EXTR' TABS2 M2;
1064 :             'SINON';
1065 :                  X2='IPOL' Y TORD2 TABS2;
1066 :             'FINSI';
1067 :             X=(LAMBDA * X1) + ((1. - LAMBDA) * X2);
1068 :             'REMP' LABS I X;
1069 :      'FIN' BOUCLE24;
1070 : 'FINSI';
1071 : *-----------------------------------------------------------------------
1072 : *-                 FIN DE LA PROCEDURE                                 -
1073 : *-----------------------------------------------------------------------
1074 : DETRUIRE TABS1;
1075 : DETRUIRE TORD1;
1076 : DETRUIRE TABS2;
1077 : DETRUIRE TORD2;
1078 : *
1079 : EVN=EVOL MANU LABS LORD;
1080 : *
1081 : 'FINPROC' EVN;
1082 :  

© Cast3M 2003 - All rights reserved.
Disclaimer