/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R E C U I T   S I M U L E   D E V A N T   C O N D U I R E   A   U N   R E S E A U   O R T H O N O R M E                    */
/*        D A N S   L ' E S P A C E   B I D I M E N S I O N N E L  :                                                                 */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                                                                                    .........                                      */
/*                                         .....--------::::::::::::::::ooooo.ooooOOOOOoo::--:..                                     */
/*                                         .-              .--              -:.              -..                                     */
/*                                         .-              .--              -o.              -..                                     */
/*                                         .-              .--              -:.              ..                                      */
/*                                         .-               .-              -:.              -.                                      */
/*                                         .-               ..              .:.              -.                                      */
/*                                         ..               ..              .:.              -..                                     */
/*                                         ..               ..              .:.              ...                                     */
/*                                         .........................------:::::::::----.........                                     */
/*                                         .-               ..              .:.              ...                                     */
/*                                         .-               .-              .:.              ...                                     */
/*                                         .-               .-              .:.              ...                                     */
/*                                         .-.              .-              .o.              ...                                     */
/*                                         .-.              .-               :.              ...                                     */
/*                                         .-.              .-               :.              ...                                     */
/*                                         .-.              .-               -.              ...                                     */
/*                                         .-................-----::::::::ooo-.:::-.............                                     */
/*                                         .-................-.............. -.              ...                                     */
/*                                         .-.              .-               -.              ...                                     */
/*                                         .-.              .-               -.              ...                                     */
/*                                         .-.              ..               -.              ...                                     */
/*                                         .-               ..               -.              ...                                     */
/*                                         .-               ..               -.               ..                                     */
/*                                         .-               ..               -.               ..                                     */
/*                                         .-               ..               ..               ..                                     */
/*                                         .....................................................                                     */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Nota important :                                                                                                           */
/*                                                                                                                                   */
/*                    A partir d'une solution calculee a                                                                             */
/*                  l'aide de la methode ci-dessous, toute                                                                           */
/*                  configuration obtenue par rotation de                                                                            */
/*                  celle-ci (dans le plan, comme dans                                                                               */
/*                  l'espace) est aussi solution. On pourra                                                                          */
/*                  utiliser cette propriete pour obtenir                                                                            */
/*                  une solution souhaitee mais non produite                                                                         */
/*                  par le programme ; voir le probleme de la                                                                        */
/*                  carte de France a ce propos :                                                                                    */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                                                                14=Dunkerque                                                       */
/*                                                                                                                                   */
/*                                                                     *.                                                            */
/*                                                                 ........                                                          */
/*                                                              ....    .......                                                      */
/*                                                          ....         ..   ....                                                   */
/*                                     13=Cherbourg     ....              ..     ....                                                */
/*                                                  * ....        9=Paris  ..       ....                                             */
/*                                               .. ..    ..... .           ...         ....                                         */
/*                                           ....               . .... *     ...          ....                                       */
/*                                        ....                      .......   ...             .* 15=Strasbourg                       */
/*                             12=Brest *...                      ..  .......  ...           ...                                     */
/*                                         ....               ....    ..    ...  ..          ..                                      */
/*                                            ....         ...        ..       .. ..        ...                                      */
/*                                               ....  ....           .          *...........* 11=Mulhouse                           */
/*                                                  *..              ... 10=Dijon  ..        .                                       */
/*                                         8=Nantes  ...             ...          ...       ..                                       */
/*                                                    ..             ..           ...       ..                                       */
/*                                                     .             ..           ..        ..                                       */
/*                                                     ..            .    6=Lyon  *. . ......* 7=Chamonix                            */
/*                                                     ..           ...          .....      ...                                      */
/*                                                      ..          ...        ......        ..                                      */
/*                                                      ...         ..       ...   ..         .                                      */
/*                                           4=Bordeaux  *.         ..     ..      ..         ..                                     */
/*                                                      .. ..       .    ...        .         ...                                    */
/*                                                     ..    ....  ... ...          ..         ..                                    */
/*                                                    ..       .........            ...        ..* 3=Menton                          */
/*                                                   ..            *. 5=Toulouse     ..   .....                                      */
/*                                                  *...... .        ....           ...*..                                           */
/*                                        0=Hendaye         ......... .....  ........                                                */
/*                                                                    . *......        2=Marseille                                   */
/*                                                                                                                                   */
/*                                                                       1=Perpignan                                                 */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                                                  (d'apres xivPdf 2 1 / 021218_021345)                                             */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xrk/recuit_2D.11$K' :                                                                                          */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 1993??????????).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I N T E R F A C E   ' listG '  :                                                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        :Debut_listG:                                                                                                              */
/*        :Fin_listG:                                                                                                                */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D I R E C T I V E S   S P E C I F I Q U E S   D E   C O M P I L A T I O N  :                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
@define   PRAGMA_CL_____MODULE_NON_OPTIMISABLE

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F I C H I E R S   D ' I N C L U D E S  :                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  INCLUDES_BASE

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N S   D E   B A S E   E T   U N I V E R S E L L E S  :                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xrk/attractor.11.I"
#include  xrv/particule.41.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.0)
#define   hYmin_ESPACE                                                                                                                  \
                    PARE(-1.0)
