/*************************************************************************************************************************************/
/* */
/* E T U D E T R I D I M E N S I O N N E L L E D E L A D Y N A M I Q U E D E V E R H U L S T */
/* D A N S L A Q U E L L E C H A Q U E C O O R D O N N E E C O R R E S P O N D */
/* A U N E F O R M U L A T I O N D I F F E R E N T E : */
/* */
/* */
/* Author of '$xrk/verhulst.22$K' : */
/* */
/* Jean-Francois COLONNA (LACTAMME, 20000829140511). */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* 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_CPP_____AUTORISER_LE_GooF
/* Ceci est essentiel puisque l'on souhaite etudier l'influence de la syntaxe sur les */
/* resultats obtenus. Ceci manquait et a ete introduit le 20040420233751. */
@define PRAGMA_CL_____MODULE_NON_OPTIMISABLE
/* Ceci est essentiel puisque l'on souhaite etudier l'influence de la syntaxe sur les */
/* resultats obtenus. */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* 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 : */
/* */
/*************************************************************************************************************************************/
#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. */
/* */
/* */
/*************************************************************************************************************************************/
#define hXmin_ESPACE \
PARE(-1.4)
#define hYmin_ESPACE \
PARE(-1.4)
#define hZmin_ESPACE \
PARE(-1.4)
/* Definition du "coin" inferieur-gauche-arriere de l'espace physique. ATTENTION, il est */
/* evident que logiquement il faudrait prendre {0,0,0} ; ce choix symetrique de celui de */
/* 'h?max_ESPACE' est lie a la visualisation de type "torique" via '?_DU_TORE(...)'. */
#define hXmax_ESPACE \
PARE(1.4)
#define hYmax_ESPACE \
PARE(1.4)
#define hZmax_ESPACE \
PARE(1.4)
/* Definition du "coin" superieur-droite-avant de l'espace physique. */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* 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.00)
#define dYmin_ESPACE \
PARE(-2.00)
#define dZmin_ESPACE \
PARE(-2.00)
/* Definition des minima des differentielles {dx,dy,dz}. */
#define dXmax_ESPACE \
PARE(2.00)
#define dYmax_ESPACE \
PARE(2.00)
#define dZmax_ESPACE \
PARE(2.00)
/* 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'. */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* 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"
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* 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 : */
/* */
/*************************************************************************************************************************************/
#define DCT \
FRA1(FRA2(FU))
DEFV(Local,DEFV(Float,INIT(dct,DCT)));
/* Definition de 'dt'. */
#include xrk/attractor.14.I"
#define NOMBRE_MAXIMAL_DE_POINTS_GERABLES \
MIN2(NOMBRE_MAXIMAL_DE_POINTS_VISUALISABLES,NOMBRE_MAXIMAL_DE_PERIODES_DE_LA_SIMULATION) \
/* Cette constante permet de gerer d'une facon homogene les listes de dimension */ \
/* 'nombre_de_periodes_de_la_simulation' comme celles de dimension 'nombre_d_iterations'. */
/* ATTENTION, a ne pas confondre : */
/* */
/* 1-'nombre_de_periodes_de_la_simulation' qui definit finalement le nombre d'images que */
/* l'on va generer et qui conditionne toutes les listes (sans exception...) definies par */
/* 'fTRANSFORMAT_31(...)', et */
/* */
/* 2-'nombre_d_iterations' qui definit le nombre de particules visualisees dans chaque */
/* image ; les listes relatives aux particules sont definies elles-aussi a l'aide de la */
/* procedure 'dTRANSFORMAT_31(...)' ce qui signifie que 'nombre_d_iterations' est limite */
/* par 'NOMBRE_MAXIMAL_DE_PERIODES_DE_LA_SIMULATION'... */
/* */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* 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 \
FRA4(FRA10(FU))
DEFV(Local,DEFV(Float,INIT(rayon_de_visualisation,RAYON_DE_VISUALISATION)));
/* Rayon du disque materialisant une iteration. */
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
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* 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 : */
/* */
/*************************************************************************************************************************************/
#define GENERER_LA_COORDONNEE_X \
VRAI
#define GENERER_LA_COORDONNEE_Y \
VRAI
#define GENERER_LA_COORDONNEE_Z \
VRAI
DEFV(Local,DEFV(Logical,INIT(generer_la_coordonnee_X,GENERER_LA_COORDONNEE_X)));
DEFV(Local,DEFV(Logical,INIT(generer_la_coordonnee_Y,GENERER_LA_COORDONNEE_Y)));
DEFV(Local,DEFV(Logical,INIT(generer_la_coordonnee_Z,GENERER_LA_COORDONNEE_Z)));
/* Afin de controler la genereation des trois coordonnees... */
=define ZOOM_IMPLICITE \
GRO8(FRA10(FU))
#include xrk/attractor.17.I"
#include xrv/particule.31.I"
#define TAUX_DE_CROISSANCE \
GRO3(FU)
dfTRANSFORMAT_31(liste_TAUX_DE_CROISSANCE,fichier_TAUX_DE_CROISSANCE,TAUX_DE_CROISSANCE_IMPLICITE,TAUX_DE_CROISSANCE)
/* Definition du fichier de definition du taux de croissance. */
#define sTAUX_DE_CROISSANCE(numero_de_la_periode) \
FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_TAUX_DE_CROISSANCE))
/* Formule generale definissant la variation du taux de croissance. */
#define CX0 \
FRA2(FU)
dfTRANSFORMAT_31(liste_VALEUR_INITIALE,fichier_VALEUR_INITIALE,VALEUR_INITIALE_IMPLICITE,CX0)
/* Definition du fichier de definition de la valeur initiale 'X(0)'. */
#define sVALEUR_INITIALE(numero_de_la_periode) \
FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_VALEUR_INITIALE))
/* Formule generale definissant la variation de la valeur initiale 'X(0)'. */
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 U C O L O R I A G E : */
/* */
/*************************************************************************************************************************************/
#define COLORIER_ARBITRAIREMENT_LES_POINTS \
FAUX
DEFV(Local,DEFV(Logical,INIT(colorier_arbitrairement_les_points,COLORIER_ARBITRAIREMENT_LES_POINTS)));
/* Doit-on colorier arbitrairement les points ? */
#define FACTEUR_D_HOMOTHETIE_DES_COULEURS \
FU
#define CONSTANTE_DE_TRANSLATION_DES_COULEURS \
FZERO
DEFV(Local,DEFV(Float,INIT(facteur_d_homothetie_des_couleurs,FACTEUR_D_HOMOTHETIE_DES_COULEURS)));
DEFV(Local,DEFV(Float,INIT(constante_de_translation_des_couleurs,CONSTANTE_DE_TRANSLATION_DES_COULEURS)));
/* Une transformation du type 'A.c+B' sera appliquee aux couleurs... */
#define ROUGE_IMPLICITE \
BLANC
#define VERTE_IMPLICITE \
BLANC
#define BLEUE_IMPLICITE \
BLANC
/* Definition des composantes chromatiques implicites. */
fTRANSFORMAT_31(fichier_LISTE_ROUGE);
fTRANSFORMAT_31(fichier_LISTE_VERTE);
fTRANSFORMAT_31(fichier_LISTE_BLEUE);
/* Definition des fichiers de listes de vraies couleurs (excluant les fausses). */
/* */
/* ATTENTION, les couleurs des points a visualiser doivent etre definies ainsi : */
/* */
/* ROUGE E [NOIR,BLANC] */
/* VERTE E [NOIR,BLANC] */
/* BLEUE E [NOIR,BLANC] */
/* */
#define LES_NIVEAUX_SONT_DENORMALISES \
VRAI
DEFV(Local,DEFV(Logical,INIT(les_niveaux_sont_denormalises,LES_NIVEAUX_SONT_DENORMALISES)));
/* Afin de pouvoir introduire des niveaux denormalises. Ceci a ete introduit le */
/* 20131204100042 a cause de 'v $xrv/particule.10$K les_niveaux_sont_denormalises'... */
#define NIVEAU_IMPLICITE \
BLANC
fTRANSFORMAT_31(fichier_LISTE_NIVEAU);
/* Definition du fichier de listes des fausses couleurs (excluant les vraies couleurs). */
/* */
/* ATTENTION, les couleurs des points a visualiser doivent etre definies ainsi : */
/* */
/* NIVEAU E [NOIR,BLANC] */
/* */
#include xrv/particule.22.I"
/* Recuperation d'un fichier contenant une liste de type {X,Y,Z} ou {R,V,B}. */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D E L A D Y N A M I Q U E D E V E R H U L S T : */
/* */
/* */
/* Definition : */
/* */
/* Considerons la relation de recurrence */
/* suivante : */
/* */
/* 2 */
/* X[n+1] = (1+r).X[n] - r.X[n] */
/* */
/* Cette relation correspond par exemple */
/* a la population annuelle d'une colonie */
/* animale, dont le taux de croissance est R. */
/* */
/* */
/*************************************************************************************************************************************/
#include xrk/verhulst.11.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. */
DEFV(Local,DEFV(Float,INIT(taux_de_croissance,TAUX_DE_CROISSANCE)));
/* Definition du taux de croissance. */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D E S T R O I S F O N C T I O N S ' F ' : */
/* */
/*************************************************************************************************************************************/
DEFV(Local,DEFV(Float,INIT(X1n_1,FLOT__UNDEF)));
DEFV(Local,DEFV(Float,INIT(X1n,FLOT__UNDEF)));
/* Definition de l'iteration 1 courante. */
DEFV(Local,DEFV(Float,INIT(X2n_1,FLOT__UNDEF)));
DEFV(Local,DEFV(Float,INIT(X2n,FLOT__UNDEF)));
/* Definition de l'iteration 2 courante. */
DEFV(Local,DEFV(Float,INIT(X3n_1,FLOT__UNDEF)));
DEFV(Local,DEFV(Float,INIT(X3n,FLOT__UNDEF)));
/* Definition de l'iteration 3 courante. */
DEFV(Local,DEFV(Float,INIT(X4n_1,FLOT__UNDEF)));
DEFV(Local,DEFV(Float,INIT(X4n,FLOT__UNDEF)));
/* Definition de l'iteration 4 courante. */
DEFV(Local,DEFV(Float,INIT(X5n_1,FLOT__UNDEF)));
DEFV(Local,DEFV(Float,INIT(X5n,FLOT__UNDEF)));
/* Definition de l'iteration 5 courante. */
#define COEFFICIENT_1_X \
FU
#define COEFFICIENT_2_X \
FZERO
#define COEFFICIENT_3_X \
FZERO
#define COEFFICIENT_4_X \
FZERO
#define COEFFICIENT_5_X \
FZERO
#define COORDONNEE_X \
LIZ5(coefficient_1_X,X1n \
,coefficient_2_X,X2n \
,coefficient_3_X,X3n \
,coefficient_4_X,X4n \
,coefficient_5_X,X5n \
)
DEFV(Local,DEFV(Float,INIT(coefficient_1_X,COEFFICIENT_1_X)));
DEFV(Local,DEFV(Float,INIT(coefficient_2_X,COEFFICIENT_2_X)));
DEFV(Local,DEFV(Float,INIT(coefficient_3_X,COEFFICIENT_3_X)));
DEFV(Local,DEFV(Float,INIT(coefficient_4_X,COEFFICIENT_4_X)));
DEFV(Local,DEFV(Float,INIT(coefficient_5_X,COEFFICIENT_5_X)));
DEFV(Local,DEFV(Float,INIT(coordonnee_X,FLOT__UNDEF)));
/* Definition de la coordonnee 'X'. */
#define COEFFICIENT_1_Y \
FZERO
#define COEFFICIENT_2_Y \
FU
#define COEFFICIENT_3_Y \
FZERO
#define COEFFICIENT_4_Y \
FZERO
#define COEFFICIENT_5_Y \
FZERO
#define COORDONNEE_Y \
LIZ5(coefficient_1_Y,X1n \
,coefficient_2_Y,X2n \
,coefficient_3_Y,X3n \
,coefficient_4_Y,X4n \
,coefficient_5_Y,X5n \
)
DEFV(Local,DEFV(Float,INIT(coefficient_1_Y,COEFFICIENT_1_Y)));
DEFV(Local,DEFV(Float,INIT(coefficient_2_Y,COEFFICIENT_2_Y)));
DEFV(Local,DEFV(Float,INIT(coefficient_3_Y,COEFFICIENT_3_Y)));
DEFV(Local,DEFV(Float,INIT(coefficient_4_Y,COEFFICIENT_4_Y)));
DEFV(Local,DEFV(Float,INIT(coefficient_5_Y,COEFFICIENT_5_Y)));
DEFV(Local,DEFV(Float,INIT(coordonnee_Y,FLOT__UNDEF)));
/* Definition de la coordonnee 'Y'. */
#define COEFFICIENT_1_Z \
FZERO
#define COEFFICIENT_2_Z \
FZERO
#define COEFFICIENT_3_Z \
FZERO
#define COEFFICIENT_4_Z \
FZERO
#define COEFFICIENT_5_Z \
FU
#define COORDONNEE_Z \
LIZ5(coefficient_1_Z,X1n \
,coefficient_2_Z,X2n \
,coefficient_3_Z,X3n \
,coefficient_4_Z,X4n \
,coefficient_5_Z,X5n \
)
DEFV(Local,DEFV(Float,INIT(coefficient_1_Z,COEFFICIENT_1_Z)));
DEFV(Local,DEFV(Float,INIT(coefficient_2_Z,COEFFICIENT_2_Z)));
DEFV(Local,DEFV(Float,INIT(coefficient_3_Z,COEFFICIENT_3_Z)));
DEFV(Local,DEFV(Float,INIT(coefficient_4_Z,COEFFICIENT_4_Z)));
DEFV(Local,DEFV(Float,INIT(coefficient_5_Z,COEFFICIENT_5_Z)));
DEFV(Local,DEFV(Float,INIT(coordonnee_Z,FLOT__UNDEF)));
/* Definition de la coordonnee 'Z'. */
/* */
/* ATTENTION, on notera que l'on choisit l'iteration de type "5" car, en effet, */
/* le 20000830091826, sur '$LACT29', j'ai constate que "2" et "3", de meme que "2" et "4" */
/* donnaient la meme valeur. En fait, le 20001113124656, j'ai constate sur '$LACT14', que */
/* le comportement etait different... */
#define gFx(cx,cy,cz,t) \
coordonnee_X \
/* Definition de la fonction F (x,y,z,t). */ \
/* x */
#define gFy(cx,cy,cz,t) \
coordonnee_Y \
/* Definition de la fonction F (x,y,z,t). */ \
/* y */
#define gFz(cx,cy,cz,t) \
coordonnee_Z \
/* Definition de la fonction F (x,y,z,t). */ \
/* z */
BFonctionF
DEFV(Local,DEFV(FonctionF,Fonction_Fx(cx,cy,cz,t)))
DEFV(Argument,DEFV(Float,cx));
DEFV(Argument,DEFV(Float,cy));
DEFV(Argument,DEFV(Float,cz));
DEFV(Argument,DEFV(Float,t));
/* Definition des coordonnees spatio-temporelles. */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
/*..............................................................................................................................*/
RETU(gFx(cx,cy,cz,t));
Eblock
EFonctionF
BFonctionF
DEFV(Local,DEFV(FonctionF,Fonction_Fy(cx,cy,cz,t)))
DEFV(Argument,DEFV(Float,cx));
DEFV(Argument,DEFV(Float,cy));
DEFV(Argument,DEFV(Float,cz));
DEFV(Argument,DEFV(Float,t));
/* Definition des coordonnees spatio-temporelles. */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
/*..............................................................................................................................*/
RETU(gFy(cx,cy,cz,t));
Eblock
EFonctionF
BFonctionF
DEFV(Local,DEFV(FonctionF,Fonction_Fz(cx,cy,cz,t)))
DEFV(Argument,DEFV(Float,cx));
DEFV(Argument,DEFV(Float,cy));
DEFV(Argument,DEFV(Float,cz));
DEFV(Argument,DEFV(Float,t));
/* Definition des coordonnees spatio-temporelles. */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
/*..............................................................................................................................*/
RETU(gFz(cx,cy,cz,t));
Eblock
EFonctionF
#define Fx(cx,cy,cz,t) \
Fonction_Fx(cx,cy,cz,t) \
/* Definition de la fonction F (x,y,z,t). */ \
/* x */
#define Fy(cx,cy,cz,t) \
Fonction_Fy(cx,cy,cz,t) \
/* Definition de la fonction F (x,y,z,t). */ \
/* y */
#define Fz(cx,cy,cz,t) \
Fonction_Fz(cx,cy,cz,t) \
/* Definition de la fonction F (x,y,z,t). */ \
/* z */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* 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"
/* Utile uniquement pour definir {cx,cy,cz} et {dcx,dcy,dcz}. */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D O N N E E S D E V I S U A L I S A T I O N " T O R I Q U E " : */
/* */
/*************************************************************************************************************************************/
#define R3 \
FRA1(FU)
#define I3 \
FZERO
#include xrk/fluide_2D.11.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 : */
/* */
/*************************************************************************************************************************************/
#include xrk/attractor.18.I"
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* E T U D E T R I D I M E N S I O N N E L L E D E L A D Y N A M I Q U E D E V E R H U L S T : */
/* */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
DEFV(CHAR,INIC(POINTERc(nom_paletteA),NOM_PIPE));
/* Nom de la palette a utiliser en cas de l'utilisation des fausses couleurs. C'est son */
/* absence/presence qui provoque le choix entre les vraies et les fausses couleurs... */
gDEFINITION_LISTE(liste_initiale_des_ROUGE,NOMBRE_MAXIMAL_DE_POINTS_GERABLES);
gDEFINITION_LISTE(liste_initiale_des_VERTE,NOMBRE_MAXIMAL_DE_POINTS_GERABLES);
gDEFINITION_LISTE(liste_initiale_des_BLEUE,NOMBRE_MAXIMAL_DE_POINTS_GERABLES);
gDEFINITION_LISTE(liste_initiale_des_NIVEAU,NOMBRE_MAXIMAL_DE_POINTS_GERABLES);
/*..............................................................................................................................*/
INITIALISATIONS_GENERALES;
/* Initialisations generales faites au tout debut... */
iTRANSFORMAT_31(liste_TAUX_DE_CROISSANCE,TAUX_DE_CROISSANCE_IMPLICITE);
/* Initialisation du taux de croissance. */
iTRANSFORMAT_31(liste_VALEUR_INITIALE,VALEUR_INITIALE_IMPLICITE);
/* Initialisation de la valeur initiale de 'X(0)'. */
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("TAUX_DE_CROISSANCE="
,fichier_TAUX_DE_CROISSANCE
,liste_TAUX_DE_CROISSANCE
,TAUX_DE_CROISSANCE_IMPLICITE
,gTRANSFORMAT_31
);
PROCESS_ARGUMENT_FICHIER("VALEUR_INITIALE="
,fichier_VALEUR_INITIALE
,liste_VALEUR_INITIALE
,VALEUR_INITIALE_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_C("NOMBRE_D_ITERATIONS=",fichier_NOMBRE_D_ITERATIONS
,BLOC(VIDE;)
,BLOC(gTRANSFORMAT_31(fichier_NOMBRE_D_ITERATIONS
,liste_NOMBRE_D_ITERATIONS
,NOMBRE_D_ITERATIONS_IMPLICITE
);
EGAL(nombre_d_iterations,INTE(FonctionI_Fload_____valeur_maximale));
/* Pour permettre le traitement des listes de couleur ci-apres qui elles contiennent */
/* 'nombre_d_iterations' elements, qui est en fait variable. On prend donc ici la valeur */
/* maximale recontree dans 'fichier_NOMBRE_D_ITERATIONS'. */
)
);
GET_ARGUMENT_L("colorier=",colorier_arbitrairement_les_points);
GET_ARGUMENT_F("ARVB=",facteur_d_homothetie_des_couleurs);
GET_ARGUMENT_F("BRVB=",constante_de_translation_des_couleurs);
PROCESS_ARGUMENTS_DE_DEFINITION_DES_FICHIERS_12;
/* Ces parametres ont ete introduits le 20021105122712. */
PROCESS_ARGUMENT_FICHIER("LISTE_ROUGE="
,fichier_LISTE_ROUGE
,liste_initiale_des_ROUGE
,ROUGE_IMPLICITE
,lTRANSFORMAT_12
);
PROCESS_ARGUMENT_FICHIER("LISTE_VERTE="
,fichier_LISTE_VERTE
,liste_initiale_des_VERTE
,VERTE_IMPLICITE
,lTRANSFORMAT_12
);
PROCESS_ARGUMENT_FICHIER("LISTE_BLEUE="
,fichier_LISTE_BLEUE
,liste_initiale_des_BLEUE
,BLEUE_IMPLICITE
,lTRANSFORMAT_12
);
GET_ARGUMENT_C("paletteA=""palette=""pA=""p=",nom_paletteA);
GET_ARGUMENT_L("niveaux_denormalises=""ndn=",les_niveaux_sont_denormalises);
GET_ARGUMENT_N("niveaux_normalises=""nn=",les_niveaux_sont_denormalises);
/* Cette option fut introduite le 20131204100042... */
PROCESS_ARGUMENT_FICHIER("LISTE_NIVEAU="
,fichier_LISTE_NIVEAU
,liste_initiale_des_NIVEAU
,NIVEAU_IMPLICITE
,lTRANSFORMAT_12
);
PROCESS_ARGUMENTS_DE_VISUALISATION;
PROCESS_ARGUMENTS_DE_VISUALISATION_DES_AXES_DE_COORDONNEES;
GET_ARGUMENT_I("n=""iterations=",nombre_d_iterations);
GET_ARGUMENT_L("gx=""gX=""cx=""cX=",generer_la_coordonnee_X);
GET_ARGUMENT_F("c1x=""c1X=",coefficient_1_X);
GET_ARGUMENT_F("c2x=""c2X=",coefficient_2_X);
GET_ARGUMENT_F("c3x=""c3X=",coefficient_3_X);
GET_ARGUMENT_F("c4x=""c4X=",coefficient_4_X);
GET_ARGUMENT_F("c5x=""c5X=",coefficient_5_X);
GET_ARGUMENT_L("gy=""gY=""cy=""cY=",generer_la_coordonnee_Y);
GET_ARGUMENT_F("c1y=""c1Y=",coefficient_1_Y);
GET_ARGUMENT_F("c2y=""c2Y=",coefficient_2_Y);
GET_ARGUMENT_F("c3y=""c3Y=",coefficient_3_Y);
GET_ARGUMENT_F("c4y=""c4Y=",coefficient_4_Y);
GET_ARGUMENT_F("c5y=""c5Y=",coefficient_5_Y);
GET_ARGUMENT_L("gz=""gZ=""cz=""cZ=",generer_la_coordonnee_Z);
GET_ARGUMENT_F("c1z=""c1Z=",coefficient_1_Z);
GET_ARGUMENT_F("c2z=""c2Z=",coefficient_2_Z);
GET_ARGUMENT_F("c3z=""c3Z=",coefficient_3_Z);
GET_ARGUMENT_F("c4z=""c4Z=",coefficient_4_Z);
GET_ARGUMENT_F("c5z=""c5Z=",coefficient_5_Z);
GET_ARGUMENT_F("dt=""dct=",dct);
GET_ARGUMENT_L("tore=",visualiser_sur_un_tore);
GET_ARGUMENT_F("gR=",facteur_du_rayon_gR);
GET_ARGUMENT_F("pR=",facteur_du_rayon_pR);
)
);
#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
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(taux_de_croissance,sTAUX_DE_CROISSANCE(numero_de_la_periode_courante));
/* Calcul de la valeur initiale du nombre complexe 'w'. */
EGAL(X1n,sVALEUR_INITIALE(numero_de_la_periode_courante));
EGAL(X2n,sVALEUR_INITIALE(numero_de_la_periode_courante));
EGAL(X3n,sVALEUR_INITIALE(numero_de_la_periode_courante));
EGAL(X4n,sVALEUR_INITIALE(numero_de_la_periode_courante));
EGAL(X5n,sVALEUR_INITIALE(numero_de_la_periode_courante));
/* Initialisation du processus. */
EGAL(coordonnee_X,sVALEUR_INITIALE(numero_de_la_periode_courante));
EGAL(coordonnee_Y,sVALEUR_INITIALE(numero_de_la_periode_courante));
EGAL(coordonnee_Z,sVALEUR_INITIALE(numero_de_la_periode_courante));
/* Au cas ou une ou plusieurs variables ne seraient pas generees... */
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. */
#include xrv/particule.51.I"
/* Gestion des fausses couleurs via 'nom_paletteA' apres que 'nombre_d_iterations' */
/* ait ete defini... */
vTRANSFORMAT_31(dct,sPAS_DE_TEMPS_dct,numero_de_la_periode_courante,fichier_PAS_DE_TEMPS_dct);
/* Calcul du pas de temps lorsqu'il est variable. */
Komp(numero_de_l_iteration_courante,nombre_d_iterations)
Bblock
DEFV(Float,INIT(cx_avant,cx));
DEFV(Float,INIT(cy_avant,cy));
DEFV(Float,INIT(cz_avant,cz));
/* Sauvegarde des coordonnees {cx,cy,cz} avant l'iteration. */
USs_GooF(BLOC(
Bblock
EGAL(X1n_1,X1n);
ITERATION_DE_VERHULST_01(X1n,X1n_1,taux_de_croissance);
/* Iteration 1. */
EGAL(X2n_1,X2n);
ITERATION_DE_VERHULST_02(X2n,X2n_1,taux_de_croissance);
/* Iteration 2. */
EGAL(X3n_1,X3n);
ITERATION_DE_VERHULST_03(X3n,X3n_1,taux_de_croissance);
/* Iteration 3. */
EGAL(X4n_1,X4n);
ITERATION_DE_VERHULST_04(X4n,X4n_1,taux_de_croissance);
/* Iteration 4. */
EGAL(X5n_1,X5n);
ITERATION_DE_VERHULST_05(X5n,X5n_1,taux_de_croissance);
/* Iteration 5. */
Eblock
)
);
/* Procedure introduite le 20080106100652... */
/* */
/* On notera que le mode 'GooF' n'est pas applique a certains operateurs et par exemple */
/* a 'EXP2(...)' ; cela vient evidemment de l'ordre des traitements qui sont faits (ici, */
/* 'EXP2(...)' est defini avant le 'USs_GooF(...)' qui precede). */
Test(IL_FAUT(generer_la_coordonnee_X))
Bblock
EGAL(coordonnee_X,COORDONNEE_X);
Eblock
ATes
Bblock
Eblock
ETes
Test(IL_FAUT(generer_la_coordonnee_Y))
Bblock
EGAL(coordonnee_Y,COORDONNEE_Y);
Eblock
ATes
Bblock
Eblock
ETes
Test(IL_FAUT(generer_la_coordonnee_Z))
Bblock
EGAL(coordonnee_Z,COORDONNEE_Z);
Eblock
ATes
Bblock
Eblock
ETes
EGAL(cx,Fx(cx,cy,cz,temps_courant));
EGAL(cy,Fy(cx,cy,cz,temps_courant));
EGAL(cz,Fz(cx,cy,cz,temps_courant));
/* Calcul des coordonnees. */
Test(IL_FAUT(colorier_arbitrairement_les_points))
Bblock
EGAL(dcx,ACCES_LISTE(liste_initiale_des_ROUGE,numero_de_l_iteration_courante));
EGAL(dcy,ACCES_LISTE(liste_initiale_des_VERTE,numero_de_l_iteration_courante));
EGAL(dcz,ACCES_LISTE(liste_initiale_des_BLEUE,numero_de_l_iteration_courante));
/* Recuperation des couleurs (dcx,dcy,dcz) au point courant. */
Eblock
ATes
Bblock
Test(IFEQ(numero_de_l_iteration_courante,PREMIERE_ITERATION_D_UN_Komp))
Bblock
EGAL(dcx,FZERO);
EGAL(dcy,FZERO);
EGAL(dcz,FZERO);
/* Initialisation des differentielles pour la premiere iteration (on notera que 'FZERO' est */
/* la valeur la plus "logique"...). */
Eblock
ATes
Bblock
EGAL(dcx,SOUS(cx,cx_avant));
EGAL(dcy,SOUS(cy,cy_avant));
EGAL(dcz,SOUS(cz,cz_avant));
/* Calcul des differentielles pour les iterations suivantes... */
Eblock
ETes
Eblock
ETes
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
Test(IL_FAUT(visualiser_sur_un_tore))
Bblock
CALS(memorisation_1_point_07(X_DU_TORE(cx,cy,cz,temps_courant)
,Y_DU_TORE(cx,cy,cz,temps_courant)
,Z_DU_TORE(cx,cy,cz,temps_courant)
,dcx
,dcy
,dcz
,numero_de_l_iteration_courante
)
);
/* Memorisation de l'iteration courante sur un tore.... */
Eblock
ATes
Bblock
CALS(memorisation_1_point_07(ADD2(cx
,NEGA(NEUT(DIVI(ADD2(taux_de_croissance,I)
,GRO2(taux_de_croissance)
)
)
)
)
,ADD2(cy
,NEGA(NEUT(DIVI(ADD2(taux_de_croissance,I)
,GRO2(taux_de_croissance)
)
)
)
)
,ADD2(cz
,NEGA(NEUT(DIVI(ADD2(taux_de_croissance,I)
,GRO2(taux_de_croissance)
)
)
)
)
,dcx
,dcy
,dcz
,numero_de_l_iteration_courante
)
);
/* Memorisation de l'iteration courante dans l'espace "normal". Les translations qui sont */
/* appliquees aux coordonees {x,y} proviennent de l'etude de la parabole : */
/* */
/* 2 */
/* y = (R+1).x - R.x */
/* */
/* dont le sommet a pour coordonnees : */
/* */
/* R+1 */
/* x = ----- */
/* S 2.R */
/* */
/* et : */
/* */
/* 2 */
/* (R+1) */
/* y = -------- */
/* S 4.R */
/* */
/* Les translations sont egales a 'X(S)'... */
Eblock
ETes
Eblock
ATes
Bblock
Eblock
ETes
INCREMENTATION_DE_L_HORLOGE(dct);
/* Simulation du temps de la simulation... */
Eblock
EKom
#include xrk/attractor.1A.I"
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... */
Eblock
EKom
EDITION_DES_EXTREMA_DES_COORDONNEES_ET_DES_DERIVEES;
/* Edition facultative des extrema des coordonnees et des derivees. */
RETU_Commande;
Eblock
ECommande