/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M O D E L E   D E   I S I N G   T R I D I M E N S I O N N E L  :                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Cette commande applique le modele                                                                              */
/*                  d'Ising tridimensionnel a un album.                                                                              */
/*                  Il utilise deux graines 'gt' et 'gb'.                                                                            */
/*                  Un calcul portant sur 'N' iterations                                                                             */
/*                  (donnant donc un album 'A' comme Resultat),                                                                      */
/*                  peut etre poursuivi ulterieurement de facon                                                                      */
/*                  "coherente" en partant de 'A' a condition                                                                        */
/*                  d'utiliser alors comme graines les valeurs                                                                       */
/*                  'gt+N' et 'gb+N'.                                                                                                */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xci/Ising_3D.11$K' :                                                                                           */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 20001206151053).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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
#include  image_image_DI_ALBUM_EXT

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P A R A M E T R E S  :                                                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xci/sequence.01.I"
                                        /* ATTENTION, on definit ainsi le symbole 'DERNIERE_IMAGE' qui ne sert a rien ici, puisque   */
                                        /* c'est en effet 'Zmax' qui joue ce role...                                                 */

#define   EDITER_LES_PARAMETRES_DU_NOYAU_ET_SORTIR_IMMEDIATEMENT                                                                        \
                    FAUX                                                                                                                \
                                        /* Faut-il editer les parametres du noyau et sortir immediatement ('VRAI') ou exploiter      */ \
                                        /* le modele d'Ising tridimensionnel ('FAUX') ?                                              */
#define   LISTER_LE_CONTENU_DU_NOYAU                                                                                                    \
                    FAUX                                                                                                                \
                                        /* Faut-il lister le contenu du noyau ('VRAI') ou pas ('FAUX') ?                             */

#define   NOMBRE_D_ITERATIONS                                                                                                           \
                    UN                                                                                                                  \
                                        /* Nombre d'iterations.                                                                      */

#define   CONSTANTE_DE_BOLTZMANN_ISING_3D                                                                                               \
                    FU                                                                                                                  \
                                        /* Afin de simplifier l'utilisation et eviter les echelles physiques. Le 20001209082059,     */ \
                                        /* passage donc de 'CONSTANTE_DE_BOLTZMANN' a 'FU'.                                          */

#define   CONSTANTE_DE_COUPLAGE_J                                                                                                       \
                    FU                                                                                                                  \
                                        /* Constante de couplage 'J'.                                                                */
#define   TEMPERATURE_GLOBALE                                                                                                           \
                    GRO4(FRA10(FU))                                                                                                     \
                                        /* Temperature globale du modele. Le 20001211132036, passage de 'PARE(273.15)' a 'FU',       */
                                        /* puis a 'GRO4(FRA10(FU))' le 20001213104918.                                               */

#define   GRAINE_INITIALE_DE_SELECTION_DES_POINTS_A_TESTER                                                                              \
                    TROIS
#define   PROBABILITE_DE_SELECTION_DES_POINTS_A_TESTER                                                                                  \
                    FRA10(FU)
                                        /* Pour choisir les points a tester.                                                         */
                                        /*                                                                                           */
                                        /* Le 20050830122703, je note que la valeur par defaut (1/10) est certainement trop          */
                                        /* importante ('v $Dcourrier_in/20001208174958 N.est.trop.grand') ; une valeur plus          */
                                        /* faible (par exemple 1/100) semble mieux convenir, en particulier au voisinage de la       */
                                        /* temperature critique.                                                                     */
#define   GRAINE_INITIALE_DE_SELECTION_DES_POINTS_A_FAIRE_BASCULER                                                                      \
                    SEPT                                                                                                                \
                                        /* Pour determiner le basculement du spin des points a tester.                               */

#define   EDITER_LES_EVENTUELLES_GRAINES_INITIALES_SUIVANTES                                                                            \
                    FAUX                                                                                                                \
                                        /* Doit-on editer ('VRAI') ou pas ('FAUX') les graines a re-injecter dans le modele pour     */ \
                                        /* poursuivre de gacon coherente la generation ?                                             */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M A C R O S   U T I L E S  :                                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   INCREMENT_DES_GRAINES                                                                                                         \
                    I                                                                                                                   \
                                        /* Pour incrementer les graines du generateur aleatoire apres chaque iteration.              */