#define   hZmin_ESPACE                                                                                                                  \
                    PARE(-1.0)
                                        /* Definition du "coin" inferieur-gauche-arriere de l'espace physique.                       */

#define   hXmax_ESPACE                                                                                                                  \
                    PARE(1.0)
#define   hYmax_ESPACE                                                                                                                  \
                    PARE(1.0)
#define   hZmax_ESPACE                                                                                                                  \
                    PARE(1.0)
                                        /* 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(0.0)
#define   dYmin_ESPACE                                                                                                                  \
                    PARE(0.0)
#define   dZmin_ESPACE                                                                                                                  \
                    PARE(0.0)
                                        /* Definition des minima des differentielles {dx,dy,dz}.                                     */
#define   dXmax_ESPACE                                                                                                                  \
                    PARE(1.0)
#define   dYmax_ESPACE                                                                                                                  \
                    PARE(1.0)
#define   dZmax_ESPACE                                                                                                                  \
                    PARE(1.0)
                                        /* 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 U   R E S E A U   O R T H O N O R M E   A U Q U E L                                                */
/*        D O I T   A B O U T I R   L E   P R O C E S S U S  :                                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xrk/recuit_2D.11.I"

#define   NOMBRE_DE_POINTS_DU_RESEAU                                                                                                    \
                    EXP2(dimension_lineaire_du_reseau)                                                                                  \
                                        /* Nombre de points contenus dans le reseau...                                               */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D U   P R O C E S S U S   A L E A T O I R E  :                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xrk/recuit_2D.13.I"

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M A T E R I A L I S A T I O N   D E S   C O N N E X I O N S  :                                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xrk/recuit_2D.14.I"

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P R O C E D U R E S   D ' A C C E S   A U X   D I F F E R E N T E S   L I S T E S  :                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xrk/recuit_2D.15.I"

#define   DIMENSION_LINEAIRE_REELLE_DU_RESEAU_DANS_L_ESPACE_PHYSIQUE                                                                    \
                    MIN2(SOUS(ASD2(espace_physique,extremite,x),ASD2(espace_physique,origine,x))                                        \
                        ,SOUS(ASD2(espace_physique,extremite,y),ASD2(espace_physique,origine,y))                                        \
                         )                                                                                                              \
                                        /* Etant donne que l'on souhaite un reseau orthonorme, il est imperatif que les dimensions   */ \
                                        /* reelles horizontales et verticales soient les memes, ce que l'on calcule ici...           */

#define   CONVERSION_IJ_INDICE_HORIZONTAL(ij)                                                                                           \
                    REST(SOUS(ij,PREMIER_POINT_DU_RESEAU),dimension_lineaire_du_reseau)
#define   CONVERSION_IJ_X(ij)                                                                                                           \
                    ADD2(Xcentre_ESPACE                                                                                                 \
                        ,SOUS(SCAL(CONVERSION_IJ_INDICE_HORIZONTAL(ij)                                                                  \
                                  ,TRMU(dimension_lineaire_du_reseau)                                                                   \
                                  ,DIMENSION_LINEAIRE_REELLE_DU_RESEAU_DANS_L_ESPACE_PHYSIQUE                                           \
                                   )                                                                                                    \
                             ,MOIT(DIMENSION_LINEAIRE_REELLE_DU_RESEAU_DANS_L_ESPACE_PHYSIQUE)                                          \
                              )                                                                                                         \
                         )
                                        /* Conversion d'un numero de point 'pointI' en la coordonnee 'X' attendue pour ce point a    */
                                        /* a la fin du processus de recuit simule...                                                 */
#define   CONVERSION_IJ_INDICE_VERTICAL(ij)                                                                                             \
                    DIVI(SOUS(ij,PREMIER_POINT_DU_RESEAU),dimension_lineaire_du_reseau)
