/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N S D U P R O T O N : */
/* */
/* */
/* Author of '$xrq/nucleon.L6$I' : */
/* */
/* Jean-Francois Colonna (LACTAMME, 1991??????????). */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D U P R O T O N A P A R T I R D E T R O I S Q U A R K S " R E E L S " : */
/* */
/* */
/* Version 1 du modele : */
/* */
/* Dans ce modele, les trois quarks dits REELs */
/* sont immobiles, ce qui est garanti au cours du */
/* temps grace a la conjonction de deux phenomenes : */
/* */
/* 1-'CONSERVATION_DU_MODULE_DE_LA_VITESSE_D_UN_QUARK_OU_D_UN_ANTI_QUARK(...)' */
/* qui fait que lors d'un evenement du type 'STRONG_ABSORBTION_QxG___Q(...)' ou */
/* 'STRONG_EMISSION_Q___QxG(...)' un quark ou un anti-quark conserve le module */
/* de sa vitesse. Ainsi, si il etait nul (et donc si il etait immobile), il le */
/* restera tout au long de la simulation. */
/* */
/* 2-les quarks REELs ne sont pas soumis aux evenements du type */
/* 'STRONG_TRANSFORMATION_QxAQ___G(...)', seuls le sont les quarks */
/* VIRTUELs. Les quarks REELs ne peuvent donc pas disparaitre... */
/* */
/* */
/* Version 2 du modele : */
/* */
/* Dans ce modele, les trois quarks dits REELs */
/* sont mobiles, mais ce, independamment des processus */
/* physiques de l'interaction forte. Cela est implante */
/* grace a deux phenomenes : */
/* */
/* 1-les trois quarks dits REELs ne sont plus visualises */
/* implicitement, */
/* */
/* 2-'ENSEMBLE_DES_QUARKS(...)' et 'ENSEMBLE_DES_ANTI_QUARKS(...)' */
/* sont remplaces respectivement par 'ENSEMBLE_DES_QUARKS_VIRTUELS(...)' */
/* et 'ENSEMBLE_DES_ANTI_QUARKS_VIRTUELS(...)' dans les modules de */
/* deplacement ('DEPLACEMENT_DE_L_ENSEMBLE_DES_QUARKS' et */
/* 'DEPLACEMENT_DE_L_ENSEMBLE_DES_ANTI_QUARK' respectivement), */
/* ainsi que dans les modules d'evenements conditionnels */
/* ('EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_QUARKS' et */
/* 'EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_ANTI_QUARKS' */
/* respectivement). */
/* */
/* */
/*************************************************************************************************************************************/
#nodefine __VERSION__LES_PARTICULES_REELLES_SONT_SOUMISES_A_L_INTERACTION_FORTE
/* Choix du mode de gestion des particules REELLEs (voir la note ci-dessus...). */
#define NOMBRE_DE_QUARKS_DANS_LE_PROTON \
TROIS \
/* Nombre de quarks REELs contenus dans le proton... */
#define SAVEUR_DU_QUARK_REEL_ROUGE \
SE12(QUARK_u,QUARK_d)
#define SAVEUR_DU_QUARK_REEL_VERTE \
SE12(QUARK_u,QUARK_d)
#define SAVEUR_DU_QUARK_REEL_BLEUE \
SE22(QUARK_u,QUARK_d)
/* Saveurs arbitraires des trois quarks REELs (ROUGE,VERTE,BLEUE), en se souvenant */
/* malgre tout que le proton est un assemblage de trois quarks de saveur (u,u,d)... */
#define _VX_quark_REEL \
FZERO
#define _VY_quark_REEL \
FZERO
#define _VZ_quark_REEL \
FZERO
/* Definition de la vitesse d'un quark REEL. */
#define _MX_quark_REEL \
FZERO
#define _MY_quark_REEL \
FZERO
#define _MZ_quark_REEL \
FU
/* Definition du moment angulaire d'un quark REEL. */
#define TIERS_DE_CERCLE \
DIVI(CERCLE_TRIGONOMETRIQUE,FLOT(NOMBRE_DE_QUARKS_DANS_LE_PROTON)) \
/* Un tiers du cercle trigonometrique puisqu'il y a trois quarks reels. */
#define phase_du_quark_REEL_ROUGE \
NEUT(FRA4(TIERS_DE_CERCLE)) \
/* On fixe de facon absolue la position angulaire dans 'PLAN_DE_LA_PARTICULE' du quark */ \
/* ROUGE, les quarks VERTE et BLEUE etant fixes par rapport a lui... */ \
/* */ \
/* V---------R */ \
/* \ . / */ \
/* \ . / */ \
/* \ . / */ \
/* \ / */ \
/* B */ \
/* */ \
/* Depuis que 'X_quark_REEL_ROUGE' (et les autres...) est devenu une variable, les choses */ \
/* ont change : */ \
/* */ \
/* #define PHASE_DU_QUARK_REEL_ROUGE \ */ \
/* NEUT(FRA4(TIERS_DE_CERCLE)) */ \
/* */ \
/* et : */ \
/* */ \
/* DEFV(Local,DEFV(Float,INIT(phase_du_quark_REEL_ROUGE,PHASE_DU_QUARK_REEL_ROUGE))); */ \
/* */ \
/* 'phase_du_quark_REEL_ROUGE' est redevenue une constante... */ \
/* */
=define X_quark_REEL_ROUGE_INITIAL \
ADD2(X_DU_CENTRE_DE_LA_PARTICULE \
,MUL2(RAYON_D_UN_HADRON \
,COSX(ADD2(phase_du_quark_REEL_ROUGE \
,GRO0(TIERS_DE_CERCLE) \
) \
) \
) \
)
=define Y_quark_REEL_ROUGE_INITIAL \
ADD2(Y_DU_CENTRE_DE_LA_PARTICULE \
,MUL2(RAYON_D_UN_HADRON \
,SINX(ADD2(phase_du_quark_REEL_ROUGE \
,GRO0(TIERS_DE_CERCLE) \
) \
) \
) \
)
=define Z_quark_REEL_ROUGE_INITIAL \
PLAN_DE_LA_PARTICULE
/* Definition de la position du quark reel ROUGE. */
#define VX_quark_REEL_ROUGE_INITIALE \
_VX_quark_REEL
#define VY_quark_REEL_ROUGE_INITIALE \
_VY_quark_REEL
#define VZ_quark_REEL_ROUGE_INITIALE \
_VZ_quark_REEL
/* Definition de la vitesse du quark reel ROUGE. */
#define MX_quark_REEL_ROUGE_INITIAL \
NEUT(_MX_quark_REEL)
#define MY_quark_REEL_ROUGE_INITIAL \
NEUT(_MY_quark_REEL)
#define MZ_quark_REEL_ROUGE_INITIAL \
NEUT(_MZ_quark_REEL)
/* Definition du moment angulaire du quark reel ROUGE. */
DEFV(Local,DEFV(Float,INIT(X_quark_REEL_ROUGE,FLOT__UNDEF)));
DEFV(Local,DEFV(Float,INIT(Y_quark_REEL_ROUGE,FLOT__UNDEF)));
DEFV(Local,DEFV(Float,INIT(Z_quark_REEL_ROUGE,FLOT__UNDEF)));
DEFINITION_D_UNE_POSITION_INDEFINIE(position_initiale_du_quark_REEL_ROUGE);
DEFV(Local,DEFV(Float,INIT(VX_quark_REEL_ROUGE,VX_quark_REEL_ROUGE_INITIALE)));
DEFV(Local,DEFV(Float,INIT(VY_quark_REEL_ROUGE,VY_quark_REEL_ROUGE_INITIALE)));
DEFV(Local,DEFV(Float,INIT(VZ_quark_REEL_ROUGE,VZ_quark_REEL_ROUGE_INITIALE)));
DEFINITION_D_UNE_VITESSE_INDEFINIE(vitesse_initiale_du_quark_REEL_ROUGE);
DEFV(Local,DEFV(Float,INIT(MX_quark_REEL_ROUGE,MX_quark_REEL_ROUGE_INITIAL)));
DEFV(Local,DEFV(Float,INIT(MY_quark_REEL_ROUGE,MY_quark_REEL_ROUGE_INITIAL)));
DEFV(Local,DEFV(Float,INIT(MZ_quark_REEL_ROUGE,MZ_quark_REEL_ROUGE_INITIAL)));
DEFINITION_D_UN_MOMENT_ANGULAIRE_INDEFINI(moment_angulaire_initial_du_quark_REEL_ROUGE);
DEFV(Local,DEFV(quark,INIT(POINTERs(quark_REEL_ROUGE),PARTICULE_NON_DEFINIE)));
#define DEFINITION_DU_QUARK_REEL_ROUGE \
Bblock \
INITIALISATION_D_UNE_POSITION_QUELCONQUE(position_initiale_du_quark_REEL_ROUGE \
,X_quark_REEL_ROUGE \
,Y_quark_REEL_ROUGE \
,Z_quark_REEL_ROUGE \
); \
INITIALISATION_D_UNE_VITESSE_QUELCONQUE(vitesse_initiale_du_quark_REEL_ROUGE \
,VX_quark_REEL_ROUGE \
,VY_quark_REEL_ROUGE \
,VZ_quark_REEL_ROUGE \
); \
INITIALISATION_D_UN_MOMENT_ANGULAIRE_QUELCONQUE(moment_angulaire_initial_du_quark_REEL_ROUGE \
,MX_quark_REEL_ROUGE \
,MY_quark_REEL_ROUGE \
,MZ_quark_REEL_ROUGE \
); \
DEFINITION_D_UN_QUARK_REEL(quark_REEL_ROUGE \
,SAVEUR_DU_QUARK_REEL_ROUGE \
,position_initiale_du_quark_REEL_ROUGE \
,vitesse_initiale_du_quark_REEL_ROUGE \
,moment_angulaire_initial_du_quark_REEL_ROUGE \
,ROUGE_indefinie \
,VERTE_indefinie \
,BLEUE_indefinie \
); \
Eblock
#define COULEUR_DU_QUARK_REEL_ROUGE \
Bblock \
COULEUR_D_UN_QUARK_REEL(quark_REEL_ROUGE \
,CHARGE_DE_COULEUR_ROUGE(ROUGE_max) \
,CHARGE_DE_COULEUR_VERTE(VERTE_min) \
,CHARGE_DE_COULEUR_BLEUE(BLEUE_min) \
); \
TRACE_D_UN_EVENEMENT(Prin1("STRONG_CREATION_DU_QUARK_REEL_ROUGE VIDE --> Q(%d)" \
,ETIQUETTE(quark_REEL_ROUGE) \
) \
); \
Eblock
=define X_quark_REEL_VERTE_INITIAL \
ADD2(X_DU_CENTRE_DE_LA_PARTICULE \
,MUL2(RAYON_D_UN_HADRON \
,COSX(ADD2(phase_du_quark_REEL_ROUGE \
,GRO1(TIERS_DE_CERCLE) \
) \
) \
) \
)
=define Y_quark_REEL_VERTE_INITIAL \
ADD2(Y_DU_CENTRE_DE_LA_PARTICULE \
,MUL2(RAYON_D_UN_HADRON \
,SINX(ADD2(phase_du_quark_REEL_ROUGE \
,GRO1(TIERS_DE_CERCLE) \
) \
) \
) \
)
=define Z_quark_REEL_VERTE_INITIAL \
PLAN_DE_LA_PARTICULE
/* Definition de la position du quark reel VERTE. */
#define VX_quark_REEL_VERTE_INITIALE \
_VX_quark_REEL
#define VY_quark_REEL_VERTE_INITIALE \
_VY_quark_REEL
#define VZ_quark_REEL_VERTE_INITIALE \
_VZ_quark_REEL
/* Definition de la vitesse du quark reel VERTE. */
#define MX_quark_REEL_VERTE_INITIAL \
NEGA(_MX_quark_REEL)
#define MY_quark_REEL_VERTE_INITIAL \
NEGA(_MY_quark_REEL)
#define MZ_quark_REEL_VERTE_INITIAL \
NEGA(_MZ_quark_REEL)
/* Definition du moment angulaire du quark reel VERTE. */
DEFV(Local,DEFV(Float,INIT(X_quark_REEL_VERTE,FLOT__UNDEF)));
DEFV(Local,DEFV(Float,INIT(Y_quark_REEL_VERTE,FLOT__UNDEF)));
DEFV(Local,DEFV(Float,INIT(Z_quark_REEL_VERTE,FLOT__UNDEF)));
DEFINITION_D_UNE_POSITION_INDEFINIE(position_initiale_du_quark_REEL_VERTE);
DEFV(Local,DEFV(Float,INIT(VX_quark_REEL_VERTE,VX_quark_REEL_VERTE_INITIALE)));
DEFV(Local,DEFV(Float,INIT(VY_quark_REEL_VERTE,VY_quark_REEL_VERTE_INITIALE)));
DEFV(Local,DEFV(Float,INIT(VZ_quark_REEL_VERTE,VZ_quark_REEL_VERTE_INITIALE)));
DEFINITION_D_UNE_VITESSE_INDEFINIE(vitesse_initiale_du_quark_REEL_VERTE);
DEFV(Local,DEFV(Float,INIT(MX_quark_REEL_VERTE,MX_quark_REEL_VERTE_INITIAL)));
DEFV(Local,DEFV(Float,INIT(MY_quark_REEL_VERTE,MY_quark_REEL_VERTE_INITIAL)));
DEFV(Local,DEFV(Float,INIT(MZ_quark_REEL_VERTE,MZ_quark_REEL_VERTE_INITIAL)));
DEFINITION_D_UN_MOMENT_ANGULAIRE_INDEFINI(moment_angulaire_initial_du_quark_REEL_VERTE);
DEFV(Local,DEFV(quark,INIT(POINTERs(quark_REEL_VERTE),PARTICULE_NON_DEFINIE)));
#define DEFINITION_DU_QUARK_REEL_VERTE \
Bblock \
INITIALISATION_D_UNE_POSITION_QUELCONQUE(position_initiale_du_quark_REEL_VERTE \
,X_quark_REEL_VERTE \
,Y_quark_REEL_VERTE \
,Z_quark_REEL_VERTE \
); \
INITIALISATION_D_UNE_VITESSE_QUELCONQUE(vitesse_initiale_du_quark_REEL_VERTE \
,VX_quark_REEL_VERTE \
,VY_quark_REEL_VERTE \
,VZ_quark_REEL_VERTE \
); \
INITIALISATION_D_UN_MOMENT_ANGULAIRE_QUELCONQUE(moment_angulaire_initial_du_quark_REEL_VERTE \
,MX_quark_REEL_VERTE \
,MY_quark_REEL_VERTE \
,MZ_quark_REEL_VERTE \
); \
DEFINITION_D_UN_QUARK_REEL(quark_REEL_VERTE \
,SAVEUR_DU_QUARK_REEL_VERTE \
,position_initiale_du_quark_REEL_VERTE \
,vitesse_initiale_du_quark_REEL_VERTE \
,moment_angulaire_initial_du_quark_REEL_VERTE \
,ROUGE_indefinie \
,VERTE_indefinie \
,BLEUE_indefinie \
); \
Eblock
#define COULEUR_DU_QUARK_REEL_VERTE \
Bblock \
COULEUR_D_UN_QUARK_REEL(quark_REEL_VERTE \
,CHARGE_DE_COULEUR_ROUGE(ROUGE_min) \
,CHARGE_DE_COULEUR_VERTE(VERTE_max) \
,CHARGE_DE_COULEUR_BLEUE(BLEUE_min) \
); \
TRACE_D_UN_EVENEMENT(Prin1("STRONG_CREATION_DU_QUARK_REEL_VERTE VIDE --> Q(%d)" \
,ETIQUETTE(quark_REEL_VERTE) \
) \
); \
Eblock
=define X_quark_REEL_BLEUE_INITIAL \
ADD2(X_DU_CENTRE_DE_LA_PARTICULE \
,MUL2(RAYON_D_UN_HADRON \
,COSX(ADD2(phase_du_quark_REEL_ROUGE \
,GRO2(TIERS_DE_CERCLE) \
) \
) \
) \
)
=define Y_quark_REEL_BLEUE_INITIAL \
ADD2(Y_DU_CENTRE_DE_LA_PARTICULE \
,MUL2(RAYON_D_UN_HADRON \
,SINX(ADD2(phase_du_quark_REEL_ROUGE \
,GRO2(TIERS_DE_CERCLE) \
) \
) \
) \
)
=define Z_quark_REEL_BLEUE_INITIAL \
PLAN_DE_LA_PARTICULE
/* Definition de la position du quark reel BLEUE. */
#define VX_quark_REEL_BLEUE_INITIALE \
_VX_quark_REEL
#define VY_quark_REEL_BLEUE_INITIALE \
_VY_quark_REEL
#define VZ_quark_REEL_BLEUE_INITIALE \
_VZ_quark_REEL
/* Definition de la vitesse du quark reel BLEUE. */
#define MX_quark_REEL_BLEUE_INITIAL \
NEGA(_MX_quark_REEL)
#define MY_quark_REEL_BLEUE_INITIAL \
NEGA(_MY_quark_REEL)
#define MZ_quark_REEL_BLEUE_INITIAL \
NEGA(_MZ_quark_REEL)
/* Definition du moment angulaire du quark reel BLEUE. */
DEFV(Local,DEFV(Float,INIT(X_quark_REEL_BLEUE,FLOT__UNDEF)));
DEFV(Local,DEFV(Float,INIT(Y_quark_REEL_BLEUE,FLOT__UNDEF)));
DEFV(Local,DEFV(Float,INIT(Z_quark_REEL_BLEUE,FLOT__UNDEF)));
DEFINITION_D_UNE_POSITION_INDEFINIE(position_initiale_du_quark_REEL_BLEUE);
DEFV(Local,DEFV(Float,INIT(VX_quark_REEL_BLEUE,VX_quark_REEL_BLEUE_INITIALE)));
DEFV(Local,DEFV(Float,INIT(VY_quark_REEL_BLEUE,VY_quark_REEL_BLEUE_INITIALE)));
DEFV(Local,DEFV(Float,INIT(VZ_quark_REEL_BLEUE,VZ_quark_REEL_BLEUE_INITIALE)));
DEFINITION_D_UNE_VITESSE_INDEFINIE(vitesse_initiale_du_quark_REEL_BLEUE);
DEFV(Local,DEFV(Float,INIT(MX_quark_REEL_BLEUE,MX_quark_REEL_BLEUE_INITIAL)));
DEFV(Local,DEFV(Float,INIT(MY_quark_REEL_BLEUE,MY_quark_REEL_BLEUE_INITIAL)));
DEFV(Local,DEFV(Float,INIT(MZ_quark_REEL_BLEUE,MZ_quark_REEL_BLEUE_INITIAL)));
DEFINITION_D_UN_MOMENT_ANGULAIRE_INDEFINI(moment_angulaire_initial_du_quark_REEL_BLEUE);
DEFV(Local,DEFV(quark,INIT(POINTERs(quark_REEL_BLEUE),PARTICULE_NON_DEFINIE)));
/* Definition des trois quarks REELs constitutifs du proton. */
#define DEFINITION_DU_QUARK_REEL_BLEUE \
Bblock \
INITIALISATION_D_UNE_POSITION_QUELCONQUE(position_initiale_du_quark_REEL_BLEUE \
,X_quark_REEL_BLEUE \
,Y_quark_REEL_BLEUE \
,Z_quark_REEL_BLEUE \
); \
INITIALISATION_D_UNE_VITESSE_QUELCONQUE(vitesse_initiale_du_quark_REEL_BLEUE \
,VX_quark_REEL_BLEUE \
,VY_quark_REEL_BLEUE \
,VZ_quark_REEL_BLEUE \
); \
INITIALISATION_D_UN_MOMENT_ANGULAIRE_QUELCONQUE(moment_angulaire_initial_du_quark_REEL_BLEUE \
,MX_quark_REEL_BLEUE \
,MY_quark_REEL_BLEUE \
,MZ_quark_REEL_BLEUE \
); \
DEFINITION_D_UN_QUARK_REEL(quark_REEL_BLEUE \
,SAVEUR_DU_QUARK_REEL_BLEUE \
,position_initiale_du_quark_REEL_BLEUE \
,vitesse_initiale_du_quark_REEL_BLEUE \
,moment_angulaire_initial_du_quark_REEL_BLEUE \
,ROUGE_indefinie \
,VERTE_indefinie \
,BLEUE_indefinie \
); \
Eblock
/* Definition des trois quarks REELs constitutifs du proton, mais ATTENTION, sans la */
/* charge de couleur (voir ce qui suit...). */
#define COULEUR_DU_QUARK_REEL_BLEUE \
Bblock \
COULEUR_D_UN_QUARK_REEL(quark_REEL_BLEUE \
,CHARGE_DE_COULEUR_ROUGE(ROUGE_min) \
,CHARGE_DE_COULEUR_VERTE(VERTE_min) \
,CHARGE_DE_COULEUR_BLEUE(BLEUE_max) \
); \
TRACE_D_UN_EVENEMENT(Prin1("STRONG_CREATION_DU_QUARK_REEL_BLEUE VIDE --> Q(%d)" \
,ETIQUETTE(quark_REEL_BLEUE) \
) \
); \
Eblock
/* Mise en place de la couleur (qr,qv,qb) d'un quark REEL. En effet, lors de la mise en */
/* place des quarks REELs par 'DEFINITION_DU_QUARK_REEL_ROUGE/VERTE/BLEUE', on ne peut */
/* simultanement definir leur charge de couleurs, car cette derniere reference les extrema */
/* du champ, qui sont eux-memes calcules a partir de la position des quarks REELs. Ainsi, */
/* en definissant 'DEFINITION_DU_QUARK_REEL_ROUGE' (le premier defini), il serait necessaire */
/* de connaitre les quarks REELs VERTE et BLEUE, alors que leur position n'est pas encore */
/* definie. Donc, on attendra d'avoir defini la position des 3 quarks REELs avant de fixer */
/* leur charge de couleur par 'COULEUR_DU_QUARK_REEL_ROUGE/VERTE/BLEUE'... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D U P R O T O N P A R L A S U P E R P O S I T I O N D E T R O I S */
/* C H A M P S C O R R E S P O N D A N T A S E S T R O I S Q U A R K S R E E L S ( D I T S */
/* " Q U A R K S D E V A L E N C E " ) : */
/* */
/* */
/* ....::::---+++++oooooooo++++----::::..... */
/* ....::::---+++ooooo****ooooo+++---::::..... */
/* ...::::--+++ooo************ooo+++---:::...... */
/* ...:::--+++ooo***########***ooo+++--::::........ */
/* ...::---++ooo***# ##***ooo++---::::................... */
/* ..:::---++oo***## VERTE ###***oo+++---:::::..................... */
/* ..:::---++ooo***# ##***ooo+++---::::::::::::::::::::::.... */
/* ...:::--+++oo****########****ooo+++----::::::::::::::::::::::::: */
/* ...:::---+++ooo*************ooo+++-------:::------------------:: */
/* ....:::---+++oooo********ooooo++++--------------+++++++++++++--- */
/* .....:::----++++ooooooooooo+++++-------------+++++ooooooooo+++++ */
/* .....::::----++++++++++++++++-------------++++ooooo******ooooo+ */
/* .....:::::-----+++++++++----------------+++oooo************ooo */
/* ......:::::---------------------------+++ooo****########****o */
/* ......:::::----------------:::-------+++ooo***# ###*** */
/* ......::::::-------------::::::-----++++oo***## ROUGE ###*** */
/* ......:::::----------------:::-------+++ooo***# ###*** */
/* ......:::::---------------------------+++ooo****########****o */
/* .....:::::-----+++++++++----------------+++oooo************ooo */
/* .....::::----++++++++++++++++-------------++++ooooo******ooooo+ */
/* .....:::----++++ooooooooooo+++++-------------+++++ooooooooo+++++ */
/* ....:::---+++oooo********ooooo++++--------------+++++++++++++--- */
/* ...:::---+++ooo*************ooo+++-------:::------------------:: */
/* ...:::--+++oo****########****ooo+++----::::::::::::::::::::::::: */
/* ..:::---++ooo***# ##***ooo+++---::::::::::::::::::::::.... */
/* ..:::---++oo***## BLEUE ###***oo+++---:::::..................... */
/* ...::---++ooo***# ##***ooo++---::::................... */
/* ...:::--+++ooo***########***ooo+++--::::........ */
/* ...::::--+++ooo************ooo+++---:::...... */
/* ....::::---+++ooooo****ooooo+++---::::..... */
/* ....::::---+++++oooooooo++++----::::..... */
/* .....::::-----++++++++++-----::::..... */
/* */
/* */
/* Definition du champ des quarks de valence : */
/* */
/* 2 2 2 */
/* -etalement0.d0(x,y,z,Q ) -etalement0.d0(x,y,z,Q ) -etalement0.d0(x,y,z,Q ) */
/* R V B */
/* VALENCE(x,y,z) = ponderation0.[e + e + e ] */
/* */
/* */
/*************************************************************************************************************************************/
#define DISTANCE_CARACTERISTIQUE_g0 \
FZERO
DEFV(Local,DEFV(Float,INIT(distance_caracteristique_g0,DISTANCE_CARACTERISTIQUE_g0)));
#define PENTE_DE_LA_DISTANCE_CARACTERISTIQUE_g0 \
FU
DEFV(Local,DEFV(Float,INIT(pente_de_la_distance_caracteristique_g0,PENTE_DE_LA_DISTANCE_CARACTERISTIQUE_g0)));
#define ETALEMENT_g0 \
GRO1(GRO4(GRO16(FU)))
DEFV(Local,DEFV(Float,INIT(etalement_g0,ETALEMENT_g0)));
#define PONDERATION_g0 \
FU
DEFV(Local,DEFV(Float,INIT(ponderation_g0,PONDERATION_g0)));
/* Definition du champ d'ordre 0. Nota : plus l'etalement est faible, et plus le champ */
/* correspondant s'etend loin de son "centre"... De plus, on remarquera que la variable */
/* 'distance_caracteristique_g0' n'est pas utilisee, et n'est la que par raison de symetrie */
/* avec les distances d'ordre superieur... */
=define CHAMP_DE_VALENCE_ROUGE(cX,cY,cZ) \
CHAMP_GAUSSIEN(DISTANCE_ORDRE_0(cX,cY,cZ \
,quark_REEL_ROUGE \
,distance_caracteristique_g0 \
,pente_de_la_distance_caracteristique_g0 \
,DISTANCE_CARACTERISTIQUE_g0 \
) \
,etalement_g0 \
)
=define CHAMP_DE_VALENCE_VERTE(cX,cY,cZ) \
CHAMP_GAUSSIEN(DISTANCE_ORDRE_0(cX,cY,cZ \
,quark_REEL_VERTE \
,distance_caracteristique_g0 \
,pente_de_la_distance_caracteristique_g0 \
,DISTANCE_CARACTERISTIQUE_g0 \
) \
,etalement_g0 \
)
=define CHAMP_DE_VALENCE_BLEUE(cX,cY,cZ) \
CHAMP_GAUSSIEN(DISTANCE_ORDRE_0(cX,cY,cZ \
,quark_REEL_BLEUE \
,distance_caracteristique_g0 \
,pente_de_la_distance_caracteristique_g0 \
,DISTANCE_CARACTERISTIQUE_g0 \
) \
,etalement_g0 \
)
/* Definition des trois champs gaussiens associes aux trois quarks de valence du proton. */
=define CHAMP_DE_VALENCE_RVB(champ_de_valence_ROUGE,champ_de_valence_VERTE,champ_de_valence_BLEUE) \
MUL2(ponderation_g0 \
,fMAX3(champ_de_valence_ROUGE \
,champ_de_valence_VERTE \
,champ_de_valence_BLEUE \
) \
)
/* Definition de la resultante des trois champs de valence associes au proton. On notera */
/* l'utilisation de 'fMAX3(...)' a la place de 'MAX3(...)' afin d'alleger le travail du */
/* compilateur... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D E S V A L E U R S D E L A C H A R G E D E C O U L E U R : */
/* */
/* */
/* ATTENTION : */
/* */
/* Pour des raisons liees au pre-processing */
/* les definitions qui suivent doivent se trouver */
/* apres les definitions de 'CHAMP_DE_VALENCE_ROUGE(...)', */
/* 'CHAMP_DE_VALENCE_VERTE(...)' et 'CHAMP_DE_VALENCE_BLEUE(...)'... */
/* */
/* */
/*************************************************************************************************************************************/
%define ROUGE_max \
CHAMP_DE_VALENCE_ROUGE(COORDONNEES(quark_REEL_ROUGE,x) \
,COORDONNEES(quark_REEL_ROUGE,y) \
,COORDONNEES(quark_REEL_ROUGE,z) \
)
/* Definition du maximum de la composante ROUGE de la charge de couleur. */
%define VERTE_max \
CHAMP_DE_VALENCE_VERTE(COORDONNEES(quark_REEL_VERTE,x) \
,COORDONNEES(quark_REEL_VERTE,y) \
,COORDONNEES(quark_REEL_VERTE,z) \
)
/* Definition du maximum de la composante VERTE de la charge de couleur. */
%define BLEUE_max \
CHAMP_DE_VALENCE_BLEUE(COORDONNEES(quark_REEL_BLEUE,x) \
,COORDONNEES(quark_REEL_BLEUE,y) \
,COORDONNEES(quark_REEL_BLEUE,z) \
)
/* Definition du maximum de la composante BLEUE de la charge de couleur. */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D E L A G E O M E T R I E D U C H A M P " D E F L U X " S I M U L A N T */
/* L ' I N T E R A C T I O N F O R T E E N T R E L E S T R O I S Q U A R K S D E V A L E N C E : */
/* */
/* */
/* */
/* ....... */
/* ..:::....::--++++++++++++---::...:::... */
/* .::-+++++o***################****o+++++-:. */
/* ..-+o* ########################### *o-:. */
/* ..-+o# V ########################### R *o-:. */
/* .:-+o ##**##################**### +-:.. */
/* .:+*######*o++++++oo+++++++o#######o-.. */
/* .-o########o+:........:-o*#######*+: */
/* :+*########*+-. .:+o*#######*o-. */
/* .:+*########*o-: .:+o########*o-. */
/* .-+*########*o-:.:+*########*o-: */
/* .-+*########*o-:+*########*o-: */
/* .:+*########*o+*########*o-: */
/* .:+o*#######*o########*+-. */
/* .-o*#######*######*o+:. */
/* .:+o*###########*+-. */
/* .:+o### ##*o-. */
/* .:-o* B *+-:. */
/* .:-+o o-:. */
/* ..:----::. */
/* ..... */
/* */
/* */
/* */
/* Definition du champ de flux : */
/* */
/* 2 2 2 */
/* -etalement1.d1(x,y,z,Q ,Q ) -etalement1.d1(x,y,z,Q ,Q ) -etalement1.d1(x,y,z,Q ,Q ) */
/* R V V B B R */
/* FLUX(x,y,z) = ponderation1.[e + e + e ] */
/* */
/* */
/*************************************************************************************************************************************/
#define DISTANCE_CARACTERISTIQUE_g1 \
DOUB(MUL2(RAYON_D_UN_HADRON \
,SINX(MOIT(TIERS_DE_CERCLE)) \
) \
)
DEFV(Local,DEFV(Float,INIT(distance_caracteristique_g1,FLOT__UNDEF)));
#define PENTE_DE_LA_DISTANCE_CARACTERISTIQUE_g1 \
GRO3(FRA2(FRA10(FU)))
DEFV(Local,DEFV(Float,INIT(pente_de_la_distance_caracteristique_g1,PENTE_DE_LA_DISTANCE_CARACTERISTIQUE_g1)));
#define ETALEMENT_g1 \
GRO4(GRO16(GRO16(FU)))
DEFV(Local,DEFV(Float,INIT(etalement_g1,ETALEMENT_g1)));
#define PONDERATION_g1 \
GRO4(FRA4(FU))
DEFV(Local,DEFV(Float,INIT(ponderation_g1,PONDERATION_g1)));
/* Definition du champ d'ordre 1. Nota : plus l'etalement est faible, et plus le champ */
/* correspondant s'etend loin de son "centre"... De plus, on fera attention au fait que */
/* 'DISTANCE_CARACTERISTIQUE_g1' reference des lignes trigonometriques, et que donc */
/* 'distance_caracteristique_g1' ne peut etre initialisee a la compilation. La pente est */
/* choisie de facon a ce que un eloignement double provoque un affaiblissement de plus de */
/* la moitie... */
#define CHAMP_DE_FLUX(cX,cY,cZ) \
MUL2(ponderation_g1 \
,fMAX3(CHAMP_GAUSSIEN(DISTANCE_ORDRE_1(cX,cY,cZ \
,quark_REEL_ROUGE \
,quark_REEL_VERTE \
,distance_caracteristique_g0 \
,pente_de_la_distance_caracteristique_g0 \
,DISTANCE_CARACTERISTIQUE_g0 \
,distance_caracteristique_g1 \
,pente_de_la_distance_caracteristique_g1 \
,DISTANCE_CARACTERISTIQUE_g1 \
) \
,etalement_g1 \
) \
,CHAMP_GAUSSIEN(DISTANCE_ORDRE_1(cX,cY,cZ \
,quark_REEL_VERTE \
,quark_REEL_BLEUE \
,distance_caracteristique_g0 \
,pente_de_la_distance_caracteristique_g0 \
,DISTANCE_CARACTERISTIQUE_g0 \
,distance_caracteristique_g1 \
,pente_de_la_distance_caracteristique_g1 \
,DISTANCE_CARACTERISTIQUE_g1 \
) \
,etalement_g1 \
) \
,CHAMP_GAUSSIEN(DISTANCE_ORDRE_1(cX,cY,cZ \
,quark_REEL_BLEUE \
,quark_REEL_ROUGE \
,distance_caracteristique_g0 \
,pente_de_la_distance_caracteristique_g0 \
,DISTANCE_CARACTERISTIQUE_g0 \
,distance_caracteristique_g1 \
,pente_de_la_distance_caracteristique_g1 \
,DISTANCE_CARACTERISTIQUE_g1 \
) \
,etalement_g1 \
) \
) \
) \
/* Definition d'un champ de flux tridimensionnel. On notera que la somme des ponderations */ \
/* doit etre, de preference, egale a la ponderation du champ fonction de 'DISTANCE_ORDRE_0' */ \
/* (g0 = g1 + g2). Enfin, on remarquera l'utilisation de 'fMAX3(...)' a la place de */ \
/* 'MAX3(...)' afin d'alleger le travail du compilateur... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D E L A G E O M E T R I E D U C H A M P " D E C O N F I N E M E N T " */
/* D E S T R O I S Q U A R K S D E V A L E N C E E T D E S P A R T I C U L E S V I R T U E L L E S : */
/* */
/* */
/* */
/* ....... */
/* ..:::....::--++++++++++++---::...:::... */
/* .::-+++++o***################****o+++++-:. */
/* ..-+o**###############################**o-:. */
/* ..-+o**# ####################### #**o-:. */
/* .:-+o*# V ####################### R #*+-:.. */
/* .:+*# ####################### #o-.. */
/* .-o##############################*+: */
/* :+*############################*o-. */
/* .:+*##########################*o-. */
/* .-+*########################*o-: */
/* .-+*######################*o-: */
/* .:+*####################*o-: */
/* .:+o*#################*+-. */
/* .-o*###### #####*o+:. */
/* .:+o*#### B ####*+-. */
/* .:+o### ##*o-. */
/* .:-o**#**+-:. */
/* .:-+o***o-:. */
/* ..:----::. */
/* ..... */
/* */
/* */
/* */
/* Definition du champ de confinement : */
/* */
/* 2 */
/* -etalement2.d2(x,y,z,Q ,Q ,Q ) */
/* R V B */
/* CONFINEMENT(x,y,z) = ponderation2.[e ] */
/* */
/* */
/*************************************************************************************************************************************/
#define DISTANCE_CARACTERISTIQUE_g2 \
MOIT(MUL2(DISTANCE_CARACTERISTIQUE_g1 \
,MUL2(DISTANCE_CARACTERISTIQUE_g1 \
,SINX(MOIT(TIERS_DE_CERCLE)) \
) \
) \
)
DEFV(Local,DEFV(Float,INIT(distance_caracteristique_g2,FLOT__UNDEF)));
#define PENTE_DE_LA_DISTANCE_CARACTERISTIQUE_g2 \
PENTE_DE_LA_DISTANCE_CARACTERISTIQUE_g1
DEFV(Local,DEFV(Float,INIT(pente_de_la_distance_caracteristique_g2,PENTE_DE_LA_DISTANCE_CARACTERISTIQUE_g2)));
#define ETALEMENT_g2 \
GRO1(GRO4(GRO16(FU)))
DEFV(Local,DEFV(Float,INIT(etalement_g2,ETALEMENT_g2)));
#define PONDERATION_g2 \
SOUS(PONDERATION_g0,PONDERATION_g1)
DEFV(Local,DEFV(Float,INIT(ponderation_g2,PONDERATION_g2)));
/* Definition du champ d'ordre 2. Nota : plus l'etalement est faible, et plus le champ */
/* correspondant s'etend loin de son "centre"... De plus, on fera attention au fait que */
/* 'DISTANCE_CARACTERISTIQUE_g2' est en fait l'aire d'un triangle, et reference donc les */
/* lignes trigonometriques, 'distance_caracteristique_g2' ne peut donc pas etre initialisee */
/* a la compilation... */
#define CHAMP_DE_CONFINEMENT(cX,cY,cZ) \
MUL2(ponderation_g2 \
,CHAMP_GAUSSIEN(DISTANCE_ORDRE_2(cX,cY,cZ \
,quark_REEL_ROUGE \
,quark_REEL_VERTE \
,quark_REEL_BLEUE \
,distance_caracteristique_g0 \
,pente_de_la_distance_caracteristique_g0 \
,DISTANCE_CARACTERISTIQUE_g0 \
,distance_caracteristique_g1 \
,pente_de_la_distance_caracteristique_g1 \
,DISTANCE_CARACTERISTIQUE_g1 \
,distance_caracteristique_g2 \
,pente_de_la_distance_caracteristique_g2 \
,DISTANCE_CARACTERISTIQUE_g2 \
) \
,etalement_g2 \
) \
) \
/* Definition d'un champ de confinement tridimensionnel. On notera que la somme des */ \
/* ponderations doit etre, de preference, egale a la ponderation du champ fonction de */ \
/* 'DISTANCE_ORDRE_0' (g0 = g1 + g2). */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D U C H A M P G L O B A L D ' I N T E R A C T I O N */
/* I N T E R N E A U P R O T O N : */
/* */
/* */
/* . */
/* ............. */
/* ...:::::-:::::... */
/* ...::---+++++++--:... */
/* ..::-++o*#######*o+-:.. */
/* ...:-+o####*oooo*###*o+::.. */
/* ..:+o##*ooo+++-::-+*##*+-::.... */
/* .:-o##*+++++--::...:-o###*oo+-::... */
/* .:-o##o-----:::... ..:-+**###*o+-:..... */
/* ..-o##o::::..... ..:-+o###*+-:::... */
/* .:+*#o:.... ...::--o###o+-::... */
/* .:-*#*-. ...::-+++o##*o+-::.. */
/* .:-o##+. ...:--++oo*##o+--:... */
/* .:-*#*-. ...::-+++o##*o+-::.. */
/* .:+*#o:.... ...::--o###o+-::... */
/* ..-o##o::::..... ..:-+o###*+-:::... */
/* .:-o##o-----:::... ..:-+**###*o+-:..... */
/* .:-o##*+++++--::...:-o###*oo+-::... */
/* ..:+o##*ooo+++-::-+*##*+-::.... */
/* ...:-+o####*oooo*###*o+::.. */
/* ..::-++o*#######*o+-:.. */
/* ...::---+++++++--:... */
/* ...:::::-:::::... */
/* ............. */
/* . */
/* */
/* */
/*************************************************************************************************************************************/
#define CALCULER_LE_CHAMP_DE_FLUX \
VRAI
#define NE_PAS_CALCULER_LE_CHAMP_DE_FLUX \
NOTL(CALCULER_LE_CHAMP_DE_FLUX)
/* Indicateurs precisant si le champ "de flux" doit etre calcule (cas general), ou bien */
/* ignore (cas de l'initialisation du modele avec des nuages de particules virtuelles). */
#define CALCULER_LE_CHAMP_DE_CONFINEMENT \
VRAI
#define NE_PAS_CALCULER_LE_CHAMP_DE_CONFINEMENT \
NOTL(CALCULER_LE_CHAMP_DE_CONFINEMENT)
/* Indicateurs precisant si le champ "de confinement" doit etre calcule, ou bien ignore */
/* (cas general, car en effet, d'une part ainsi on economise des calculs, et d'autre part, */
/* les champs "de valence" et "de flux" assurent deja le confinement...). */
#define CUTOFF_D_INITIALISATION \
GRO9(FRA10(FU)) \
/* "Cutoff" d'initialisation destine a eliminer les fluctuations qui pourraient surgir en */ \
/* dehors du proton et a concentrer les nuages de particules virtuelles autour des quarks */ \
/* REELs. */
DEFV(Local,DEFV(Float,INIT(cutoff_d_initialisation,CUTOFF_D_INITIALISATION)));
/* "Cutoff" d'initialisation. On notera que la valeur de 'cutoff_d_initialisation' est un */
/* pourcentage et non pas une fraction 'FRAm(FRAn(MAXIMUM_DU_CHAMP_GLOBAL))', car en effet, */
/* 'MAXIMUM_DU_CHAMP_GLOBAL' n'est pas connu a la compilation, et ne peut donc etre utilise */
/* pour initialiser 'cutoff_d_initialisation'... */
#define CUTOFF_DU_CHAMP_GLOBAL \
FZERO \
/* "Cutoff" du champ global destine a eliminer les fluctuations qui pourraient surgir en */ \
/* dehors du proton ; il est initialise a 0% de 'MAXIMUM_DU_CHAMP_GLOBAL'... */
DEFV(Local,DEFV(Float,INIT(cutoff_du_champ_global,CUTOFF_DU_CHAMP_GLOBAL)));
/* "Cutoff" du champ global. On notera que la valeur de 'cutoff_du_champ_global' est un */
/* pourcentage et non pas une fraction 'FRAm(FRAn(MAXIMUM_DU_CHAMP_GLOBAL))', car en effet, */
/* 'MAXIMUM_DU_CHAMP_GLOBAL' n'est pas connu a la compilation, et ne peut donc etre utilise */
/* pour initialiser 'cutoff_du_champ_global'... */
#define MINIMUM_DU_CHAMP_GLOBAL \
FZERO \
/* Valeur minimale (relativement arbitraire) du champ global... */
#define MAXIMUM_DU_CHAMP_GLOBAL \
CHOY(CHAMP_DE_VALENCE_RVB(CHAMP_DE_VALENCE_ROUGE(COORDONNEES(quark_REEL_ROUGE,x) \
,COORDONNEES(quark_REEL_ROUGE,y) \
,COORDONNEES(quark_REEL_ROUGE,z) \
) \
,CHAMP_DE_VALENCE_VERTE(COORDONNEES(quark_REEL_ROUGE,x) \
,COORDONNEES(quark_REEL_ROUGE,y) \
,COORDONNEES(quark_REEL_ROUGE,z) \
) \
,CHAMP_DE_VALENCE_BLEUE(COORDONNEES(quark_REEL_ROUGE,x) \
,COORDONNEES(quark_REEL_ROUGE,y) \
,COORDONNEES(quark_REEL_ROUGE,z) \
) \
) \
,CHAMP_DE_VALENCE_RVB(CHAMP_DE_VALENCE_ROUGE(COORDONNEES(quark_REEL_VERTE,x) \
,COORDONNEES(quark_REEL_VERTE,y) \
,COORDONNEES(quark_REEL_VERTE,z) \
) \
,CHAMP_DE_VALENCE_VERTE(COORDONNEES(quark_REEL_VERTE,x) \
,COORDONNEES(quark_REEL_VERTE,y) \
,COORDONNEES(quark_REEL_VERTE,z) \
) \
,CHAMP_DE_VALENCE_BLEUE(COORDONNEES(quark_REEL_VERTE,x) \
,COORDONNEES(quark_REEL_VERTE,y) \
,COORDONNEES(quark_REEL_VERTE,z) \
) \
) \
,CHAMP_DE_VALENCE_RVB(CHAMP_DE_VALENCE_ROUGE(COORDONNEES(quark_REEL_BLEUE,x) \
,COORDONNEES(quark_REEL_BLEUE,y) \
,COORDONNEES(quark_REEL_BLEUE,z) \
) \
,CHAMP_DE_VALENCE_VERTE(COORDONNEES(quark_REEL_BLEUE,x) \
,COORDONNEES(quark_REEL_BLEUE,y) \
,COORDONNEES(quark_REEL_BLEUE,z) \
) \
,CHAMP_DE_VALENCE_BLEUE(COORDONNEES(quark_REEL_BLEUE,x) \
,COORDONNEES(quark_REEL_BLEUE,y) \
,COORDONNEES(quark_REEL_BLEUE,z) \
) \
) \
) \
/* Valeur maximale du champ global qui sera atteinte la ou se situent les trois quarks */ \
/* reels ROUGE, VERTE et BLEUE. On notera qu'a ces emplacements, les composantes 'TREFLE' */ \
/* et 'GAUSS' sont egales, et que d'autre part, le champ 'TREFLE' peut ne pas etre encore */ \
/* completement defini ; c'est pourquoi, n'intervient ici que la composante 'GAUSS'... */
DEFV(Local,DEFV(Float,INIT(champ_de_valence_ROUGE,FLOT__UNDEF)));
/* Definition de la partie "de valence ROUGE" du champ global, */
DEFV(Local,DEFV(Float,INIT(champ_de_valence_VERTE,FLOT__UNDEF)));
/* Definition de la partie "de valence VERTE" du champ global, */
DEFV(Local,DEFV(Float,INIT(champ_de_valence_BLEUE,FLOT__UNDEF)));
/* Definition de la partie "de valence BLEUE" du champ global, */
DEFV(Local,DEFV(Float,INIT(champ_de_flux,FLOT__UNDEF)));
/* Definition de la partie "de flux" du champ global, */
DEFV(Local,DEFV(Float,INIT(champ_de_confinement,FLOT__UNDEF)));
/* Definition de la partie "de confinement" du champ global. */
DEFV(Local,DEFV(Float,INIT(champ_global,FLOT__UNDEF)));
/* Intensite du champ resultant (valence + flux + confinement). */
#define COMPARE_X_AB(cX,cA,cB,particule) \
Bblock \
Test(IFET(IFGE(cX,cA),IFGE(cX,cB))) \
Bblock \
EGAL(particule_REELLE_dominante,particule); \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
Eblock \
/* Choix du quark REEL dominant lorsque 'cX' l'emporte sur 'cA' et 'cB'. On notera que l'on */ \
/* ne fait plus appel a la logique floue. En fait, en prenant par exemple le cas de deux */ \
/* quarks REELs, a mi-distance se produirait un renversement brutal du choix du quark REEL */ \
/* dominant ; la solution a ce probleme est donnee par le calcul de trois valeurs aleatoires */ \
/* 'choix_champ_ROUGE', 'choix_champ_VERTE' et 'choix_champ_BLEUE' qui assureront une */ \
/* transition douce... */
#define COMPARE_R_VB(cR,cV,cB) \
Bblock \
COMPARE_X_AB(cR,cV,cB,quark_REEL_ROUGE); \
Eblock \
/* Choix du quark REEL ROUGE comme quark dominant quand 'cR' l'emporte sur 'cV' et 'cB'... */
#define COMPARE_V_BR(cR,cV,cB) \
Bblock \
COMPARE_X_AB(cV,cB,cR,quark_REEL_VERTE); \
Eblock \
/* Choix du quark REEL VERTE comme quark dominant quand 'cV' l'emporte sur 'cB' et 'cR'... */
#define COMPARE_B_RV(cR,cV,cB) \
Bblock \
COMPARE_X_AB(cB,cR,cV,quark_REEL_BLEUE); \
Eblock \
/* Choix du quark REEL BLEUE comme quark dominant quand 'cB' l'emporte sur 'cR' et 'cV'... */
#define PERMUTATION_RVB(permutation) \
Bblock \
permutation(COMPARE_R_VB(choix_champ_ROUGE,choix_champ_VERTE,choix_champ_BLEUE); \
,COMPARE_V_BR(choix_champ_ROUGE,choix_champ_VERTE,choix_champ_BLEUE); \
,COMPARE_B_RV(choix_champ_ROUGE,choix_champ_VERTE,choix_champ_BLEUE); \
); \
Eblock \
/* Permutation de trois tests relatifs aux quarks REELs. */
#define CALCUL_DU_CHAMP_GLOBAL(cX,cY,cZ,calculer_le_champ_de_flux,calculer_le_champ_de_confinement,cutoff) \
Bblock \
DEFV(Float,INIT(choix_champ_ROUGE,ROUGE_indefinie)); \
DEFV(Float,INIT(choix_champ_VERTE,VERTE_indefinie)); \
DEFV(Float,INIT(choix_champ_BLEUE,BLEUE_indefinie)); \
/* Ensemble de trois valeurs aleatoires calculees chacune par rapport a la valeur locale */ \
/* du champ de couleur associe. */ \
DEFV(Float,INIT(pour_ne_pas_favoriser_un_quark_REEL,FLOT__UNDEF)); \
/* Afin de ne pas favoriser un quark REEL plutot qu'un autre, lorsqu'il y a equilibre de */ \
/* leurs contribution... */ \
\
EGAL(champ_de_valence_ROUGE,CHAMP_DE_VALENCE_ROUGE(cX,cY,cZ)); \
EGAL(champ_de_valence_VERTE,CHAMP_DE_VALENCE_VERTE(cX,cY,cZ)); \
EGAL(champ_de_valence_BLEUE,CHAMP_DE_VALENCE_BLEUE(cX,cY,cZ)); \
/* Calcul des champs "de valence". */ \
\
Test(IL_FAUT(calculer_le_champ_de_flux)) \
Bblock \
EGAL(champ_de_flux,CHAMP_DE_FLUX(cX,cY,cZ)); \
/* Calcul du champ "de flux". */ \
Eblock \
ATes \
Bblock \
EGAL(champ_de_flux,MINIMUM_DU_CHAMP_GLOBAL); \
/* Cas ou le champ "de flux" est ignore (cas de l'initialisation sur des nuages de */ \
/* particules virtuelles centres sur les trois quarks REELs). */ \
Eblock \
ETes \
\
Test(IL_FAUT(calculer_le_champ_de_confinement)) \
Bblock \
EGAL(champ_de_confinement,CHAMP_DE_CONFINEMENT(cX,cY,cZ)); \
/* Calcul du champ "de confinement". */ \
Eblock \
ATes \
Bblock \
EGAL(champ_de_confinement,MINIMUM_DU_CHAMP_GLOBAL); \
/* Cas ou le champ "de confinement" est ignore (cas de l'initialisation sur des nuages de */ \
/* particules virtuelles centres sur les trois quarks REELs). */ \
Eblock \
ETes \
\
EGAL(champ_global \
,MAX2(CHAMP_DE_VALENCE_RVB(champ_de_valence_ROUGE,champ_de_valence_VERTE,champ_de_valence_BLEUE) \
,ADD2(champ_de_flux \
,champ_de_confinement \
) \
) \
); \
/* Superposition des champs "de valence", "de flux" et "de confinement". */ \
EGAL(champ_global \
,fCOND(IFGE(champ_global,MUL2(cutoff,MAXIMUM_DU_CHAMP_GLOBAL)) \
,champ_global \
,MINIMUM_DU_CHAMP_GLOBAL \
) \
); \
/* Prise en compte du cutoff ; on notera l'ecriture : */ \
/* */ \
/* MUL2(cutoff,MAXIMUM_DU_CHAMP_GLOBAL) */ \
/* */ \
/* qui vient du fait que 'MAXIMUM_DU_CHAMP_GLOBAL' n'est pas connu a la compilation, et */ \
/* ne peut donc etre utilise pour initialiser 'cutoff'... */ \
GENERATION_D_UNE_VALEUR(choix_champ_ROUGE \
,ROUGE_min \
,champ_de_valence_ROUGE \
); \
GENERATION_D_UNE_VALEUR(choix_champ_VERTE \
,VERTE_min \
,champ_de_valence_VERTE \
); \
GENERATION_D_UNE_VALEUR(choix_champ_BLEUE \
,BLEUE_min \
,champ_de_valence_BLEUE \
); \
/* Generation de trois valeurs aleatoires calculees chacune par rapport a la valeur locale */ \
/* du champ de couleur associe ; on notera que si c'est par exemple le ROUGE qui est le */ \
/* champ dominant, alors la valeur aleatoire ROUGE que l'on calcule ici a de bonnes chances */ \
/* d'etre superieure aux valeurs aleatoires VERTE et BLEUE, et donc le quark REEL ROUGE a */ \
/* lui aussi de bonnes chances pour etre choisi comme quark REEL dominant... */ \
GENERATION_D_UNE_VALEUR(pour_ne_pas_favoriser_un_quark_REEL \
,FZERO \
,FACT(NOMBRE_DE_QUARKS_DANS_LE_PROTON) \
); \
/* Generation d'une valeur aleatoire qui va nous permettre de choisir un ordre de test */ \
/* des trois quarks REELs parmi les 3!=6 possibles... */ \
Choi(INTE(pour_ne_pas_favoriser_un_quark_REEL)) \
Bblock \
Ca1e(ZERO) \
Bblock \
PERMUTATION_RVB(PERMUTATION_123); \
Eblock \
ECa1 \
\
Ca1e(UN) \
Bblock \
PERMUTATION_RVB(PERMUTATION_132); \
Eblock \
ECa1 \
\
Ca1e(DEUX) \
Bblock \
PERMUTATION_RVB(PERMUTATION_231); \
Eblock \
ECa1 \
\
Ca1e(TROIS) \
Bblock \
PERMUTATION_RVB(PERMUTATION_213); \
Eblock \
ECa1 \
\
Ca1e(QUATRE) \
Bblock \
PERMUTATION_RVB(PERMUTATION_312); \
Eblock \
ECa1 \
\
Ca1e(CINQ) \
Bblock \
PERMUTATION_RVB(PERMUTATION_321); \
Eblock \
ECa1 \
\
Defo \
Bblock \
PERMUTATION_RVB(PERMUTATION_321); \
Eblock \
EDef \
Eblock \
ECho \
/* Sequence de selection du quark REEL dominant au point (cX,cY,cZ) ; toute cette mecanique */ \
/* au demeurant un peu lourde, est introduite pour satisfaire une juste requete */ \
/* intellectuelle. En effet, il aurait ete possible d'effectuer systematiquement la */ \
/* sequence de test suivante : */ \
/* */ \
/* COMPARE_R_VB(champ_de_valence_ROUGE,champ_de_valence_VERTE,champ_de_valence_BLEUE); */ \
/* COMPARE_V_BR(champ_de_valence_ROUGE,champ_de_valence_VERTE,champ_de_valence_BLEUE); */ \
/* COMPARE_B_RV(champ_de_valence_ROUGE,champ_de_valence_VERTE,champ_de_valence_BLEUE); */ \
/* */ \
/* mais, il est evident qu'elle dissymetrise le role des trois quarks REELs, puisque, */ \
/* par exemple, s'il y a egalite entre les champs ROUGE et VERTE, c'est toujours le */ \
/* quark REEL ROUGE qui sera choisi comme quark dominant. Le choix aleatoire de l'ordre */ \
/* des tests resoud ce conflit... */ \
Eblock \
/* Intensite du champ resultant ; il est obtenu a l'aide du champ "de flux" qui */ \
/* definit les lignes d'interaction, et par des champs de valence centres sur les */ \
/* quarks reels ; on notera que l'on calcule separement les trois champs de couleur */ \
/* au cas ou l'on aurait besoin d'eux individuellement... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* G E S T I O N D E S P A R T I C U L E S R E E L L E S : */
/* */
/*************************************************************************************************************************************/
#define CHANGEMENT_EVENTUEL_DE_QUARK_REEL(quarkD,quarkA) \
Bblock \
Test(IFEQ(NATURE(quarkD),QUARK_REEL)) \
Bblock \
Choi(NATURE(quarkA)) \
Bblock \
Ca1e(QUARK_VIRTUEL) \
Bblock \
DECR(nombre_instantane_de_quarks_VIRTUELs,I); \
/* Decomptage des quarks VIRTUELs. */ \
Eblock \
ECa1 \
\
Defo \
Bblock \
PRINT_ERREUR("la nature du quark a changer n'est pas reconnue"); \
Eblock \
EDef \
Eblock \
ECho \
\
NATURE_D_UNE_PARTICULE(quarkA,QUARK_REEL); \
/* Le quark 'quarkA' devient reel, puisque 'quarkD' l'etait et qu'il va mourir... */ \
\
INCR(nombre_instantane_de_quarks_REELs,I); \
INCR(nombre_total_de_quarks_REELs,I); \
/* Comptage des quarks REELs. */ \
\
INITIALISATION_DE_LA_POSITION_INITIALE_D_UNE_PARTICULE(quarkA,ASI2(quarkD,espace_temps,position_courante)); \
INITIALISATION_DE_LA_POSITION_COURANTE_D_UNE_PARTICULE(quarkA); \
/* Et le 'quarkA' se place la ou etait 'quarkD'... */ \
\
Test(IFEQ(quarkD,quark_REEL_ROUGE)) \
Bblock \
CHANGEMENT_DE_QUARK_REEL(quark_REEL_ROUGE,quarkA); \
/* Si 'quarkD' etait le quark REEL ROUGE, 'quarkD' le devient... */ \
Eblock \
ATes \
Bblock \
Test(IFEQ(quarkD,quark_REEL_VERTE)) \
Bblock \
CHANGEMENT_DE_QUARK_REEL(quark_REEL_VERTE,quarkA); \
/* Si 'quarkD' etait le quark REEL VERTE, 'quarkD' le devient... */ \
Eblock \
ATes \
Bblock \
Test(IFEQ(quarkD,quark_REEL_BLEUE)) \
Bblock \
CHANGEMENT_DE_QUARK_REEL(quark_REEL_BLEUE,quarkA); \
/* Si 'quarkD' etait le quark REEL BLEUE, 'quarkD' le devient... */ \
Eblock \
ATes \
Bblock \
PRINT_ERREUR("un quark REEL n'est ni ROUGE, ni VERTE, ni BLEUE"); \
Eblock \
ETes \
Eblock \
ETes \
Eblock \
ETes \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
Eblock \
/* Passage de l'etat REEL d'un quark qui le possedait (et qui va etre detruit) a un qui */ \
/* va l'acquerir (et qui vient d'etre cree). */
#define CHANGEMENT_EVENTUEL_D_ANTI_QUARK_REEL(anti_quarkD,anti_quarkA) \
Bblock \
Eblock \
/* Passage de l'etat REEL d'un anti-quark qui le possedait (et qui va etre detruit) a un qui */ \
/* va l'acquerir (et qui vient d'etre cree). */