#define   TITRE_graine_initiale_de_selection_des_points_a_tester                                                                        \
                    "graineT="
#define   TITRE_graine_initiale_de_selection_des_points_a_faire_basculer                                                                \
                    "graineB="
                                        /* Quelques titres utiles.                                                                   */

#define   NOMBRE_DE_CHIFFRES_NECESSAIRES(dimension)                                                                                     \
                    ADD2(NOMBRE_DE_CHIFFRES_DECIMAUX(dimension),UN)                                                                     \
                                        /* Choix du nombre de chiffres necessaires pour editer une dimension. On notera qu'il y      */ \
                                        /* a deux 'TRPU(...)', le deuxieme etant destine au signe qui compte pour un caractere.      */ \
                                        /*                                                                                           */ \
                                        /* La procedure 'NOMBRE_DE_CHIFFRES_DECIMAUX(...)' fut introduite le 20051210184014. Les     */ \
                                        /* deux 'TRPU(...)' furent donc remplaces par 'un 'ADD2(...,UN)'...                          */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M O D E L E   D E   I S I N G   T R I D I M E N S I O N N E L  :                                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(CHAR,INIC(POINTERc(nom_imageR),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_imageA),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_imageN),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_imageT),NOM_UNDEF));
                                        /* Le 20081208110617 'NOM_UNDEF' a remplace 'NOM_PIPE' pour 'nom_imageT'...                  */

     DEFV(CHAR,INIC(POINTERc(nom_postfixe),NOM_UNDEF_VIDE));
                                        /* Nom d'un eventuel postfixe a placer derriere <nom_imageA><numero> (par exemple '$ROUGE'). */
     DEFV(Int,INIT(premiere_image,PREMIERE_IMAGE));
     DEFV(Int,INIT(premiere_imageN,PREMIERE_IMAGE));
     DEFV(Int,INIT(premiere_imageT,PREMIERE_IMAGE));
                                        /* Numero de la premiere image,                                                              */
     DEFV(Int,INIT(pas_des_images,PAS_DES_IMAGES));
     DEFV(Int,INIT(pas_des_imagesN,PAS_DES_IMAGES));
     DEFV(Int,INIT(pas_des_imagesT,PAS_DES_IMAGES));
                                        /* Pas de passage d'un numero d'image a une autre.                                           */
     DEFV(Int,INIT(nombre_de_chiffres,NOMBRE_DE_CHIFFRES));
     DEFV(Int,INIT(nombre_de_chiffresN,NOMBRE_DE_CHIFFRES));
     DEFV(Int,INIT(nombre_de_chiffresT,NOMBRE_DE_CHIFFRES));
                                        /* Nombre de chiffres codant le numero des images de la serie...                             */

     DEFV(Logical,INIT(editer_les_parametres_du_noyau_et_sortir_immediatement
                      ,EDITER_LES_PARAMETRES_DU_NOYAU_ET_SORTIR_IMMEDIATEMENT
                       )
          );
                                        /* Faut-il editer les parametres du noyau et sortir immediatement ('VRAI') ou exploiter      */
                                        /* le modele d'Ising tridimensionnel ('FAUX') ?                                              */
                                        /*                                                                                           */
                                        /* Le 20050830094615, '_ET_SORTIR_IMMEDIATEMENT' et '_et_sortir_immediatement' ont ete       */
                                        /* ajoutes en queue des deux symboles precedents afin d'ameliorer la comprehension...        */
     DEFV(Logical,INIT(lister_le_contenu_du_noyau,LISTER_LE_CONTENU_DU_NOYAU));
                                        /* Faut-il lister le contenu du noyau ('VRAI') ou pas ('FAUX') ?                             */

     DEFV(Positive,INIT(nombre_d_iterations,NOMBRE_D_ITERATIONS));
                                        /* Nombre d'iterations.                                                                      */

     DEFV(Float,INIT(constante_de_couplage_J,CONSTANTE_DE_COUPLAGE_J));
                                        /* Constante de couplage 'J'.                                                                */
     DEFV(Float,INIT(temperature_globale,TEMPERATURE_GLOBALE));
                                        /* Temperature globale du modele.                                                            */

     DEFV(Int,INIT(graine_initiale_de_selection_des_points_a_tester
                  ,GRAINE_INITIALE_DE_SELECTION_DES_POINTS_A_TESTER
                   )
          );
     DEFV(Float,INIT(probabilite_de_selection_des_points_a_tester,PROBABILITE_DE_SELECTION_DES_POINTS_A_TESTER));
                                        /* Pour choisir les points a tester.                                                         */
                                        /*                                                                                           */
                                        /* Le 20050830122703, je note que la valeur par defaut (1/10) est certainement trop          */
                                        /* importante ('v $Dcourrier_in/20001208174958 N.est.trop.grand') ; une valeur plus          */
                                        /* faible (par exemple 1/100) semble mieux convenir, en particulier au voisinage de la       */
                                        /* temperature critique ('v $xiirk/ISIN.A2').                                                */
     DEFV(Int,INIT(graine_initiale_de_selection_des_points_a_faire_basculer
                  ,GRAINE_INITIALE_DE_SELECTION_DES_POINTS_A_FAIRE_BASCULER
                   )
          );
                                        /* Pour determiner le basculement du spin des points a tester.                               */

     DEFV(Logical,INIT(editer_les_eventuelles_graines_initiales_suivantes,EDITER_LES_EVENTUELLES_GRAINES_INITIALES_SUIVANTES));
                                        /* Doit-on editer ('VRAI') ou pas ('FAUX') les graines a re-injecter dans le modele pour     */
                                        /* poursuivre de gacon coherente la generation ?                                             */
     /*..............................................................................................................................*/
     EGAL(Amodele_d_Ising_3D_____constante_de_Boltzmann,CONSTANTE_DE_BOLTZMANN_ISING_3D);

     GET_ARGUMENTSi(nombre_d_arguments
                   ,BLOC(GET_ARGUMENT_C("imageA=""A=",nom_imageA);
                         GET_ARGUMENT_C("imageN=""N=",nom_imageN);
                         GET_ARGUMENT_C("imageT=""T=",nom_imageT);
                         GET_ARGUMENT_C("imageR=""R=",nom_imageR);
                         GET_ARGUMENT_C("postfixe=",nom_postfixe);
                         GET_ARGUMENT_I("premiere=",premiere_image);
                         GET_ARGUMENT_I("premiereN=",premiere_imageN);
                         GET_ARGUMENT_I("premiereT=",premiere_imageT);
                         GET_ARGUMENTS2_I("pas=",pas_des_images,pasZ);
                                        /* L'argument 'pasZ' fut introduit le 20110119140523...                                      */
                         GET_ARGUMENT_I("pasN=",pas_des_imagesN);
                         GET_ARGUMENT_I("pasT=",pas_des_imagesT);
                         GET_ARGUMENT_I("chiffres=",nombre_de_chiffres);
                         GET_ARGUMENT_I("chiffresN=",nombre_de_chiffresN);
                         GET_ARGUMENT_I("chiffresT=",nombre_de_chiffresT);

                         GET_ARGUMENT_L("parametres_noyau=""editer_noyau=",editer_les_parametres_du_noyau_et_sortir_immediatement);
                         GET_ARGUMENT_L("lister_noyau=""contenu_noyau=",lister_le_contenu_du_noyau);

                         GET_ARGUMENT_L("periodiser_X=""periodX=",Amodele_d_Ising_3D_____periodiser_X);
                         GET_ARGUMENT_L("periodiser_Y=""periodY=",Amodele_d_Ising_3D_____periodiser_Y);
                         GET_ARGUMENT_L("periodiser_Z=""periodZ=",Amodele_d_Ising_3D_____periodiser_Z);
                         GET_ARGUMENT_L("symetriser_X=""symetrX=",Amodele_d_Ising_3D_____symetriser_X);
                         GET_ARGUMENT_L("symetriser_Y=""symetrY=",Amodele_d_Ising_3D_____symetriser_Y);
                         GET_ARGUMENT_L("symetriser_Z=""symetrZ=",Amodele_d_Ising_3D_____symetriser_Z);
                         GET_ARGUMENT_L("prolonger_X=""prolX=",Amodele_d_Ising_3D_____prolonger_X);
                         GET_ARGUMENT_L("prolonger_Y=""prolY=",Amodele_d_Ising_3D_____prolonger_Y);
                         GET_ARGUMENT_L("prolonger_Z=""prolZ=",Amodele_d_Ising_3D_____prolonger_Z);
                         GET_ARGUMENT_P("niveau_hors_album=""niveau=",Amodele_d_Ising_3D_____niveau_hors_album);

                         GET_ARGUMENT_F("spin_negatif=""sn=",Amodele_d_Ising_3D_____spin_negatif);
                         GET_ARGUMENT_F("spin_positif=""sp=",Amodele_d_Ising_3D_____spin_positif);
                                        /* Introduit le 20050826113623 ('v $xiii/di_image$DEF 20050825111821')...                    */

                         GET_ARGUMENT_I("ni=""iterations=",nombre_d_iterations);
                                        /* Le 20050623142257, "n=" et "N=" ont ete remplaces par "ni=" (double definition...).       */
                         GET_ARGUMENT_F("k=""K=""Boltzmann=""B=",Amodele_d_Ising_3D_____constante_de_Boltzmann);
                         GET_ARGUMENT_F("temperature=""t=",temperature_globale);
                                        /* Le 20050623142257, "T=" a ete supprime (double definition...).                            */
                         GET_ARGUMENT_F("facteur=""f=",Amodele_d_Ising_3D_____facteur_de_la_variation_d_energie);
                         GET_ARGUMENT_F("J=""C=",constante_de_couplage_J);
                                        /* Le 20050831113532, "E=" a ete remplace par "C=", le symbole 'energie_positive_J'          */
                                        /* ayant ete remplace par 'constante_de_couplage_J' (plus logique...).                       */

                         GET_ARGUMENT_I(TITRE_graine_initiale_de_selection_des_points_a_tester"gt="
                                       ,graine_initiale_de_selection_des_points_a_tester
                                        );
                         GET_ARGUMENT_F("probabilite=""p=",probabilite_de_selection_des_points_a_tester);
                         GET_ARGUMENT_I(TITRE_graine_initiale_de_selection_des_points_a_faire_basculer"gb="
                                       ,graine_initiale_de_selection_des_points_a_faire_basculer
                                        );
                         GET_ARGUMENT_L("affiner_rdn=",rdnIFnD_____affiner_la_generation);
                         GET_ARGUMENT_L("iterer_rdn=",rdnIFnD_____iterer_la_generation);

                         GET_ARGUMENT_L("editer_graines=""editer=",editer_les_eventuelles_graines_initiales_suivantes);

                         GET_ARGUMENT_L("noyau=",Amodele_d_Ising_3D_____utiliser_un_noyau);
                         GET_ARGUMENT_I("demi_dimension=""dd=",Amodele_d_Ising_3D_____demi_dimension_effective_du_noyau);

                         GET_ARGUMENT_F("sX__Y__Z=""sXYZ=",Amodele_d_Ising_3D_____ponderation_du_point_sX__Y__Z);
                         GET_ARGUMENT_F("_X_sY__Z=""XsYZ=",Amodele_d_Ising_3D_____ponderation_du_point__X_sY__Z);
                         GET_ARGUMENT_F("_X__Y_sZ=""XYsZ=",Amodele_d_Ising_3D_____ponderation_du_point__X__Y_sZ);
                         GET_ARGUMENT_F("pX__Y__Z=""pXYZ=",Amodele_d_Ising_3D_____ponderation_du_point_pX__Y__Z);
                         GET_ARGUMENT_F("_X_pY__Z=""XpYZ=",Amodele_d_Ising_3D_____ponderation_du_point__X_pY__Z);
                         GET_ARGUMENT_F("_X__Y_pZ=""XYpZ=",Amodele_d_Ising_3D_____ponderation_du_point__X__Y_pZ);

                         GET_ARGUMENT_I("dx=""dX=",Amodele_d_Ising_3D_____delta_X);
                         GET_ARGUMENT_I("dy=""dY=",Amodele_d_Ising_3D_____delta_Y);
                         GET_ARGUMENT_I("dz=""dZ=",Amodele_d_Ising_3D_____delta_Z);
                         )
                    );

     Test(IL_FAUT(editer_les_parametres_du_noyau_et_sortir_immediatement))
          Bblock
          CAL3(Prme6("Xmin=%d  Xmax=%d  Ymin=%d  Ymax=%d  Zmin=%d  Zmax=%d\n"
                    ,PINTE(Amodele_d_Ising_3D_____XYZmin),PINTE(Amodele_d_Ising_3D_____XYZmax)
                    ,PINTE(Amodele_d_Ising_3D_____XYZmin),PINTE(Amodele_d_Ising_3D_____XYZmax)
                    ,PINTE(Amodele_d_Ising_3D_____XYZmin),PINTE(Amodele_d_Ising_3D_____XYZmax)
                     )
               );
          CAL3(Prme4("XminR=%d XmaxR=%d YminR=%d YmaxR=%d\n"
                    ,PINTE(Amodele_d_Ising_3D_____XYZmin),PINTE(Amodele_d_Ising_3D_____XYZmax)
                    ,PINTE(Amodele_d_Ising_3D_____XYZmin),PINTE(Amodele_d_Ising_3D_____XYZmax)
                     )
               );
          CALS(Fsauts_de_lignes(UN));

          CAL3(Prme4("XYmaxNe   %d %d %d %d\n"
                    ,PINTE(Amodele_d_Ising_3D_____XYZmin),PINTE(Amodele_d_Ising_3D_____XYZmax)
                    ,PINTE(Amodele_d_Ising_3D_____XYZmin),PINTE(Amodele_d_Ising_3D_____XYZmax)
                     )
               );
                                        /* ATTENTION : on ne devra pas etre surpris par les valeurs ainsi obtenues. Par exemple, on  */
                                        /* obtiendra :                                                                               */
                                        /*                                                                                           */
                                        /*                  XYmax     128 128                                                        */
                                        /*                                                                                           */
                                        /* avec la valeur 64 pour 'DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Amodele_d_Ising_3D', en     */
                                        /* se rappelant que l'on passe a 'DimNo_Amodele_d_Ising_3D' par un 'DOUP(...)'. Les          */
                                        /* extrema ainsi obtenus (128) different d'une unite de ceux fournis par 'Suq' (127) et      */
                                        /* les parites des deux dimensions respectives (129 et 128) sont elles-aussi differentes...  */
                                        /*                                                                                           */
                                        /* ATTENTION : passage de 'XYmax' a 'XYmaxNe' le 20020909112316.                             */
                                        /*                                                                                           */
                                        /* Pour l'usage de 'PINTE(...)' voir 'v $xil/defi_K2$vv$DEF 20230311135805' qui a ete        */
                                        /* introduit pour ces impressions le 20230311140509...                                       */
          Eblock
     ATes
          Bblock
          DEFV(Int,INIT(graine_courante_de_selection_des_points_a_tester
                       ,graine_initiale_de_selection_des_points_a_tester
                        )
               );
                                        /* Pour choisir les points a tester.                                                         */
          DEFV(Int,INIT(graine_courante_de_selection_des_points_a_faire_basculer
                       ,graine_initiale_de_selection_des_points_a_faire_basculer
                        )
               );
                                        /* Pour determiner le basculement du spin des points a tester.                               */

          BDEFV(album,album_d_imagesA);
          BDEFV(album,album_d_imagesR);
                                        /* Definition des albums d'images Argument et Resultat...                                    */