#define   CONVERSION_IJ_Y(ij)                                                                                                           \
                    ADD2(Ycentre_ESPACE                                                                                                 \
                        ,SOUS(SCAL(CONVERSION_IJ_INDICE_VERTICAL(ij)                                                                    \
                                  ,TRMU(dimension_lineaire_du_reseau)                                                                   \
                                  ,DIMENSION_LINEAIRE_REELLE_DU_RESEAU_DANS_L_ESPACE_PHYSIQUE                                           \
                                   )                                                                                                    \
                             ,MOIT(DIMENSION_LINEAIRE_REELLE_DU_RESEAU_DANS_L_ESPACE_PHYSIQUE)                                          \
                              )                                                                                                         \
                         )
                                        /* Conversion d'un numero de point 'pointJ' en la coordonnee 'Y' attendue pour ce point a    */
                                        /* a la fin du processus de recuit simule...                                                 */
#define   CONVERSION_Z                                                                                                                  \
                    Zcentre_ESPACE                                                                                                      \
                                        /* Coordonnee 'Z' ; on notera que celle-ci ne change jamais, mais qu'une extension           */ \
                                        /* tridimensionnelle du processus est envisageable...                                        */

#define   MODIFIER_LES_POINTS                                                                                                           \
                    FAUX
#define   CX0                                                                                                                           \
                    Xcentre_ESPACE
#define   CY0                                                                                                                           \
                    Ycentre_ESPACE
                                        /* Afin de ne pas modifier l'initialisation implicite a l'aide du reseau carre...            */
#define   MODIFICATION_POINT(numero_du_point,modifier_le_point,cx,cy)                                                                   \
                    Ca1e(numero_du_point)                                                                                               \
                         Bblock                                                                                                         \
                         Test(IL_FAUT(modifier_le_point))                                                                               \
                              Bblock                                                                                                    \
                              INITIALISATION_POINT_3D(ACCES_CIBLE(point),cx,cy,CONVERSION_Z);                                           \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Eblock                                                                                                         \
                    ECa1                                                                                                                \
                                        /* Procedure de modification de l'initialisation implicite a l'aide du reseau carre.         */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M E T H O D E   D E S   M O I N D R E S   C A R R E S  :                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xrk/recuit_2D.1C.I"

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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  :                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xrk/attractor.14.I"

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F O N C T I O N   D E   M E M O R I S A T I O N   D U   P O I N T   C O U R A N T  :                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xrk/recuit_2D.16.I"

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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   ZOOM_IMPLICITE                                                                                                                \
                    GRO7(FRA10(FU))                                                                                                     \
                                        /* Afin d'etre sur de voir toutes les particules generees...                                 */

