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