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



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