#include  xrk/attractor.17.I"

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D U   P R O C E S S U S   I T E R A T I F  :                                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xrk/recuit_2D.12.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"

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P O U R   D E S   R A I S O N S   D E   C O M P A T I B I L I T E  :                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xrk/integr.1B.vv.I"

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R E C U I T   S I M U L E   D E V A N T   C O N D U I R E   A   U N   R E S E A U   O R T H O N O R M E                    */
/*        D A N S   L ' E S P A C E   B I D I M E N S I O N N E L  :                                                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Logical,INIT(modifier_le_point00,MODIFIER_LES_POINTS));
     DEFV(Float,INIT(cx00,CX0));
     DEFV(Float,INIT(cy00,CY0));
                                        /* Pour modifier l'initialisation du point '00'...                                           */
     DEFV(Logical,INIT(modifier_le_point01,MODIFIER_LES_POINTS));
     DEFV(Float,INIT(cx01,CX0));
     DEFV(Float,INIT(cy01,CY0));
                                        /* Pour modifier l'initialisation du point '01'...                                           */
     DEFV(Logical,INIT(modifier_le_point02,MODIFIER_LES_POINTS));
     DEFV(Float,INIT(cx02,CX0));
     DEFV(Float,INIT(cy02,CY0));
                                        /* Pour modifier l'initialisation du point '02'...                                           */
     DEFV(Logical,INIT(modifier_le_point03,MODIFIER_LES_POINTS));
     DEFV(Float,INIT(cx03,CX0));
     DEFV(Float,INIT(cy03,CY0));
                                        /* Pour modifier l'initialisation du point '03'...                                           */
     DEFV(Logical,INIT(modifier_le_point04,MODIFIER_LES_POINTS));
     DEFV(Float,INIT(cx04,CX0));
     DEFV(Float,INIT(cy04,CY0));
                                        /* Pour modifier l'initialisation du point '04'...                                           */
     DEFV(Logical,INIT(modifier_le_point05,MODIFIER_LES_POINTS));
     DEFV(Float,INIT(cx05,CX0));
     DEFV(Float,INIT(cy05,CY0));
                                        /* Pour modifier l'initialisation du point '05'...                                           */
     DEFV(Logical,INIT(modifier_le_point06,MODIFIER_LES_POINTS));
     DEFV(Float,INIT(cx06,CX0));
     DEFV(Float,INIT(cy06,CY0));
                                        /* Pour modifier l'initialisation du point '06'...                                           */
     DEFV(Logical,INIT(modifier_le_point07,MODIFIER_LES_POINTS));
     DEFV(Float,INIT(cx07,CX0));
     DEFV(Float,INIT(cy07,CY0));
                                        /* Pour modifier l'initialisation du point '07'...                                           */
     DEFV(Logical,INIT(modifier_le_point08,MODIFIER_LES_POINTS));
     DEFV(Float,INIT(cx08,CX0));
     DEFV(Float,INIT(cy08,CY0));
                                        /* Pour modifier l'initialisation du point '08'...                                           */
     DEFV(Logical,INIT(modifier_le_point09,MODIFIER_LES_POINTS));
     DEFV(Float,INIT(cx09,CX0));
     DEFV(Float,INIT(cy09,CY0));
                                        /* Pour modifier l'initialisation du point '09'...                                           */
     DEFV(Logical,INIT(modifier_le_point10,MODIFIER_LES_POINTS));
     DEFV(Float,INIT(cx10,CX0));
     DEFV(Float,INIT(cy10,CY0));
                                        /* Pour modifier l'initialisation du point '10'...                                           */
     DEFV(Logical,INIT(modifier_le_point11,MODIFIER_LES_POINTS));
     DEFV(Float,INIT(cx11,CX0));
     DEFV(Float,INIT(cy11,CY0));
                                        /* Pour modifier l'initialisation du point '11'...                                           */
     DEFV(Logical,INIT(modifier_le_point12,MODIFIER_LES_POINTS));
     DEFV(Float,INIT(cx12,CX0));
     DEFV(Float,INIT(cy12,CY0));
                                        /* Pour modifier l'initialisation du point '12'...                                           */
     DEFV(Logical,INIT(modifier_le_point13,MODIFIER_LES_POINTS));
     DEFV(Float,INIT(cx13,CX0));
     DEFV(Float,INIT(cy13,CY0));
                                        /* Pour modifier l'initialisation du point '13'...                                           */
     DEFV(Logical,INIT(modifier_le_point14,MODIFIER_LES_POINTS));
     DEFV(Float,INIT(cx14,CX0));
     DEFV(Float,INIT(cy14,CY0));
                                        /* Pour modifier l'initialisation du point '14'...                                           */
     DEFV(Logical,INIT(modifier_le_point15,MODIFIER_LES_POINTS));
     DEFV(Float,INIT(cx15,CX0));
     DEFV(Float,INIT(cy15,CY0));
                                        /* Pour modifier l'initialisation du point '15'...                                           */
     /*..............................................................................................................................*/
     INITIALISATIONS_GENERALES;
                                        /* Initialisations generales faites au tout debut...                                         */

     iTRANSFORMAT_31(liste_VARIABLE_essais,VARIABLE_essais_IMPLICITE);
                                        /* Initialisation de la valeur initiale du nombre d'essais par image.                        */

