/*************************************************************************************************************************************/ /* */ /* A T T R A C T E U R D E L O R E N Z : */ /* */ /* */ /* ..O..---....... .:-... */ /* :O.-.......--.... ...... */ /* .:..-.....--........ ........ */ /* --.......-..---::-... -..... */ /* .-..................... */ /* -..........-..-::.--.... ..... */ /* :......-......-.......... ....... */ /* -............-....:-.......-...... */ /* ............ ................-....--.... ... */ /* .....:--:-.:.-.--..................---.--...... */ /* ...---oOo:O::::::-:-:o-----.......-.-..--.................. */ /* ....--oOO:oo:o:o:o::-::::::-::o:...-...-...----..-.... ....... */ /* ...-oOOoOOoO::oo:o-::----------.......--...-...-...... ....... */ /* ...-::oO%OoO:O:o:-::-::-------.......-.-.---.--......... . */ /* ...-o%%%oOoOoo:o::::-:--.---.........-.-.----...-........ */ /* ...-::o%%OOOoO:oo::::------.-........-.---------........ ...... */ /* ...-o%%%%OOOOooooo:-:------........-..-----..-...-........ ........ */ /* ....:O%%o:oooo:::::::--..............---..-----........... ...... */ /* ...:o%O%%o%Ooooo::::----.-..........----..--.---.-....... */ /* ....-o%%OoOOOoOoo:::-o:--........-----.----.-----......... .... */ /* ....:oOoOO:O:o::::oo:-.............---.-.--.--.......... ........ */ /* ...:O:O%O-%Ooo::-:-oo:......-------.-----.---.-......... ........ */ /* ....-oOoOOO-oo:::--oo:.....-....--.--.-.-.--....--...... .... */ /* ....-::-:Oo::-:--:oo-.::::---...--.-.-......--....... ...... */ /* ...-o-:o:OO-:-:-.-.:o:-....-----.:-:----.-..-...... ....... */ /* ....:oo::::o-:----.-:::................-......... .......... */ /* .....-ooo-o:-:---..-:::... ........... ....... */ /* ..-:o-:::::::-:--.....:::::. .......... */ /* ...-:o:.-::-..-.........-:::::-:--. . .............. */ /* .....-o-:---..-...............-.----.---.--........... */ /* ...-oo-.o:---.......... ...................... */ /* .......::.-.-........ .. ...... */ /* ...-::---..-....... */ /* .......-.--..... */ /* ............. */ /* ....... */ /* */ /* */ /* Author of '$xrk/lorenz.11$K' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 1992??????????). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* I N T E R F A C E ' listG ' : */ /* */ /* */ /* :Debut_listG: */ /* :Fin_listG: */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D I R E C T I V E S S P E C I F I Q U E S D E C O M P I L A T I O N : */ /* */ /*************************************************************************************************************************************/ @define PRAGMA_CL_____MODULE_NON_OPTIMISABLE /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* F I C H I E R S D ' I N C L U D E S : */ /* */ /*************************************************************************************************************************************/ #include INCLUDES_BASE /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N S D E B A S E E T U N I V E R S E L L E S : */ /* */ /*************************************************************************************************************************************/ #if ( (defined(SYSTEME_APC_LinuxUlmint_GCC)) \ || (defined(SYSTEME_APC_LinuxRedHat_GCC)) \ || (defined(SYSTEME_APC_LinuxUbuntu_GCC)) \ ) /* Test introduit le 20170126113536 a cause de 'v $xil/defi_K2$vv$DEF 20170126111709'... */ /* */ /* Cela fut complete le 20180404113035 avec 'SYSTEME_APC_LinuxRedHat_GCC' toujours pour la */ /* meme raison, c'est-a-dire supprimer le message : */ /* */ /* warning: variably modified '...' at file scope [enabled by default] */ /* */ /* du a la presence de typage '(double)' dans 'dSCAL(...)'. */ /* */ /* Le 20210906080455, 'SYSTEME_APC_LinuxUbuntu_GCC' fut introduit pour les memes raisons */ /* lors de l'introduction de '$LACT1B'... */ # define NOMBRE_MAXIMAL_DE_PERIODES_DE_LA_SIMULATION \ idSCAL(GRO1(CENT_MILLE),CINQ_CENT_DOUZE,ADD2(MemorySizeMB,SwapSizeMB)) #Aif ( (defined(SYSTEME_APC_LinuxUlmint_GCC)) \ || (defined(SYSTEME_APC_LinuxRedHat_GCC)) \ || (defined(SYSTEME_APC_LinuxUbuntu_GCC)) \ ) # define NOMBRE_MAXIMAL_DE_PERIODES_DE_LA_SIMULATION \ dSCAL(GRO1(CENT_MILLE),CINQ_CENT_DOUZE,ADD2(MemorySizeMB,SwapSizeMB)) #Eif ( (defined(SYSTEME_APC_LinuxUlmint_GCC)) \ || (defined(SYSTEME_APC_LinuxRedHat_GCC)) \ || (defined(SYSTEME_APC_LinuxUbuntu_GCC)) \ ) /* Definition du nombre maximal de periodes de la simulation. On pourrait s'etonner de la */ /* necessite d'une aussi grande valeur pour 'NOMBRE_MAXIMAL_DE_PERIODES_DE_LA_SIMULATION'. */ /* En fait, elle vient de la definition de 'NOMBRE_MAXIMAL_DE_POINTS_GERABLES' qui utilise */ /* un 'MIN2(...)' qui reference 'NOMBRE_MAXIMAL_DE_PERIODES_DE_LA_SIMULATION' qui doit donc */ /* etre grand. Ceci fut introduit le 20070814184221, puis sous cette forme "universelle" */ /* (independante de '$sHOTE') le 20070814185930... */ #ifdef NOMBRE_MAXIMAL_DE_PERIODES_DE_LA_SIMULATION # define NOMBRE_MAXIMAL_DE_POINTS_VISUALISABLES \ NOMBRE_MAXIMAL_DE_PERIODES_DE_LA_SIMULATION \ /* Cette constante est destinee a dimensionner les listes "lineaires" de memorisation des */ \ /* points a visualiser. Ceci fut introduit le 20070814184757... */ #Aifdef NOMBRE_MAXIMAL_DE_PERIODES_DE_LA_SIMULATION #Eifdef NOMBRE_MAXIMAL_DE_PERIODES_DE_LA_SIMULATION #include xrk/attractor.11.I" /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 3 */ /* D E F I N I T I O N D E L ' E S P A C E P H Y S I Q U E D A N S R ( D E B U T ) : */ /* */ /* */ /* Nota : */ /* */ /* Les extrema des coordonnees {x,y,z} */ /* ainsi que ceux de leurs differentielles */ /* {dx,dy,dz} sont fixees un peu arbitrairement */ /* et sans etre parametrees. Elles ont ete */ /* obtenues a l'aide du programme 'v $xtc/lorenz.01$c'. */ /* */ /* */ /*************************************************************************************************************************************/ #define hXmin_ESPACE \ PARE(-30.0) #define hYmin_ESPACE \ PARE(-30.0) #define hZmin_ESPACE \ PARE(0.0) /* Definition du "coin" inferieur-gauche-arriere de l'espace physique. */ #define hXmax_ESPACE \ PARE(30.0) #define hYmax_ESPACE \ PARE(30.0) #define hZmax_ESPACE \ PARE(60.0) /* Definition du "coin" superieur-droite-avant de l'espace physique. */ /* */ /* ATTENTION, il y a eu pendant longtemps : */ /* */ /* #define hZmax_ESPACE \ */ /* 55.0 */ /* */ /* mais etant donne qu'il est plus intelligent de travailler avec un espace cubique (a cause */ /* des rotations tridimensionnelles en particulier), j'ai remplace (le 1993061400) '55' par */ /* '60' qui correspond a '30-(-30)' (voir 'X' et 'Y'). */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 3 */ /* D E F I N I T I O N D E L ' E S P A C E P H Y S I Q U E D A N S R ( D E B U T ) : */ /* */ /*************************************************************************************************************************************/ #include xrk/attractor.12.I" #define dXmin_ESPACE \ PARE(-2.4) #define dYmin_ESPACE \ PARE(-5.5) #define dZmin_ESPACE \ PARE(-2.8) /* Definition des minima des differentielles {dx,dy,dz}. */ #define dXmax_ESPACE \ PARE(1.8) #define dYmax_ESPACE \ PARE(3.8) #define dZmax_ESPACE \ PARE(4.8) /* Definition des maxima des differentielles {dx,dy,dz}. */ #include xrk/attractor.1D.I" /* Formules de renormalisation des differentielles dans [0,1] ; elles sont utilisees lorsque */ /* la production d'images en couleurs est demandee (voir 'visualiser_en_RVB'). */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N D E S D I F F E R E N T S E S P A C E S E T D E L ' E F F E T D E B R U M E : */ /* */ /*************************************************************************************************************************************/ #include xrk/attractor.13.I" /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* A I D E A U C A D R A G E D E S I M A G E S : */ /* */ /*************************************************************************************************************************************/ #include xrk/attractor.1C.I" DONNEES_DE_RECHERCHE_DES_EXTREMA_DES_COORDONNEES_ET_DES_DERIVEES /* Definition des extrema des coordonnees et des derivees. On notera bien l'absence de */ /* point-virgule apres 'DONNEES_DE_RECHERCHE_DES_EXTREMA_DES_COORDONNEES_ET_DES_DERIVEES'. */ #define EDITER_LES_COORDONNEES_ET_LES_VITESSES \ FAUX DEFV(Local,DEFV(Logical,INIT(editer_les_coordonnees_et_les_vitesses,EDITER_LES_COORDONNEES_ET_LES_VITESSES))); /* Indique si a chaque pas de temps on doit editer ('VRAI') ou pas ('FAUX') les coordonnees */ /* et les vitesses de chaque corps... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* G E N E R A T I O N D E S I M A G E S : */ /* */ /*************************************************************************************************************************************/ #include xrv/champs_5.14.I" #include xrk/attractor.1A.I" /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N S G E N E R A L E S R E L A T I V E S A L A V I S U A L I S A T I O N : */ /* */ /*************************************************************************************************************************************/ #include xrk/lorenz.11.I" #include xrk/attractor.14.I" /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* F O N C T I O N D E M E M O R I S A T I O N D U P O I N T C O U R A N T : */ /* */ /*************************************************************************************************************************************/ #include xrk/attractor.16.I" #define RAYON_DE_VISUALISATION \ FRA6(FRA10(mhXYZlongueur_ESPACE)) DEFV(Local,DEFV(Float,INIT(rayon_de_visualisation,RAYON_DE_VISUALISATION))); /* Rayon du disque materialisant une iteration. Il fut exprime longtemps sous la */ /* forme : */ /* */ /* GRO4(FRA4(FU)) */ /* */ BFonctionI DEFV(Local,DEFV(FonctionI,memorisation_1_point_07(AXf,AYf,AZf,AdXf,AdYf,AdZf,numero_de_l_iteration_courante))) DEFV(Argument,DEFV(Float,AXf)); DEFV(Argument,DEFV(Float,AYf)); DEFV(Argument,DEFV(Float,AZf)); /* Definition de la position {x,y,z} de l'iteration courante. */ DEFV(Argument,DEFV(Float,AdXf)); DEFV(Argument,DEFV(Float,AdYf)); DEFV(Argument,DEFV(Float,AdZf)); /* Definition des differentielles {dx,dy,dz} de la position de l'iteration courante. */ DEFV(Argument,DEFV(Int,numero_de_l_iteration_courante)); /* Numero de l'iteration courante afin d'attenuer eventuellement la luminance des points */ /* materialisant chaque iteration en fonction de leur numero (les premieres iterations etant */ /* plus sombres, et les dernieres etant plus lumineuses). */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock #include xrk/attractor.15.I" INIT_ERROR; /*..............................................................................................................................*/ MEMORISATION_DU_POINT_COURANT(X_DERIVEE_DANS_01(AdXf) ,Y_DERIVEE_DANS_01(AdYf) ,Z_DERIVEE_DANS_01(AdZf) ); /* Memorisation du point courant en Noir et Blanc ou en Couleurs, mais uniquement s'il est */ /* visible en fonction des conditions de visualisation... */ RETU_ERROR; Eblock EFonctionI /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N D E L ' A T T R A C T E U R D E L O R E N Z : */ /* */ /* */ /* Definition : */ /* */ /* Il est classiquement defini par */ /* le systeme d'equations differentielles : */ /* */ /* dx */ /* ---- = -10.x + 10.y */ /* dt */ /* */ /* dy */ /* ---- = 28.x - y - x.z */ /* dt */ /* */ /* dz 8 */ /* ---- = - ---.z + x.y */ /* dt 3 */ /* */ /* ce que l'on peut generaliser en : */ /* */ /* dx */ /* ---- = (X .x + X .y + X .z) + (X .x.y + X .y.z + X .z.x) + (X .x.y.z) = F (x,y,z) */ /* dt x y z xy yz zx xyz x */ /* */ /* dy */ /* ---- = (Y .x + Y .y + Y .z) + (Y .x.y + Y .y.z + Y .z.x) + (Y .x.y.z) = F (x,y,z) */ /* dt x y z xy yz zx xyz y */ /* */ /* dz */ /* ---- = (Z .x + Z .y + Z .z) + (Z .x.y + Z .y.z + Z .z.x) + (Z .x.y.z) = F (x,y,z) */ /* dt x y z xy yz zx xyz z */ /* */ /* */ /*************************************************************************************************************************************/ #define __VERSION__PERMETTRE_L_UTILISATION_D_UN_FOND \ /* Afin de permettre la mise en place d'un fond pour chaque image generee (definition */ \ /* deplacee ici le 20030313145405). D'autre part 'PERMETTRE_L_UTILISATION_D_UN_FOND' */ \ /* a ete change en '__VERSION__PERMETTRE_L_UTILISATION_D_UN_FOND' le 20030313145928 */ \ /* afin de permettre sa recuperation dans 'v $xcc/cpp$Z _VERSION_'. */ #include xrk/attractor.17.I" dfTRANSFORMAT_31(liste_NOMBRE_D_ITERATIONS,fichier_NOMBRE_D_ITERATIONS,NOMBRE_D_ITERATIONS_IMPLICITE,NOMBRE_D_ITERATIONS) /* Definition du fichier des nombres d'iterations. */ #define sNOMBRE_D_ITERATIONS(numero_de_la_periode) \ INTE(sTRANSFORMAT_31(numero_de_la_periode,liste_NOMBRE_D_ITERATIONS)) \ /* Formule generale definissant les variations du nombre d'iterations. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* F O N C T I O N S D E V I S U A L I S A T I O N E T D ' I N T E R P O L A T I O N : */ /* */ /*************************************************************************************************************************************/ #include xrv/particule.31.I" dfTRANSFORMAT_31(liste_COEFFICIENT_Xx,fichier_COEFFICIENT_Xx,COEFFICIENT_Xx_IMPLICITE,CXx) dfTRANSFORMAT_31(liste_COEFFICIENT_Xy,fichier_COEFFICIENT_Xy,COEFFICIENT_Xy_IMPLICITE,CXy) dfTRANSFORMAT_31(liste_COEFFICIENT_Xz,fichier_COEFFICIENT_Xz,COEFFICIENT_Xz_IMPLICITE,CXz) dfTRANSFORMAT_31(liste_COEFFICIENT_Xxy,fichier_COEFFICIENT_Xxy,COEFFICIENT_Xxy_IMPLICITE,CXxy) dfTRANSFORMAT_31(liste_COEFFICIENT_Xyz,fichier_COEFFICIENT_Xyz,COEFFICIENT_Xyz_IMPLICITE,CXyz) dfTRANSFORMAT_31(liste_COEFFICIENT_Xzx,fichier_COEFFICIENT_Xzx,COEFFICIENT_Xzx_IMPLICITE,CXzx) dfTRANSFORMAT_31(liste_COEFFICIENT_Xxyz,fichier_COEFFICIENT_Xxyz,COEFFICIENT_Xxyz_IMPLICITE,CXxyz) /* Definition des fichiers des coefficients de la premiere equation differentielle. */ #define sCOEFFICIENT_Xx(numero_de_la_periode) \ FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_COEFFICIENT_Xx)) #define sCOEFFICIENT_Xy(numero_de_la_periode) \ FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_COEFFICIENT_Xy)) #define sCOEFFICIENT_Xz(numero_de_la_periode) \ FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_COEFFICIENT_Xz)) #define sCOEFFICIENT_Xxy(numero_de_la_periode) \ FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_COEFFICIENT_Xxy)) #define sCOEFFICIENT_Xyz(numero_de_la_periode) \ FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_COEFFICIENT_Xyz)) #define sCOEFFICIENT_Xzx(numero_de_la_periode) \ FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_COEFFICIENT_Xzx)) #define sCOEFFICIENT_Xxyz(numero_de_la_periode) \ FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_COEFFICIENT_Xxyz)) /* Formule generale definissant les variations des coefficients de la premiere equation. */ dfTRANSFORMAT_31(liste_COEFFICIENT_Yx,fichier_COEFFICIENT_Yx,COEFFICIENT_Yx_IMPLICITE,CYx) dfTRANSFORMAT_31(liste_COEFFICIENT_Yy,fichier_COEFFICIENT_Yy,COEFFICIENT_Yy_IMPLICITE,CYy) dfTRANSFORMAT_31(liste_COEFFICIENT_Yz,fichier_COEFFICIENT_Yz,COEFFICIENT_Yz_IMPLICITE,CYz) dfTRANSFORMAT_31(liste_COEFFICIENT_Yxy,fichier_COEFFICIENT_Yxy,COEFFICIENT_Yxy_IMPLICITE,CYxy) dfTRANSFORMAT_31(liste_COEFFICIENT_Yyz,fichier_COEFFICIENT_Yyz,COEFFICIENT_Yyz_IMPLICITE,CYyz) dfTRANSFORMAT_31(liste_COEFFICIENT_Yzx,fichier_COEFFICIENT_Yzx,COEFFICIENT_Yzx_IMPLICITE,CYzx) dfTRANSFORMAT_31(liste_COEFFICIENT_Yxyz,fichier_COEFFICIENT_Yxyz,COEFFICIENT_Yxyz_IMPLICITE,CYxyz) /* Definition des fichiers des coefficients de la deuxieme equation differentielle. */ #define sCOEFFICIENT_Yx(numero_de_la_periode) \ FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_COEFFICIENT_Yx)) #define sCOEFFICIENT_Yy(numero_de_la_periode) \ FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_COEFFICIENT_Yy)) #define sCOEFFICIENT_Yz(numero_de_la_periode) \ FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_COEFFICIENT_Yz)) #define sCOEFFICIENT_Yxy(numero_de_la_periode) \ FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_COEFFICIENT_Yxy)) #define sCOEFFICIENT_Yyz(numero_de_la_periode) \ FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_COEFFICIENT_Yyz)) #define sCOEFFICIENT_Yzx(numero_de_la_periode) \ FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_COEFFICIENT_Yzx)) #define sCOEFFICIENT_Yxyz(numero_de_la_periode) \ FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_COEFFICIENT_Yxyz)) /* Formule generale definissant les variations des coefficients de la deuxieme equation. */ dfTRANSFORMAT_31(liste_COEFFICIENT_Zx,fichier_COEFFICIENT_Zx,COEFFICIENT_Zx_IMPLICITE,CZx) dfTRANSFORMAT_31(liste_COEFFICIENT_Zy,fichier_COEFFICIENT_Zy,COEFFICIENT_Zy_IMPLICITE,CZy) dfTRANSFORMAT_31(liste_COEFFICIENT_Zz,fichier_COEFFICIENT_Zz,COEFFICIENT_Zz_IMPLICITE,CZz) dfTRANSFORMAT_31(liste_COEFFICIENT_Zxy,fichier_COEFFICIENT_Zxy,COEFFICIENT_Zxy_IMPLICITE,CZxy) dfTRANSFORMAT_31(liste_COEFFICIENT_Zyz,fichier_COEFFICIENT_Zyz,COEFFICIENT_Zyz_IMPLICITE,CZyz) dfTRANSFORMAT_31(liste_COEFFICIENT_Zzx,fichier_COEFFICIENT_Zzx,COEFFICIENT_Zzx_IMPLICITE,CZzx) dfTRANSFORMAT_31(liste_COEFFICIENT_Zxyz,fichier_COEFFICIENT_Zxyz,COEFFICIENT_Zxyz_IMPLICITE,CZxyz) /* Definition des fichiers des coefficients de la troisieme equation differentielle. */ #define sCOEFFICIENT_Zx(numero_de_la_periode) \ FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_COEFFICIENT_Zx)) #define sCOEFFICIENT_Zy(numero_de_la_periode) \ FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_COEFFICIENT_Zy)) #define sCOEFFICIENT_Zz(numero_de_la_periode) \ FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_COEFFICIENT_Zz)) #define sCOEFFICIENT_Zxy(numero_de_la_periode) \ FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_COEFFICIENT_Zxy)) #define sCOEFFICIENT_Zyz(numero_de_la_periode) \ FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_COEFFICIENT_Zyz)) #define sCOEFFICIENT_Zzx(numero_de_la_periode) \ FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_COEFFICIENT_Zzx)) #define sCOEFFICIENT_Zxyz(numero_de_la_periode) \ FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_COEFFICIENT_Zxyz)) /* Formule generale definissant les variations des coefficients de la troisieme equation. */ dfTRANSFORMAT_31(liste_VARIABLE_cx0,fichier_VARIABLE_cx0,VARIABLE_cx0_IMPLICITE,CX0) dfTRANSFORMAT_31(liste_VARIABLE_cy0,fichier_VARIABLE_cy0,VARIABLE_cy0_IMPLICITE,CY0) dfTRANSFORMAT_31(liste_VARIABLE_cz0,fichier_VARIABLE_cz0,VARIABLE_cz0_IMPLICITE,CZ0) /* Definition des fichiers des valeurs initiales des trois variables (x0,y0,z0). */ #define sVARIABLE_cx0(numero_de_la_periode) \ FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_VARIABLE_cx0)) #define sVARIABLE_cy0(numero_de_la_periode) \ FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_VARIABLE_cy0)) #define sVARIABLE_cz0(numero_de_la_periode) \ FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_VARIABLE_cz0)) /* Formule generale definissant les variations des valeurs initiales des trois variables. */ dfTRANSFORMAT_31(liste_PAS_DE_TEMPS_dct,fichier_PAS_DE_TEMPS_dct,PAS_DE_TEMPS_dct_IMPLICITE,DCT) /* Definition du fichier des pas de temps. */ #define sPAS_DE_TEMPS_dct(numero_de_la_periode) \ FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_PAS_DE_TEMPS_dct)) /* Formule generale definissant les variations du pas de temps. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N D E L ' I N T E G R A T I O N D U S Y S T E M E */ /* D ' E Q U A T I O N S D I F F E R E N T I E L L E S : */ /* */ /*************************************************************************************************************************************/ #include xrk/integr.1B.vv.I" /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N D E S I N I T I A L I S A T I O N S : */ /* */ /*************************************************************************************************************************************/ /* Jusqu'au 20030313145405, '__VERSION__PERMETTRE_L_UTILISATION_D_UN_FOND' etait defini */ /* ici, mais cela est contraire aux tests dont il est l'objet dans */ /* 'v $xrv/champs_5.12$I __VERSION__PERMETTRE_L_UTILISATION_D_UN_FOND' via */ /* 'v $xrk/attractor.17$I champs_5.12', d'ou son deplacement a cette date... */ #include xrk/attractor.18.I" /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* A T T R A C T E U R D E L O R E N Z : */ /* */ /*************************************************************************************************************************************/ BCommande(nombre_d_arguments,arguments) /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DONNEES_NECESSAIRES_A_L_UTILISATION_D_UN_FOND; /*..............................................................................................................................*/ INITIALISATIONS_GENERALES; /* Initialisations generales faites au tout debut... */ iTRANSFORMAT_31(liste_COEFFICIENT_Xx,COEFFICIENT_Xx_IMPLICITE); iTRANSFORMAT_31(liste_COEFFICIENT_Xy,COEFFICIENT_Xy_IMPLICITE); iTRANSFORMAT_31(liste_COEFFICIENT_Xz,COEFFICIENT_Xz_IMPLICITE); iTRANSFORMAT_31(liste_COEFFICIENT_Xxy,COEFFICIENT_Xxy_IMPLICITE); iTRANSFORMAT_31(liste_COEFFICIENT_Xyz,COEFFICIENT_Xyz_IMPLICITE); iTRANSFORMAT_31(liste_COEFFICIENT_Xzx,COEFFICIENT_Xzx_IMPLICITE); iTRANSFORMAT_31(liste_COEFFICIENT_Xxyz,COEFFICIENT_Xxyz_IMPLICITE); /* Initialisation des coefficients de la premiere equation differentielle. */ iTRANSFORMAT_31(liste_COEFFICIENT_Yx,COEFFICIENT_Yx_IMPLICITE); iTRANSFORMAT_31(liste_COEFFICIENT_Yy,COEFFICIENT_Yy_IMPLICITE); iTRANSFORMAT_31(liste_COEFFICIENT_Yz,COEFFICIENT_Yz_IMPLICITE); iTRANSFORMAT_31(liste_COEFFICIENT_Yxy,COEFFICIENT_Yxy_IMPLICITE); iTRANSFORMAT_31(liste_COEFFICIENT_Yyz,COEFFICIENT_Yyz_IMPLICITE); iTRANSFORMAT_31(liste_COEFFICIENT_Yzx,COEFFICIENT_Yzx_IMPLICITE); iTRANSFORMAT_31(liste_COEFFICIENT_Yxyz,COEFFICIENT_Yxyz_IMPLICITE); /* Initialisation des coefficients de la deuxieme equation differentielle. */ iTRANSFORMAT_31(liste_COEFFICIENT_Zx,COEFFICIENT_Zx_IMPLICITE); iTRANSFORMAT_31(liste_COEFFICIENT_Zy,COEFFICIENT_Zy_IMPLICITE); iTRANSFORMAT_31(liste_COEFFICIENT_Zz,COEFFICIENT_Zz_IMPLICITE); iTRANSFORMAT_31(liste_COEFFICIENT_Zxy,COEFFICIENT_Zxy_IMPLICITE); iTRANSFORMAT_31(liste_COEFFICIENT_Zyz,COEFFICIENT_Zyz_IMPLICITE); iTRANSFORMAT_31(liste_COEFFICIENT_Zzx,COEFFICIENT_Zzx_IMPLICITE); iTRANSFORMAT_31(liste_COEFFICIENT_Zxyz,COEFFICIENT_Zxyz_IMPLICITE); /* Initialisation des coefficients de la troisieme equation differentielle. */ iTRANSFORMAT_31(liste_VARIABLE_cx0,VARIABLE_cx0_IMPLICITE); iTRANSFORMAT_31(liste_VARIABLE_cy0,VARIABLE_cy0_IMPLICITE); iTRANSFORMAT_31(liste_VARIABLE_cz0,VARIABLE_cz0_IMPLICITE); /* Initialisation des valeurs initiales des trois variables (x0,y0,z0). */ iTRANSFORMAT_31(liste_PAS_DE_TEMPS_dct,PAS_DE_TEMPS_dct_IMPLICITE); /* Initialisation du pas de temps. */ iTRANSFORMAT_31(liste_NOMBRE_D_ITERATIONS,NOMBRE_D_ITERATIONS_IMPLICITE); /* Initialisation du nombre d'iterations. */ #include xrv/champs_5.1A.I" GET_ARGUMENTSv(nombre_d_arguments ,BLOC(PROCESS_ARGUMENTS_GEOMETRIQUES; PROCESS_ARGUMENT_FICHIER("COEFFICIENT_Xx=" ,fichier_COEFFICIENT_Xx ,liste_COEFFICIENT_Xx ,COEFFICIENT_Xx_IMPLICITE ,gTRANSFORMAT_31 ); PROCESS_ARGUMENT_FICHIER("COEFFICIENT_Xy=" ,fichier_COEFFICIENT_Xy ,liste_COEFFICIENT_Xy ,COEFFICIENT_Xy_IMPLICITE ,gTRANSFORMAT_31 ); PROCESS_ARGUMENT_FICHIER("COEFFICIENT_Xz=" ,fichier_COEFFICIENT_Xz ,liste_COEFFICIENT_Xz ,COEFFICIENT_Xz_IMPLICITE ,gTRANSFORMAT_31 ); PROCESS_ARGUMENT_FICHIER("COEFFICIENT_Xxy=" ,fichier_COEFFICIENT_Xxy ,liste_COEFFICIENT_Xxy ,COEFFICIENT_Xxy_IMPLICITE ,gTRANSFORMAT_31 ); PROCESS_ARGUMENT_FICHIER("COEFFICIENT_Xyz=" ,fichier_COEFFICIENT_Xyz ,liste_COEFFICIENT_Xyz ,COEFFICIENT_Xyz_IMPLICITE ,gTRANSFORMAT_31 ); PROCESS_ARGUMENT_FICHIER("COEFFICIENT_Xzx=" ,fichier_COEFFICIENT_Xzx ,liste_COEFFICIENT_Xzx ,COEFFICIENT_Xzx_IMPLICITE ,gTRANSFORMAT_31 ); PROCESS_ARGUMENT_FICHIER("COEFFICIENT_Xxyz=" ,fichier_COEFFICIENT_Xxyz ,liste_COEFFICIENT_Xxyz ,COEFFICIENT_Xxyz_IMPLICITE ,gTRANSFORMAT_31 ); PROCESS_ARGUMENT_FICHIER("COEFFICIENT_Yx=" ,fichier_COEFFICIENT_Yx ,liste_COEFFICIENT_Yx ,COEFFICIENT_Yx_IMPLICITE ,gTRANSFORMAT_31 ); PROCESS_ARGUMENT_FICHIER("COEFFICIENT_Yy=" ,fichier_COEFFICIENT_Yy ,liste_COEFFICIENT_Yy ,COEFFICIENT_Yy_IMPLICITE ,gTRANSFORMAT_31 ); PROCESS_ARGUMENT_FICHIER("COEFFICIENT_Yz=" ,fichier_COEFFICIENT_Yz ,liste_COEFFICIENT_Yz ,COEFFICIENT_Yz_IMPLICITE ,gTRANSFORMAT_31 ); PROCESS_ARGUMENT_FICHIER("COEFFICIENT_Yxy=" ,fichier_COEFFICIENT_Yxy ,liste_COEFFICIENT_Yxy ,COEFFICIENT_Yxy_IMPLICITE ,gTRANSFORMAT_31 ); PROCESS_ARGUMENT_FICHIER("COEFFICIENT_Yyz=" ,fichier_COEFFICIENT_Yyz ,liste_COEFFICIENT_Yyz ,COEFFICIENT_Yyz_IMPLICITE ,gTRANSFORMAT_31 ); PROCESS_ARGUMENT_FICHIER("COEFFICIENT_Yzx=" ,fichier_COEFFICIENT_Yzx ,liste_COEFFICIENT_Yzx ,COEFFICIENT_Yzx_IMPLICITE ,gTRANSFORMAT_31 ); PROCESS_ARGUMENT_FICHIER("COEFFICIENT_Yxyz=" ,fichier_COEFFICIENT_Yxyz ,liste_COEFFICIENT_Yxyz ,COEFFICIENT_Yxyz_IMPLICITE ,gTRANSFORMAT_31 ); PROCESS_ARGUMENT_FICHIER("COEFFICIENT_Zx=" ,fichier_COEFFICIENT_Zx ,liste_COEFFICIENT_Zx ,COEFFICIENT_Zx_IMPLICITE ,gTRANSFORMAT_31 ); PROCESS_ARGUMENT_FICHIER("COEFFICIENT_Zy=" ,fichier_COEFFICIENT_Zy ,liste_COEFFICIENT_Zy ,COEFFICIENT_Zy_IMPLICITE ,gTRANSFORMAT_31 ); PROCESS_ARGUMENT_FICHIER("COEFFICIENT_Zz=" ,fichier_COEFFICIENT_Zz ,liste_COEFFICIENT_Zz ,COEFFICIENT_Zz_IMPLICITE ,gTRANSFORMAT_31 ); PROCESS_ARGUMENT_FICHIER("COEFFICIENT_Zxy=" ,fichier_COEFFICIENT_Zxy ,liste_COEFFICIENT_Zxy ,COEFFICIENT_Zxy_IMPLICITE ,gTRANSFORMAT_31 ); PROCESS_ARGUMENT_FICHIER("COEFFICIENT_Zyz=" ,fichier_COEFFICIENT_Zyz ,liste_COEFFICIENT_Zyz ,COEFFICIENT_Zyz_IMPLICITE ,gTRANSFORMAT_31 ); PROCESS_ARGUMENT_FICHIER("COEFFICIENT_Zzx=" ,fichier_COEFFICIENT_Zzx ,liste_COEFFICIENT_Zzx ,COEFFICIENT_Zzx_IMPLICITE ,gTRANSFORMAT_31 ); PROCESS_ARGUMENT_FICHIER("COEFFICIENT_Zxyz=" ,fichier_COEFFICIENT_Zxyz ,liste_COEFFICIENT_Zxyz ,COEFFICIENT_Zxyz_IMPLICITE ,gTRANSFORMAT_31 ); PROCESS_ARGUMENT_FICHIER("VARIABLE_cx0=" ,fichier_VARIABLE_cx0 ,liste_VARIABLE_cx0 ,VARIABLE_cx0_IMPLICITE ,gTRANSFORMAT_31 ); PROCESS_ARGUMENT_FICHIER("VARIABLE_cy0=" ,fichier_VARIABLE_cy0 ,liste_VARIABLE_cy0 ,VARIABLE_cy0_IMPLICITE ,gTRANSFORMAT_31 ); PROCESS_ARGUMENT_FICHIER("VARIABLE_cz0=" ,fichier_VARIABLE_cz0 ,liste_VARIABLE_cz0 ,VARIABLE_cz0_IMPLICITE ,gTRANSFORMAT_31 ); PROCESS_ARGUMENT_FICHIER("PAS_DE_TEMPS_dct=" ,fichier_PAS_DE_TEMPS_dct ,liste_PAS_DE_TEMPS_dct ,PAS_DE_TEMPS_dct_IMPLICITE ,gTRANSFORMAT_31 ); PROCESS_ARGUMENT_FICHIER("NOMBRE_D_ITERATIONS=" ,fichier_NOMBRE_D_ITERATIONS ,liste_NOMBRE_D_ITERATIONS ,NOMBRE_D_ITERATIONS_IMPLICITE ,gTRANSFORMAT_31 ); PROCESS_ARGUMENTS_DE_VISUALISATION; PROCESS_ARGUMENTS_DE_VISUALISATION_DES_AXES_DE_COORDONNEES; GET_ARGUMENT_I("n=""iterations=",nombre_d_iterations); GET_ARGUMENT_F("dt=""dct=",dct); GET_ARGUMENT_I("ordre=""methode=""integration=",ordre_de_la_methode_d_integration); /* Les synonymes de "ordre=", ont ete introduits le 20060608151452... */ GET_ARGUMENT_L("integration_adaptative=""adaptative=",faire_de_l_integration_adaptative); GET_ARGUMENT_F("sia=""seuil_integration_adaptative=" ,seuil_de_la_distance_lors_de_l_integration_adaptative ); GET_ARGUMENT_F("frdt=""frdct=""facteur_reduction_dt=""facteur_reduction_dct=" ,facteur_de_reduction_du_pas_de_temps ); /* L'integration adaptative a ete introduite le 20070814120230... */ GET_ARGUMENT_L("coordonnees_vitesses=",editer_les_coordonnees_et_les_vitesses); ) ); #include xrv/champs_5.19.I" /* Pour eviter le message : */ /* */ /* Static function is not referenced. */ /* */ /* sur 'SYSTEME_ES9000_AIX_CC'... */ #include xrk/attractor.19.I" /* Validations et definition de l'espace physique. */ Komp(numero_de_la_periode_courante_de_la_simulation,nombre_de_periodes_de_la_simulation) Bblock PARALLELISME(BLOC(RE_INITIALISATION_DE_L_HORLOGE; INITIALISATIONS_RELATIVES_A_CHAQUE_NOUVELLE_IMAGE(numero_de_la_periode_courante); /* Initialisations necessaires avant le calcul et la generation de chaque nouvelle image. */ EGAL(Xx,sCOEFFICIENT_Xx(numero_de_la_periode_courante)); EGAL(Xy,sCOEFFICIENT_Xy(numero_de_la_periode_courante)); EGAL(Xz,sCOEFFICIENT_Xz(numero_de_la_periode_courante)); EGAL(Xxy,sCOEFFICIENT_Xxy(numero_de_la_periode_courante)); EGAL(Xyz,sCOEFFICIENT_Xyz(numero_de_la_periode_courante)); EGAL(Xzx,sCOEFFICIENT_Xzx(numero_de_la_periode_courante)); EGAL(Xxyz,sCOEFFICIENT_Xxyz(numero_de_la_periode_courante)); /* Calcul des coefficients de la premiere equation differentielle. */ EGAL(Yx,sCOEFFICIENT_Yx(numero_de_la_periode_courante)); EGAL(Yy,sCOEFFICIENT_Yy(numero_de_la_periode_courante)); EGAL(Yz,sCOEFFICIENT_Yz(numero_de_la_periode_courante)); EGAL(Yxy,sCOEFFICIENT_Yxy(numero_de_la_periode_courante)); EGAL(Yyz,sCOEFFICIENT_Yyz(numero_de_la_periode_courante)); EGAL(Yzx,sCOEFFICIENT_Yzx(numero_de_la_periode_courante)); EGAL(Yxyz,sCOEFFICIENT_Yxyz(numero_de_la_periode_courante)); /* Calcul des coefficients de la deuxieme equation differentielle. */ EGAL(Zx,sCOEFFICIENT_Zx(numero_de_la_periode_courante)); EGAL(Zy,sCOEFFICIENT_Zy(numero_de_la_periode_courante)); EGAL(Zz,sCOEFFICIENT_Zz(numero_de_la_periode_courante)); EGAL(Zxy,sCOEFFICIENT_Zxy(numero_de_la_periode_courante)); EGAL(Zyz,sCOEFFICIENT_Zyz(numero_de_la_periode_courante)); EGAL(Zzx,sCOEFFICIENT_Zzx(numero_de_la_periode_courante)); EGAL(Zxyz,sCOEFFICIENT_Zxyz(numero_de_la_periode_courante)); /* Calcul des coefficients de la troisieme equation differentielle. */ EGAL(cx,sVARIABLE_cx0(numero_de_la_periode_courante)); EGAL(cy,sVARIABLE_cy0(numero_de_la_periode_courante)); EGAL(cz,sVARIABLE_cz0(numero_de_la_periode_courante)); /* Calcul des valeurs initiales des trois variables (x0,y0,z0). */ EGAL(dcx,FZERO); EGAL(dcy,FZERO); EGAL(dcz,FZERO); /* Initialisation des differentielles pour la premiere visualisation si celle-ci a lieu */ /* en couleurs. On notera que 'FZERO' est la valeur la plus "logique"... */ vTRANSFORMAT_31(nombre_d_iterations ,sNOMBRE_D_ITERATIONS ,numero_de_la_periode_courante ,fichier_NOMBRE_D_ITERATIONS ); /* Calcul du nombre d'iterations lorsqu'il est variable. */ vTRANSFORMAT_31(dct ,sPAS_DE_TEMPS_dct ,numero_de_la_periode_courante ,fichier_PAS_DE_TEMPS_dct ); /* Calcul du pas de temps. */ Komp(numero_de_l_iteration_courante,nombre_d_iterations) Bblock RECHERCHE_DES_EXTREMA_DES_COORDONNEES_ET_DES_DERIVEES; /* On notera que cette recherche n'est pas conditionnee par 'editer_les_extrema', car les */ /* extrema pourraient etre utilises pour la visualisation... */ Test(IFOU(IL_FAUT(visualiser_le_fantome) ,IFGE(numero_de_l_iteration_courante,PREMIERE_ITERATION_VISUALISEE) ) ) Bblock CALS(memorisation_1_point_07(SOUS(cx,Xcentre_ESPACE) ,SOUS(cy,Ycentre_ESPACE) ,SOUS(cz,Zcentre_ESPACE) ,dcx ,dcy ,dcz ,numero_de_l_iteration_courante ) ); /* Memorisation de l'iteration courante... */ Test(IL_FAUT(editer_les_coordonnees_et_les_vitesses)) Bblock CAL2(Prin1("temps=%f",temps_courant)); CAL2(Prin3(" coordonnees={%+.17f,%+.17f,%+.17f}" ,cx ,cy ,cz ) ); CAL2(Prin3(" vitesse={%+.17f,%+.17f,%+.17f}" ,dcx ,dcy ,dcz ) ); CAL2(Prin0("\n")); Eblock ATes Bblock Eblock ETes Eblock ATes Bblock Eblock ETes INTEGRATION_ADAPTATIVE_D_UN_SYSTEME_D_EQUATIONS_DIFFERENTIELLES_O1(temps_courant,dct); /* Integration du systeme d'equations differentielles suivant la methode choisie... */ /* */ /* Le 20070814120230, 'INTEGRATION_D_UN_SYSTEME_D_EQUATIONS_DIFFERENTIELLES_O1(...)' a ete */ /* remplace par 'INTEGRATION_ADAPTATIVE_D_UN_SYSTEME_D_EQUATIONS_DIFFERENTIELLES_O1(...)' */ /* qui est le dispositif d'integration adaptatif... */ INCREMENTATION_DE_L_HORLOGE(dct); /* Simulation du temps de la simulation... */ Eblock EKom VISUALISATION_DES_AXES_DE_COORDONNEES; /* Visualisation si necessaire des trois axes de coordonnees. */ GENERATION_D_UNE_IMAGE_ET_PASSAGE_A_LA_SUIVANTE(BLOC(VIDE;)); /* Generation de l'image courante... */ ) ,BLOC(PASSAGE_A_L_IMAGE_SUIVANTE;) ,numero_de_la_periode_courante ); Eblock EKom EDITION_DES_EXTREMA_DES_COORDONNEES_ET_DES_DERIVEES; /* Edition facultative des extrema des coordonnees et des derivees. */ RETU_Commande; Eblock ECommande