#ifdef    Amodele_d_Ising_3D_a_temperature_locale_VERSION_01
          DEFV(Float,INIT(temperature_locale,temperature_globale));
                                        /* Temperature "locale" uniforme (c'est-a-dire independante du point {X,Y,Z}).               */
#Aifdef   Amodele_d_Ising_3D_a_temperature_locale_VERSION_01
#Eifdef   Amodele_d_Ising_3D_a_temperature_locale_VERSION_01

#ifdef    Amodele_d_Ising_3D_a_temperature_locale_VERSION_02
          BDEFV(albumF,temperature_locale);
                                        /* Definition de l'album Temperature...                                                      */
#Aifdef   Amodele_d_Ising_3D_a_temperature_locale_VERSION_02
#Eifdef   Amodele_d_Ising_3D_a_temperature_locale_VERSION_02

          Test(IFNE_chaine(nom_imageN,NOM_PIPE))
               Bblock
               PUSH_DIMENSIONS_3D;
               SET_DIMENSIONS_3D_SANS_VALIDATION(Amodele_d_Ising_3D_____XYZmin,Amodele_d_Ising_3D_____XYZmax
                                                ,Amodele_d_Ising_3D_____XYZmin,Amodele_d_Ising_3D_____XYZmax
                                                ,Amodele_d_Ising_3D_____XYZmin,Amodele_d_Ising_3D_____XYZmax
                                                 );
                                        /* Le noyau va etre recupere comme une "petite" image dont les dimensions sont definies      */
                                        /* par {Amodele_d_Ising_3D_____XYZmin,Amodele_d_Ising_3D_____XYZmax} et ce independemment    */
                                        /* de 'Amodele_d_Ising_3D_____demi_dimension_effective_du_noyau'...                          */

               CALi(dAloadF_album(PAmodele_d_Ising_3D_____noyau
                                 ,nom_imageN,C_VIDE
                                 ,premiere_imageN,pas_des_imagesN,nombre_de_chiffresN
                                 ,FAUX
                                 ,UNDEF
                                 ,FAUX
                                  )
                    );
                                        /* Chargement de l'album du noyau...                                                         */
                                        /*                                                                                           */
                                        /* ATTENTION : on notera que l'album 'nom_imageN' doit avoir comme taille la taille          */
                                        /* maximale du noyau correspondant a 'v $xiii/di_album$DEF DimNo_Amodele_d_Ising_3D',        */
                                        /* et non pas celle qui correspond a la taille effective de ce meme noyau                    */
                                        /* 'v $xiii/di_album$FON Amodele_d_Ising_3D_____demi_dimension_effective_du_noyau'.          */
                                        /*                                                                                           */
                                        /* ATTENTION : on notera de plus que l'on passe par 'PAmodele_d_Ising_3D_____noyau' car, en  */
                                        /* effet, 'Amodele_d_Ising_3D_____noyau' n'est pas un vrai 'albumF' puisqu'il n'est pas cree */
                                        /* par une allocation dynamique et variable...                                               */
                                        /*                                                                                           */
                                        /* L'argument 'Inv' (='FAUX') a ete introduit le 20091125133535...                           */

               Test(PAS_D_ERREUR(CODE_ERREUR))
                    Bblock
                    EGAL(Amodele_d_Ising_3D_____initialiser_le_noyau,FAUX);
                                        /* Evidemment, l'initialisation est faite...                                                 */

                    Test(IL_FAUT(lister_le_contenu_du_noyau))
                         Bblock
                         begin_albumQ(DoIn,Amodele_d_Ising_3D_____XYZmin_effectif,Amodele_d_Ising_3D_____XYZmax_effectif,PasZ
                                     ,DoIn,Amodele_d_Ising_3D_____XYZmin_effectif,Amodele_d_Ising_3D_____XYZmax_effectif,PasY
                                     ,DoIn,Amodele_d_Ising_3D_____XYZmin_effectif,Amodele_d_Ising_3D_____XYZmax_effectif,PasX
                                      )
                              Bblock
                              CAL3(Prme7("noyau(%+0*d,%+0*d,%+0*d)=%+.^^^\n"
                                        ,NOMBRE_DE_CHIFFRES_NECESSAIRES(DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Amodele_d_Ising_3D),X
                                        ,NOMBRE_DE_CHIFFRES_NECESSAIRES(DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Amodele_d_Ising_3D),Y
                                        ,NOMBRE_DE_CHIFFRES_NECESSAIRES(DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Amodele_d_Ising_3D),Z
                                        ,ACCES_NOYAU_DANS_Amodele_d_Ising_3D(X,Y,Z)
                                         )
                                   );
                                        /* Le 20060105154218, le format "16g" est passe a "^^g" pour plus de souplesse...            */
                                        /*                                                                                           */
                                        /* Le 20091123123133, le format "^^g" est passe a "^^^" pour plus de souplesse...            */
                              Eblock
                         end_albumQ(EDoI,EDoI,EDoI)
                         Eblock
                    ATes
                         Bblock
                         Eblock
                    ETes
                    Eblock
               ATes
                    Bblock
                    Test__CODE_ERREUR__ERREUR07;

                    INITIALISATION_EVENTUELLE_DU_NOYAU_DANS_Amodele_d_Ising_3D;
                                        /* Initialisation du noyau en cas d'erreur...                                                */
                    Eblock
               ETes

               PULL_DIMENSIONS_3D;
                                        /* Restauration des dimensions de travail...                                                 */
               Eblock
          ATes
               Bblock
               Eblock
          ETes