#include  xrv/champs_5.1A.I"

     GET_ARGUMENTSv(nombre_d_arguments
                   ,BLOC(PROCESS_ARGUMENTS_GEOMETRIQUES;

                         PROCESS_ARGUMENT_FICHIER("VARIABLE_essais="
                                                 ,fichier_VARIABLE_essais
                                                 ,liste_VARIABLE_essais
                                                 ,VARIABLE_essais_IMPLICITE
                                                 ,gTRANSFORMAT_31
                                                  );

                         PROCESS_ARGUMENTS_DE_VISUALISATION;

                         GET_ARGUMENT_L("temperature=",utiliser_une_temperature);
                         GET_ARGUMENT_L("chaque_essai=",changer_la_temperature_a_chaque_essai);
                         GET_ARGUMENT_F("K=",constante_K_de_temperature);
                         GET_ARGUMENT_F("t0=",temperature_initiale);
                         GET_ARGUMENT_F("tf=",temperature_finale);

                         GET_ARGUMENT_I("dimension=",dimension_lineaire_du_reseau);
                         GET_ARGUMENT_I("essais=",nombre_d_essais_par_image);

                         GET_ARGUMENT_L("premier=",bloquer_le_premier_point_du_reseau);
                         GET_ARGUMENT_L("dernier=",bloquer_le_dernier_point_du_reseau);

                         GET_ARGUMENT_F("amplitudeD=",amplitude_maximale_du_deplacement_aleatoire_des_points_au_depart);
                         GET_ARGUMENT_F("amplitudeA=",amplitude_maximale_du_deplacement_aleatoire_des_points_a_l_arrivee);

                         GET_ARGUMENT_I("graine=""g=",graine_du_generateur_d_evenements);
                         GET_ARGUMENT_L("affiner_rdn=",rdnIFnD_____affiner_la_generation);
                         GET_ARGUMENT_L("iterer_rdn=",rdnIFnD_____iterer_la_generation);

                         GET_ARGUMENT_F("grossissement=",grossissement_du_rayon_de_visualisation_des_points);

                         GET_ARGUMENT_L("connexions=",materialiser_les_connexions);
                         GET_ARGUMENT_F("ponderation=",ponderation_des_connexions_par_la_longueur);
                         GET_ARGUMENT_I("points=",nombre_absolu_de_points_sur_une_chaine_de_connexion);
                         GET_ARGUMENT_F("facteur=",facteur_de_la_longueur);

                         GET_ARGUMENT_L("p00=",modifier_le_point00);
                         GET_ARGUMENT_F("x00=",cx00);
                         GET_ARGUMENT_F("y00=",cy00);

                         GET_ARGUMENT_L("p01=",modifier_le_point01);
                         GET_ARGUMENT_F("x01=",cx01);
                         GET_ARGUMENT_F("y01=",cy01);

                         GET_ARGUMENT_L("p02=",modifier_le_point02);
                         GET_ARGUMENT_F("x02=",cx02);
                         GET_ARGUMENT_F("y02=",cy02);

                         GET_ARGUMENT_L("p03=",modifier_le_point03);
                         GET_ARGUMENT_F("x03=",cx03);
                         GET_ARGUMENT_F("y03=",cy03);

                         GET_ARGUMENT_L("p04=",modifier_le_point04);
                         GET_ARGUMENT_F("x04=",cx04);
                         GET_ARGUMENT_F("y04=",cy04);

                         GET_ARGUMENT_L("p05=",modifier_le_point05);
                         GET_ARGUMENT_F("x05=",cx05);
                         GET_ARGUMENT_F("y05=",cy05);

                         GET_ARGUMENT_L("p06=",modifier_le_point06);
                         GET_ARGUMENT_F("x06=",cx06);
                         GET_ARGUMENT_F("y06=",cy06);

                         GET_ARGUMENT_L("p07=",modifier_le_point07);
                         GET_ARGUMENT_F("x07=",cx07);
                         GET_ARGUMENT_F("y07=",cy07);

                         GET_ARGUMENT_L("p08=",modifier_le_point08);
                         GET_ARGUMENT_F("x08=",cx08);
                         GET_ARGUMENT_F("y08=",cy08);

                         GET_ARGUMENT_L("p09=",modifier_le_point09);
                         GET_ARGUMENT_F("x09=",cx09);
                         GET_ARGUMENT_F("y09=",cy09);

                         GET_ARGUMENT_L("p10=",modifier_le_point10);
                         GET_ARGUMENT_F("x10=",cx10);
                         GET_ARGUMENT_F("y10=",cy10);

                         GET_ARGUMENT_L("p11=",modifier_le_point11);
                         GET_ARGUMENT_F("x11=",cx11);
                         GET_ARGUMENT_F("y11=",cy11);

                         GET_ARGUMENT_L("p12=",modifier_le_point12);
                         GET_ARGUMENT_F("x12=",cx12);
                         GET_ARGUMENT_F("y12=",cy12);

                         GET_ARGUMENT_L("p13=",modifier_le_point13);
                         GET_ARGUMENT_F("x13=",cx13);
                         GET_ARGUMENT_F("y13=",cy13);

                         GET_ARGUMENT_L("p14=",modifier_le_point14);
                         GET_ARGUMENT_F("x14=",cx14);
                         GET_ARGUMENT_F("y14=",cy14);

                         GET_ARGUMENT_L("p15=",modifier_le_point15);
                         GET_ARGUMENT_F("x15=",cx15);
                         GET_ARGUMENT_F("y15=",cy15);
                         )
                    );

#include  xrv/champs_5.19.I"
                                        /* Pour eviter le message :                                                                  */
                                        /*                                                                                           */
                                        /*                  Static function is not referenced.                                       */
                                        /*                                                                                           */
                                        /* sur 'SYSTEME_ES9000_AIX_CC'...                                                            */

#include  xrk/recuit_2D.1F.I"
                                        /* Initialisations utiles a l'utilisation d'une temperature.                                 */

#include  xrk/attractor.19.I"
                                        /* Validations et definition de l'espace physique.                                           */

     begin_nouveau_block
          Bblock
