/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        E T U D E   D E S   O P T I O N S   D ' O P T I M I S A T I O N                                                            */
/*        P O U R   L ' A T T R A C T E U R   D E   L O R E N Z  :                                                                   */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xtc/lorenz.11$c' :                                                                                             */
/*                                                                                                                                   */
/*                    Jean-Francois Colonna (LACTAMME, AAAAMMJJhhmmss).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

#include  <stdio.h>

#define   ITER      4065
#define   PRECIS    double                                                                                                              \
                                        /* Permet de travailler en 'double' ou en 'float'.                                           */
#define   DT        0.01
#define   X0        0.01
#define   Y0        0.01
#define   Z0        0.01

main()
     {
     int       n;

     PRECIS    x1 = X0,dx1;
     PRECIS    y1 = Y0,dy1;
     PRECIS    z1 = Z0,dz1;

     PRECIS    x2 = X0,dx2;
     PRECIS    y2 = Y0,dy2;
     PRECIS    z2 = Z0,dz2;

     PRECIS    dt = DT;

     int       print=1;

     for       (n=1 ; n<=ITER ; n++)
               {
               if        (print == 0)
                         {
                         printf("\n x1=%+10.6f y1=%+10.6f z1=%+10.6f",x1,y1,z1);
                         printf("\n x2=%+10.6f y2=%+10.6f z2=%+10.6f",x2,y2,z2);
                         }
               else
                         {
                         }

               dx1 = (-10.0*x1 + 10.0*y1)*dt;
               dy1 = (28.0*x1 - y1 - x1*z1)*dt;
               dz1 = ((-8.0 / 3.0)*z1 + x1*y1)*dt;

               dx2 = -10.0*x2*dt + 10.0*y2*dt;
               dy2 = 28.0*x2*dt - y2*dt - x2*z2*dt;
               dz2 = (-8.0 / 3.0)*z2*dt + x2*y2*dt;
                                        /* ATTENTION, il ne faut pas de parentheses et il est imperatif de ne pas mettre 'dt' en     */
                                        /* facteur commun et ce afin d'avoir des produits a 3 termes...                              */

               x1 = x1 + dx1;
               y1 = y1 + dy1;
               z1 = z1 + dz1;

               x2 = x2 + dx2;
               y2 = y2 + dy2;
               z2 = z2 + dz2;
               }
     printf("\n 'dt' non distribue : iterations=%d   x1=%+10.6f y1=%+10.6f z1=%+10.6f",n-1,x1,y1,z1);
     printf("\n 'dt' distribue     : iterations=%d   x2=%+10.6f y2=%+10.6f z2=%+10.6f",n-1,x2,y2,z2);
                                        /* Avec 'cc -O0', donne :                                                                    */
                                        /*                                                                                           */
                                        /*        'dt' non distribue : iterations=4065   x1= -2.296256 y1= -4.504186 z1= +6.694424   */
                                        /*        'dt' distribue     : iterations=4065   x2=+14.317396 y2=+19.969960 z2=+28.395215   */
                                        /*                                                                                           */
                                        /* et avec 'cc -O3', donne :                                                                 */
                                        /*                                                                                           */
                                        /*        'dt' non distribue : iterations=4065   x1= -2.296256 y1= -4.504186 z1= +6.694424   */
                                        /*        'dt' distribue     : iterations=4065   x2= -8.769455 y2=-11.872689 z2=+22.934003   */
                                        /*                                                                                           */
                                        /* ainsi {x1,y1,z1} ('dt' non distribue) ne depend pas de l'optimisation, alors que          */
                                        /* {x2,y2,z2} ('dt' distribue) en depend. Voir a ce propos le programme 'v $xtc/lorenz.21$c' */
                                        /* dans lequel des termes en 'x*y*z' ont ete ajoute afin d'obtenir les dependences cherchees */
                                        /* pour generer la sequence :                                                                */
                                        /*                                                                                           */
                                        /*                  xivPdf 11 1 / 033502_033629                                              */
                                        /*                                                                                           */
                                        /* avec le programme 'v $xrk/lorenz.11$K'.                                                   */
     printf("\n");
     }



Copyright © Jean-François Colonna, 2021-2023.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2021-2023.