#ifdef    Amodele_d_Ising_3D_a_temperature_locale_VERSION_02
          CALi(dAFinitialisation(temperature_locale,temperature_globale));
                                        /* Initialisation de la temperature locale avec la temperature globale a priori...           */
#Aifdef   Amodele_d_Ising_3D_a_temperature_locale_VERSION_02
#Eifdef   Amodele_d_Ising_3D_a_temperature_locale_VERSION_02

          Test(IFNE_chaine(nom_imageT,NOM_UNDEF))
               Bblock

#ifdef    Amodele_d_Ising_3D_a_temperature_locale_VERSION_01
               PRINT_ATTENTION("la VERSION a temperature 'locale' n'est pas implementee, car trop exigeante en memoire");
               CAL1(Prer1("elle demanderait %d octets pour stocker la temperature 'locale'\n\n",size_aF));
               PRINT_ATTENTION("c'est la temperature globale qui va etre utilisee");
               CAL1(Prer1("elle vaut %.^^^\n",temperature_globale));
                                        /* Le 20060105154218, le format "16g" est passe a "^^g" pour plus de souplesse...            */
                                        /*                                                                                           */
                                        /* Le 20091123123133, le format "^^g" est passe a "^^^" pour plus de souplesse...            */
#Aifdef   Amodele_d_Ising_3D_a_temperature_locale_VERSION_01
#Eifdef   Amodele_d_Ising_3D_a_temperature_locale_VERSION_01