#include  xrk/recuit_2D.1D.I"
                                        /* Allocation des diverses listes utiles...                                                  */

          DoIn(point,PREMIER_POINT_DU_RESEAU,DERNIER_POINT_DU_RESEAU,I)
               Bblock
               INITIALISATION_POINT_3D(ACCES_CIBLE(point),CONVERSION_IJ_X(point),CONVERSION_IJ_Y(point),CONVERSION_Z);
                                        /* Initialisation de la position "theorique" des points, c'est-a-dire celle qui est esperee  */
                                        /* a la fin du processus. Elles sont initialisees sur un reseau orthonorme. La configuration */
                                        /* attendue des points a la fin du processus est donc du type (en supposant que l'on         */
                                        /* utilise 4x4 points) :                                                                     */
                                        /*                                                                                           */
                                        /*                                                                                           */
                                        /*                 0         1         2         3                                           */
                                        /*                  + - - - - + - - - - + - - - - +                                          */
                                        /*                  |         |         |         |                                          */
                                        /*                  |         |         |         |                                          */
                                        /*                  |         |         |         |                                          */
                                        /*                 4|        5|        6|        7|                                          */
                                        /*                  + - - - - + - - - - + - - - - +                                          */
                                        /*                  |         |         |         |                                          */
                                        /*                  |         |         |         |                                          */
                                        /*                  |         |         |         |                                          */
                                        /*                 8|        9|       10|       11|                                          */
                                        /*                  + - - - - + - - - - + - - - - +                                          */
                                        /*                  |         |         |         |                                          */
                                        /*                  |         |         |         |                                          */
                                        /*                  |         |         |         |                                          */
                                        /*                12|       13|       14|       15|                                          */
                                        /*                  + - - - - + - - - - + - - - - +                                          */
                                        /*                                                                                           */
                                        /* Les points sont materialises par des croix "+", mais precisons bien qu'il s'agit la       */
                                        /* de leurs positions a la fin du processus, et non pas au debut, puisqu'a ce moment la      */
                                        /* elles sont aleatoires (sauf en ce qui concerne le premier et le dernier...).              */
               Eblock
          EDoI

          DoIn(pointI,PREMIER_POINT_DU_RESEAU,DERNIER_POINT_DU_RESEAU,I)
               Bblock
               DoIn(pointJ,PREMIER_POINT_DU_RESEAU,DERNIER_POINT_DU_RESEAU,I)
                    Bblock
                                        /* Initialisation relativement arbitraire de la matrice des connexions sur la 4-connexite,   */
                                        /* c'est-a-dire sur les plus proches voisins...                                              */
                    Test(IFOU(IFET(IFEQ(SOUA(CONVERSION_IJ_INDICE_HORIZONTAL(pointI),CONVERSION_IJ_INDICE_HORIZONTAL(pointJ)),UN)
                                  ,IFEQ(CONVERSION_IJ_INDICE_VERTICAL(pointI),CONVERSION_IJ_INDICE_VERTICAL(pointJ))
                                   )
                             ,IFET(IFEQ(CONVERSION_IJ_INDICE_HORIZONTAL(pointI),CONVERSION_IJ_INDICE_HORIZONTAL(pointJ))
                                  ,IFEQ(SOUA(CONVERSION_IJ_INDICE_VERTICAL(pointI),CONVERSION_IJ_INDICE_VERTICAL(pointJ)),UN)
                                   )
                              )
                         )
                         Bblock
                         EGAL(ACCES_CONNEXION(pointI,pointJ),VRAI);
                                        /* Lorsque les points 'pointI' et 'pointJ' sont plus proches voisins, ils sont 4-connectes.  */
                         Eblock
                    ATes
                         Bblock
                         EGAL(ACCES_CONNEXION(pointI,pointJ),FAUX);
                                        /* Cas ou les points 'pointI' et 'pointJ' ne sont pas 4-connectes...                         */
                         Eblock
                    ETes
                    Eblock
               EDoI
               Eblock
          EDoI

          DoIn(point,PREMIER_POINT_DU_RESEAU,DERNIER_POINT_DU_RESEAU,I)
                                        /* Nota : il est possible de modifier ici la liste "theorique" (par exemple en utilisant     */
                                        /* 'PROCESS_ARGUMENT_C(...)').                                                               */
               Bblock
               Choi(point)
                    Bblock
                    MODIFICATION_POINT(ADD2(PREMIER_POINT_DU_RESEAU,ZERO),modifier_le_point00,cx00,cy00);
                    MODIFICATION_POINT(ADD2(PREMIER_POINT_DU_RESEAU,UN),modifier_le_point01,cx01,cy01);
                    MODIFICATION_POINT(ADD2(PREMIER_POINT_DU_RESEAU,DEUX),modifier_le_point02,cx02,cy02);
                    MODIFICATION_POINT(ADD2(PREMIER_POINT_DU_RESEAU,TROIS),modifier_le_point03,cx03,cy03);
                    MODIFICATION_POINT(ADD2(PREMIER_POINT_DU_RESEAU,QUATRE),modifier_le_point04,cx04,cy04);
                    MODIFICATION_POINT(ADD2(PREMIER_POINT_DU_RESEAU,CINQ),modifier_le_point05,cx05,cy05);
                    MODIFICATION_POINT(ADD2(PREMIER_POINT_DU_RESEAU,SIX),modifier_le_point06,cx06,cy06);
                    MODIFICATION_POINT(ADD2(PREMIER_POINT_DU_RESEAU,SEPT),modifier_le_point07,cx07,cy07);
                    MODIFICATION_POINT(ADD2(PREMIER_POINT_DU_RESEAU,HUIT),modifier_le_point08,cx08,cy08);
                    MODIFICATION_POINT(ADD2(PREMIER_POINT_DU_RESEAU,NEUF),modifier_le_point09,cx09,cy09);
                    MODIFICATION_POINT(ADD2(PREMIER_POINT_DU_RESEAU,DIX),modifier_le_point10,cx10,cy10);
                    MODIFICATION_POINT(ADD2(PREMIER_POINT_DU_RESEAU,ONZE),modifier_le_point11,cx11,cy11);
                    MODIFICATION_POINT(ADD2(PREMIER_POINT_DU_RESEAU,DOUZE),modifier_le_point12,cx12,cy12);
                    MODIFICATION_POINT(ADD2(PREMIER_POINT_DU_RESEAU,TREIZE),modifier_le_point13,cx13,cy13);
                    MODIFICATION_POINT(ADD2(PREMIER_POINT_DU_RESEAU,QUATORZE),modifier_le_point14,cx14,cy14);
                    MODIFICATION_POINT(ADD2(PREMIER_POINT_DU_RESEAU,QUINZE),modifier_le_point15,cx15,cy15);
                    Defo
                         Bblock
                         Eblock
                    EDef
                    Eblock
               ECho
               Eblock
          EDoI

