/*************************************************************************************************************************************/
/* */
/* 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