#ifdef    Amodele_d_Ising_3D_a_temperature_locale_VERSION_02
               CALi(dAloadF_album(temperature_locale
                                 ,nom_imageT,C_VIDE
                                 ,premiere_imageT,pas_des_imagesT,nombre_de_chiffresT
                                 ,FAUX
                                 ,UNDEF
                                 ,FAUX
                                  )
                    );
                                        /* Chargement de l'album de temperature...                                                   */
                                        /*                                                                                           */
                                        /* L'argument 'Inv' (='FAUX') a ete introduit le 20091125133535...                           */

               Test(PAS_D_ERREUR(CODE_ERREUR))
                    Bblock
                    Eblock
               ATes
                    Bblock
                    Test__CODE_ERREUR__ERREUR07;

                    PRINT_ATTENTION("c'est la temperature globale qui va etre utilisee");
                    CAL1(Prer1("elle vaut %.^^^\n",temperature_globale));
                                        /* Le 20060105154218, le format "16g" est passe a "^^g" pour plus de souplesse...            */
                                        /*                                                                                           */
                                        /* Le 20091123123133, le format "^^g" est passe a "^^^" pour plus de souplesse...            */
                    Eblock
               ETes
#Aifdef   Amodele_d_Ising_3D_a_temperature_locale_VERSION_02
#Eifdef   Amodele_d_Ising_3D_a_temperature_locale_VERSION_02

               Eblock
          ATes
               Bblock
               Eblock
          ETes

          CALi(dAnoir(album_d_imagesR));
                                        /* Initialisation de l'album Resultat...                                                     */

          CALi(dAload_album(album_d_imagesA
                           ,nom_imageA
                           ,nom_postfixe
                           ,premiere_image
                           ,pas_des_images
                           ,nombre_de_chiffres
                           ,FAUX
                           ,UNDEF
                           ,FAUX
                            )
               );
                                        /* Chargement de l'album Argument...                                                         */
                                        /*                                                                                           */
                                        /* L'argument 'Inv' (='FAUX') a ete introduit le 20091125133535...                           */

          Test(PAS_D_ERREUR(CODE_ERREUR))
               Bblock
               Repe(nombre_d_iterations)
                    Bblock
                    CALS(Amodele_d_Ising_3D_a_temperature_locale(album_d_imagesR
                                                                ,album_d_imagesA
                                                                ,graine_courante_de_selection_des_points_a_tester
                                                                ,probabilite_de_selection_des_points_a_tester
                                                                ,graine_courante_de_selection_des_points_a_faire_basculer
                                                                ,constante_de_couplage_J
                                                                ,temperature_locale
                                                                 )
                         );
                                        /* Et calcul de la generation suivante...                                                    */

                    INCR(graine_courante_de_selection_des_points_a_tester,INCREMENT_DES_GRAINES);
                    INCR(graine_courante_de_selection_des_points_a_faire_basculer,INCREMENT_DES_GRAINES);
                                        /* Progression des graines du generateur aleatoire puisqu'etant fonction de {X,Y,Z}, il est  */
                                        /* fondamental qu'a l'iteration suivante, il ne redonne pas la meme serie...                 */

                    CALS(Amove(album_d_imagesA,album_d_imagesR));
                                        /* Preparation de l'iteration suivante sans optimiser par rapport a la derniere ou cette     */
                                        /* operation est inutile (mais 'v $xci/Ising_2D.11$K CALS.Imove.ImageA.ImageR' ou la         */
                                        /* plusieurs images peuvent etre generees). Ainsi, on prepare l'avenir...                    */
                    Eblock
               ERep

               CALi(dAupdate_album(nom_imageR
                                  ,nom_postfixe
                                  ,premiere_image
                                  ,pas_des_images
                                  ,album_d_imagesR
                                  ,nombre_de_chiffres
                                  ,FAUX
                                   )
                    );
                                        /* Generation de l'album Resultat...                                                         */
                                        /*                                                                                           */
                                        /* L'argument 'Inv' (='FAUX') a ete introduit le 20100624091203...                           */

               Test(IL_FAUT(editer_les_eventuelles_graines_initiales_suivantes))
                    Bblock
                    CAL3(Prme2("%s%d\n"
                              ,TITRE_graine_initiale_de_selection_des_points_a_tester
                              ,graine_courante_de_selection_des_points_a_tester
                               )
                         );
                    CAL3(Prme2("%s%d\n"
                              ,TITRE_graine_initiale_de_selection_des_points_a_faire_basculer
                              ,graine_courante_de_selection_des_points_a_faire_basculer
                               )
                         );
                    Eblock
               ATes
                    Bblock
                    Eblock
               ETes
               Eblock
          ATes
               Bblock
               Eblock
          ETes

#ifdef    Amodele_d_Ising_3D_a_temperature_locale_VERSION_01
#Aifdef   Amodele_d_Ising_3D_a_temperature_locale_VERSION_01
#Eifdef   Amodele_d_Ising_3D_a_temperature_locale_VERSION_01

#ifdef    Amodele_d_Ising_3D_a_temperature_locale_VERSION_02
          EDEFV(albumF,temperature_locale);
                                        /* Definition de l'album Temperature...                                                      */
#Aifdef   Amodele_d_Ising_3D_a_temperature_locale_VERSION_02
#Eifdef   Amodele_d_Ising_3D_a_temperature_locale_VERSION_02

          EDEFV(album,album_d_imagesR);
          EDEFV(album,album_d_imagesA);
                                        /* Definition des albums d'images Argument et Resultat...                                    */
          Eblock
     ETes

     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.