#include  xrk/recuit_2D.17.I"
                                        /* Calcul de la matrice des distances correspondant a la position "theorique" des points,    */
                                        /* c'est-a-dire celle qui est esperee a la fin du processus...                               */

                                        /* ATTENTION : le 1993123100, les sequences d'initialisation aleatoire des couleurs des      */
                                        /* points et d'initialisation aleatoire des coordonnees des points ont vu leur ordre         */
                                        /* s'inverser (le nouvel ordre est plus logique). Dans ces conditions, il n'est plus         */
                                        /* possible de recalculer exactement les sequences anterieures...                            */

          DoIn(point,PREMIER_POINT_DU_RESEAU,DERNIER_POINT_DU_RESEAU,I)
               Bblock
               CHoi(point)
                    Bblock
                    Test(IL_FAUT(bloquer_le_premier_point_du_reseau))
                         Bblock
                         CAse(PREMIER_POINT_DU_RESEAU)
                              Bblock
                              TRANSFERT_POINT_3D(ACCES_POINT(point),ACCES_CIBLE(point));
                                        /* Initialisation du premier point du reseau a l'origine de l'espace...                      */
                              Eblock
                         ECAs
                         Eblock
                    ATes
                         Bblock
                         Eblock
                    ETes
                    Test(IL_FAUT(bloquer_le_dernier_point_du_reseau))
                         Bblock
                         CAse(DERNIER_POINT_DU_RESEAU)
                              Bblock
                              TRANSFERT_POINT_3D(ACCES_POINT(point),ACCES_CIBLE(point));
                                        /* Initialisation du dernier point du reseau a l'extremite de l'espace...                    */
                              Eblock
                         ECAs
                         Eblock
                    ATes
                         Bblock
                         Eblock
                    ETes
                    DEfo
                         Bblock
                         GENERATION_D_UN_POINT(ACCES_POINT(point));
                         EGAL(ASD1(ACCES_POINT(point),z),CONVERSION_Z);
                                        /* Les autres points sont places aleatoirement dans le plan...                               */
                         Eblock
                    EDEf
                    Eblock
               ECHo
               Eblock
          EDoI

                                        /* ATTENTION : le 1993123100, les sequences d'initialisation aleatoire des couleurs des      */
                                        /* points et d'initialisation aleatoire des coordonnees des points ont vu leur ordre         */
                                        /* s'inverser (le nouvel ordre est plus logique). Dans ces conditions, il n'est plus         */
                                        /* possible de recalculer exactement les sequences anterieures...                            */

#include  xrk/recuit_2D.18.I"
                                        /* Choix aleatoire initial (afin de ne pas avoir de problemes de coherence temporel, mais    */
                                        /* aussi d'optimiser) de la couleur des points...                                            */

                                        /* ATTENTION : le 1993123100, les sequences d'initialisation aleatoire des couleurs des      */
                                        /* points et d'initialisation aleatoire des coordonnees des points ont vu leur ordre         */
                                        /* s'inverser (le nouvel ordre est plus logique). Dans ces conditions, il n'est plus         */
                                        /* possible de recalculer exactement les sequences anterieures...                            */

          Komp(numero_de_la_periode_courante_de_la_simulation,nombre_de_periodes_de_la_simulation)
               Bblock
               DEFV(Int,INIT(numero_des_points,UNDEF));
                                        /* A priori inutile mais reference dans 'memorisation_1_point_08(...)'.                      */
               DEFV(Int,INIT(numero_de_l_essai,UNDEF));
                                        /* Numero de l'essai courant...                                                              */

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

               vTRANSFORMAT_31(nombre_d_essais_par_image,sVARIABLE_essais,numero_de_la_periode_courante,fichier_VARIABLE_essais);
                                        /* Calcul du nombre d'essais par image.                                                      */

#include  xrk/recuit_2D.19.I"
                                        /* Memorisation des points courants et des chaines de connexite...                           */

#include  xrk/attractor.1A.I"

               PARALLELISME(BLOC(GENERATION_D_UNE_IMAGE_ET_PASSAGE_A_LA_SUIVANTE(BLOC(VIDE;));
                                        /* Generation de l'image courante...                                                         */
                                 )
                           ,BLOC(PASSAGE_A_L_IMAGE_SUIVANTE;)
                           ,numero_de_la_periode_courante
                            );

               Test(IFLT(numero_de_la_periode_courante_de_la_simulation,nombre_de_periodes_de_la_simulation))
                    Bblock
                                        /* Cas ou l'on n'est pas sur la derniere periode de la simulation :                          */
                    Komp(numero_de_l_essai,nombre_d_essais_par_image)
                         Bblock
#include  xrk/recuit_2D.1A.I"
                                        /* Memorisation des points avant le deplacement...                                           */

                         DoIn(point,PREMIER_POINT_DU_RESEAU,DERNIER_POINT_DU_RESEAU,I)
                              Bblock
                              Test(IFET(IFOU(IL_NE_FAUT_PAS(bloquer_le_premier_point_du_reseau)
                                            ,IFNE(point,PREMIER_POINT_DU_RESEAU)
                                             )
                                       ,IFOU(IL_NE_FAUT_PAS(bloquer_le_dernier_point_du_reseau)
                                            ,IFNE(point,DERNIER_POINT_DU_RESEAU)
                                             )
                                        )
                                   )
                                   Bblock
                                   DEFV(Float,INIT(perturbation_en_X,FLOT__UNDEF));
                                   DEFV(Float,INIT(perturbation_en_Y,FLOT__UNDEF));
                                   GENERATION_D_UNE_VALEUR(perturbation_en_X
                                                          ,NEGA(AMPLITUDE_ALEATOIRE_EN_X)
                                                          ,NEUT(AMPLITUDE_ALEATOIRE_EN_X)
                                                           );
                                   GENERATION_D_UNE_VALEUR(perturbation_en_Y
                                                          ,NEGA(AMPLITUDE_ALEATOIRE_EN_Y)
                                                          ,NEUT(AMPLITUDE_ALEATOIRE_EN_Y)
                                                           );
                                        /* Valeurs de perturbation des coordonnees 'X' et 'Y'...                                     */
                                   INCR(ASD1(ACCES_POINT(point),x),LIMITATION_DE_L_AMPLITUDE_ALEATOIRE(perturbation_en_X));
                                   INCR(ASD1(ACCES_POINT(point),y),LIMITATION_DE_L_AMPLITUDE_ALEATOIRE(perturbation_en_Y));
                                        /* Perturbation aleatoire des points a l'exception du premier et du dernier. On notera que   */
                                        /* cette perturbation est bidimensionnelle, mais que l'extension tridimensionnelle est       */
                                        /* triviale a condition d'ajouter une dimension au reseau...                                 */
                                   Eblock
                              ATes
                                   Bblock
                                   Eblock
                              ETes
                              Eblock
                         EDoI

#include  xrk/recuit_2D.1B.I"
                                        /* Evaluation de la nouvelle situation des points, et si necessaire, retour a l'etat         */
                                        /* anterieur...                                                                              */
                         Eblock
                    EKom
                    Eblock
               ATes
                    Bblock
                                        /* Cas ou l'on est sur la derniere periode de la simulation : il est inutile de calculer...  */
                    Eblock
               ETes
               Eblock
          EKom

#include  xrk/recuit_2D.1E.I"
                                        /* Liberation des differentes listes...                                                      */
          Eblock
     end_nouveau_block

     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.