/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N S D U M E S O N : */
/* */
/* */
/* Author of '$xrq/meson.L6$I' : */
/* */
/* Jean-Francois Colonna (LACTAMME, 1992??????????). */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D U M E S O N A P A R T I R D ' U N E P A I R E */
/* Q U A R K E T A N T I - Q U A R K : */
/* */
/* */
/* Version 1 du modele : */
/* */
/* Dans ce modele, la paire (quark,anti-quark) REELs */
/* est immobile, 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 particules REELles ne sont pas soumises aux evenements du type */
/* 'STRONG_TRANSFORMATION_QxAQ___G(...)', seuls le sont les particules */
/* VIRTUELles. Les particules REELles ne peuvent donc pas disparaitre... */
/* */
/* */
/* Version 2 du modele : */
/* */
/* Dans ce modele, la paire (quark,anti-quark) REELs */
/* est mobile, mais ce, independamment des processus */
/* physiques de l'interaction forte. Cela est implante */
/* grace a deux phenomenes : */
/* */
/* 1-les particules dits REELles 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_ET_D_ANTI_QUARKS_DANS_LE_MESON \
DEUX \
/* Nombre de quarks et d'anti-quarks REELs contenus dans le meson... */
#define SAVEUR_DU_QUARK_REEL \
SE12(QUARK_u,QUARK_d)
#define SAVEUR_DE_L_ANTI_QUARK_REEL \
SAVEUR_DU_QUARK_REEL
/* Saveurs arbitraires des particules REELles. */
#define _VX_quark_REEL \
FZERO
#define _VY_quark_REEL \
FZERO
#define _VZ_quark_REEL \
FZERO
/* Definition de la vitesse d'un quark et d'un anti-quark REEL. */
#define _MX_quark_REEL \
FZERO
#define _MY_quark_REEL \
FZERO
#define _MZ_quark_REEL \
FU
/* Definition du moment angulaire d'un quark et d'un anti-quark REEL. */
#define DEMI_CERCLE \
DIVI(CERCLE_TRIGONOMETRIQUE,FLOT(NOMBRE_DE_QUARKS_ET_D_ANTI_QUARKS_DANS_LE_MESON)) \
/* Une moitie du cercle trigonometrique puisqu'il y a un quark et un anti-quark. */
#define phase_du_quark_REEL \
GRO5(FRA4(DEMI_CERCLE)) \
/* On fixe de facon absolue la position angulaire dans 'PLAN_DE_LA_PARTICULE' du quark REEL, */ \
/* l'anti-quark etant positionne par rapport a lui... */ \
/* */ \
/* _ */ \
/* Q */ \
/* . */ \
/* */ \
/* Q */ \
/* */
=define X_quark_REEL_INITIAL \
ADD2(X_DU_CENTRE_DE_LA_PARTICULE \
,MUL2(RAYON_D_UN_HADRON \
,COSX(ADD2(phase_du_quark_REEL \
,GRO0(DEMI_CERCLE) \
) \
) \
) \
)
=define Y_quark_REEL_INITIAL \
ADD2(Y_DU_CENTRE_DE_LA_PARTICULE \
,MUL2(RAYON_D_UN_HADRON \
,SINX(ADD2(phase_du_quark_REEL \
,GRO0(DEMI_CERCLE) \
) \
) \
) \
)
=define Z_quark_REEL_INITIAL \
PLAN_DE_LA_PARTICULE
/* Definition de la position du quark REEL. */
#define VX_quark_REEL_INITIALE \
_VX_quark_REEL
#define VY_quark_REEL_INITIALE \
_VY_quark_REEL
#define VZ_quark_REEL_INITIALE \
_VZ_quark_REEL
/* Definition de la vitesse du quark REEL. */
#define MX_quark_REEL_INITIAL \
NEUT(_MX_quark_REEL)
#define MY_quark_REEL_INITIAL \
NEUT(_MY_quark_REEL)
#define MZ_quark_REEL_INITIAL \
NEUT(_MZ_quark_REEL)
/* Definition du moment angulaire du quark REEL. */
DEFV(Local,DEFV(Float,INIT(X_quark_REEL,FLOT__UNDEF)));
DEFV(Local,DEFV(Float,INIT(Y_quark_REEL,FLOT__UNDEF)));
DEFV(Local,DEFV(Float,INIT(Z_quark_REEL,FLOT__UNDEF)));
DEFINITION_D_UNE_POSITION_INDEFINIE(position_initiale_du_quark_REEL);
DEFV(Local,DEFV(Float,INIT(VX_quark_REEL,VX_quark_REEL_INITIALE)));
DEFV(Local,DEFV(Float,INIT(VY_quark_REEL,VY_quark_REEL_INITIALE)));
DEFV(Local,DEFV(Float,INIT(VZ_quark_REEL,VZ_quark_REEL_INITIALE)));
DEFINITION_D_UNE_VITESSE_INDEFINIE(vitesse_initiale_du_quark_REEL);
DEFV(Local,DEFV(Float,INIT(MX_quark_REEL,MX_quark_REEL_INITIAL)));
DEFV(Local,DEFV(Float,INIT(MY_quark_REEL,MY_quark_REEL_INITIAL)));
DEFV(Local,DEFV(Float,INIT(MZ_quark_REEL,MZ_quark_REEL_INITIAL)));
DEFINITION_D_UN_MOMENT_ANGULAIRE_INDEFINI(moment_angulaire_initial_du_quark_REEL);
DEFV(Local,DEFV(quark,INIT(POINTERs(quark_REEL),PARTICULE_NON_DEFINIE)));
#define DEFINITION_DU_QUARK_REEL \
Bblock \
INITIALISATION_D_UNE_POSITION_QUELCONQUE(position_initiale_du_quark_REEL \
,X_quark_REEL \
,Y_quark_REEL \
,Z_quark_REEL \
); \
INITIALISATION_D_UNE_VITESSE_QUELCONQUE(vitesse_initiale_du_quark_REEL \
,VX_quark_REEL \
,VY_quark_REEL \
,VZ_quark_REEL \
); \
INITIALISATION_D_UN_MOMENT_ANGULAIRE_QUELCONQUE(moment_angulaire_initial_du_quark_REEL \
,MX_quark_REEL \
,MY_quark_REEL \
,MZ_quark_REEL \
); \
DEFINITION_D_UN_QUARK_REEL(quark_REEL \
,SAVEUR_DU_QUARK_REEL \
,position_initiale_du_quark_REEL \
,vitesse_initiale_du_quark_REEL \
,moment_angulaire_initial_du_quark_REEL \
,ROUGE_indefinie \
,VERTE_indefinie \
,BLEUE_indefinie \
); \
Eblock
#define COULEUR_DU_QUARK_REEL \
Bblock \
COULEUR_D_UN_QUARK_REEL(quark_REEL \
,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 VIDE --> Q(%d)" \
,ETIQUETTE(quark_REEL) \
) \
); \
Eblock
=define X_anti_quark_REEL_INITIAL \
ADD2(X_DU_CENTRE_DE_LA_PARTICULE \
,MUL2(RAYON_D_UN_HADRON \
,COSX(ADD2(phase_du_quark_REEL \
,GRO1(DEMI_CERCLE) \
) \
) \
) \
)
=define Y_anti_quark_REEL_INITIAL \
ADD2(Y_DU_CENTRE_DE_LA_PARTICULE \
,MUL2(RAYON_D_UN_HADRON \
,SINX(ADD2(phase_du_quark_REEL \
,GRO1(DEMI_CERCLE) \
) \
) \
) \
)
=define Z_anti_quark_REEL_INITIAL \
PLAN_DE_LA_PARTICULE
/* Definition de la position de l'anti-quark REEL. */
#define VX_anti_quark_REEL_INITIALE \
_VX_quark_REEL
#define VY_anti_quark_REEL_INITIALE \
_VY_quark_REEL
#define VZ_anti_quark_REEL_INITIALE \
_VZ_quark_REEL
/* Definition de la vitesse de l'anti-quark REEL. */
#define MX_anti_quark_REEL_INITIAL \
NEGA(_MX_quark_REEL)
#define MY_anti_quark_REEL_INITIAL \
NEGA(_MY_quark_REEL)
#define MZ_anti_quark_REEL_INITIAL \
NEGA(_MZ_quark_REEL)
/* Definition du moment angulaire de l'anti-quark REEL. */
DEFV(Local,DEFV(Float,INIT(X_anti_quark_REEL,FLOT__UNDEF)));
DEFV(Local,DEFV(Float,INIT(Y_anti_quark_REEL,FLOT__UNDEF)));
DEFV(Local,DEFV(Float,INIT(Z_anti_quark_REEL,FLOT__UNDEF)));
DEFINITION_D_UNE_POSITION_INDEFINIE(position_initiale_de_l_anti_quark_REEL);
DEFV(Local,DEFV(Float,INIT(VX_anti_quark_REEL,VX_anti_quark_REEL_INITIALE)));
DEFV(Local,DEFV(Float,INIT(VY_anti_quark_REEL,VY_anti_quark_REEL_INITIALE)));
DEFV(Local,DEFV(Float,INIT(VZ_anti_quark_REEL,VZ_anti_quark_REEL_INITIALE)));
DEFINITION_D_UNE_VITESSE_INDEFINIE(vitesse_initiale_de_l_anti_quark_REEL);
DEFV(Local,DEFV(Float,INIT(MX_anti_quark_REEL,MX_anti_quark_REEL_INITIAL)));
DEFV(Local,DEFV(Float,INIT(MY_anti_quark_REEL,MY_anti_quark_REEL_INITIAL)));
DEFV(Local,DEFV(Float,INIT(MZ_anti_quark_REEL,MZ_anti_quark_REEL_INITIAL)));
DEFINITION_D_UN_MOMENT_ANGULAIRE_INDEFINI(moment_angulaire_initial_de_l_anti_quark_REEL);
DEFV(Local,DEFV(anti_quark,INIT(POINTERs(anti_quark_REEL),PARTICULE_NON_DEFINIE)));
#define DEFINITION_DE_L_ANTI_QUARK_REEL \
Bblock \
INITIALISATION_D_UNE_POSITION_QUELCONQUE(position_initiale_de_l_anti_quark_REEL \
,X_anti_quark_REEL \
,Y_anti_quark_REEL \
,Z_anti_quark_REEL \
); \
INITIALISATION_D_UNE_VITESSE_QUELCONQUE(vitesse_initiale_de_l_anti_quark_REEL \
,VX_anti_quark_REEL \
,VY_anti_quark_REEL \
,VZ_anti_quark_REEL \
); \
INITIALISATION_D_UN_MOMENT_ANGULAIRE_QUELCONQUE(moment_angulaire_initial_de_l_anti_quark_REEL \
,MX_anti_quark_REEL \
,MY_anti_quark_REEL \
,MZ_anti_quark_REEL \
); \
DEFINITION_D_UN_ANTI_QUARK_REEL(anti_quark_REEL \
,SAVEUR_DE_L_ANTI_QUARK_REEL \
,position_initiale_de_l_anti_quark_REEL \
,vitesse_initiale_de_l_anti_quark_REEL \
,moment_angulaire_initial_de_l_anti_quark_REEL \
,ROUGE_indefinie \
,VERTE_indefinie \
,BLEUE_indefinie \
); \
Eblock
#define COULEUR_DE_L_ANTI_QUARK_REEL \
Bblock \
COULEUR_D_UN_ANTI_QUARK_REEL(anti_quark_REEL \
,CHARGE_DE_COULEUR_ROUGE(ROUGE_max) \
,CHARGE_DE_COULEUR_VERTE(VERTE_max) \
,CHARGE_DE_COULEUR_BLEUE(BLEUE_min) \
); \
TRACE_D_UN_EVENEMENT(Prin1("STRONG_CREATION_DE_L_ANTI_QUARK_REEL VIDE --> AQ(%d)" \
,ETIQUETTE(anti_quark_REEL) \
) \
); \
Eblock
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D U M E S O N P A R L A S U P E R P O S I T I O N D E D E U X */
/* C H A M P S C O R R E S P O N D A N T A U Q U A R K E T A L ' A N T I - Q U A R K R E E L S : */
/* */
/* */
/* Definition du champ des quarks de valence : */
/* */
/* 2 _ 2 */
/* -etalement0.d0(x,y,z,Q) -etalement0.d0(x,y,z,Q) */
/* */
/* VALENCE(x,y,z) = ponderation0.[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_DU_QUARK_REEL(cX,cY,cZ) \
CHAMP_GAUSSIEN(DISTANCE_ORDRE_0(cX,cY,cZ \
,quark_REEL \
,distance_caracteristique_g0 \
,pente_de_la_distance_caracteristique_g0 \
,DISTANCE_CARACTERISTIQUE_g0 \
) \
,etalement_g0 \
)
=define CHAMP_DE_VALENCE_DE_L_ANTI_QUARK_REEL(cX,cY,cZ) \
CHAMP_GAUSSIEN(DISTANCE_ORDRE_0(cX,cY,cZ \
,anti_quark_REEL \
,distance_caracteristique_g0 \
,pente_de_la_distance_caracteristique_g0 \
,DISTANCE_CARACTERISTIQUE_g0 \
) \
,etalement_g0 \
)
/* Definition des deux champs gaussiens associes au quark et a l'anti-quark REELs du meson. */
=define CHAMP_DE_VALENCE(champ_de_valence_du_quark_REEL,champ_de_valence_de_l_anti_quark_REEL) \
MUL2(ponderation_g0 \
,fMAX2(champ_de_valence_du_quark_REEL \
,champ_de_valence_de_l_anti_quark_REEL \
) \
)
/* Definition de la resultante des deux champs de valence associes au meson. On notera */
/* l'utilisation de 'fMAX2(...)' a la place de 'MAX2(...)' 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_DU_QUARK_REEL(...)', */
/* et 'CHAMP_DE_VALENCE_DE_L_ANTI_QUARK_REEL(...)'... */
/* */
/* */
/*************************************************************************************************************************************/
%define ROUGE_max \
COULEUR_max
/* Definition du maximum de la composante ROUGE de la charge de couleur. */
%define VERTE_max \
COULEUR_max
/* Definition du maximum de la composante VERTE de la charge de couleur. */
%define BLEUE_max \
COULEUR_max
/* 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 Q U A R K E T L ' A N T I - Q U A R K : */
/* */
/* */
/* Definition du champ de flux : */
/* */
/* _ 2 */
/* -etalement1.d1(x,y,z,Q,Q) */
/* */
/* FLUX(x,y,z) = ponderation1.[e ] */
/* */
/* */
/*************************************************************************************************************************************/
#define DISTANCE_CARACTERISTIQUE_g1 \
DOUB(MUL2(RAYON_D_UN_HADRON \
,SINX(MOIT(DEMI_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 \
,CHAMP_GAUSSIEN(DISTANCE_ORDRE_1(cX,cY,cZ \
,quark_REEL \
,anti_quark_REEL \
,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). */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* 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 U Q U A R K E T D E L ' A N T I - Q U A R K : */
/* */
/* */
/* Definition du champ de confinement : */
/* */
/* CONFINEMENT(x,y,z) = FLUX(x,y,z) */
/* */
/* il est donc inutile... */
/* */
/* */
/*************************************************************************************************************************************/
#define DISTANCE_CARACTERISTIQUE_g2 \
FLOT__UNDEF
DEFV(Local,DEFV(Float,INIT(distance_caracteristique_g2,FLOT__UNDEF)));
/* Nota : cette definition est uniquement destinee a la compatibilite avec les deux fichiers */
/* '$xrq/nucleon.LW.1$I' et '$xrq/nucleon.LW.2$I'... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* 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 M E S O N : */
/* */
/*************************************************************************************************************************************/
#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 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 \
CHOI(CHAMP_DE_VALENCE(CHAMP_DE_VALENCE_DU_QUARK_REEL(COORDONNEES(quark_REEL,x) \
,COORDONNEES(quark_REEL,y) \
,COORDONNEES(quark_REEL,z) \
) \
,CHAMP_DE_VALENCE_DE_L_ANTI_QUARK_REEL(COORDONNEES(quark_REEL,x) \
,COORDONNEES(quark_REEL,y) \
,COORDONNEES(quark_REEL,z) \
) \
) \
,CHAMP_DE_VALENCE(CHAMP_DE_VALENCE_DU_QUARK_REEL(COORDONNEES(anti_quark_REEL,x) \
,COORDONNEES(anti_quark_REEL,y) \
,COORDONNEES(anti_quark_REEL,z) \
) \
,CHAMP_DE_VALENCE_DE_L_ANTI_QUARK_REEL(COORDONNEES(anti_quark_REEL,x) \
,COORDONNEES(anti_quark_REEL,y) \
,COORDONNEES(anti_quark_REEL,z) \
) \
) \
) \
/* Valeur maximale du champ global qui sera atteinte la ou se situent le quark et */ \
/* l'anti-quark REELs. */
DEFV(Local,DEFV(Float,INIT(champ_de_valence_du_quark_REEL,FLOT__UNDEF)));
/* Definition de la partie "de valence du quark REEL" du champ global, */
DEFV(Local,DEFV(Float,INIT(champ_de_valence_de_l_anti_quark_REEL,FLOT__UNDEF)));
/* Definition de la partie "de valence de l'anti-quark REEL" du champ global, */
DEFV(Local,DEFV(Float,INIT(champ_de_valence_ROUGE,FLOT__UNDEF)));
DEFV(Local,DEFV(Float,INIT(champ_de_valence_VERTE,FLOT__UNDEF)));
DEFV(Local,DEFV(Float,INIT(champ_de_valence_BLEUE,FLOT__UNDEF)));
/* Ces trois definitions sont donnees afin d'assurer la compatibilite avec le generateur */
/* de nuages de particules virtuelles '$xrq/nucleon.LK$I'... */
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_global,FLOT__UNDEF)));
/* Intensite du champ resultant (valence + flux + confinement). */
#define COMPARE_X_A(cX,cA,particule) \
Bblock \
Test(IFGE(cX,cA)) \
Bblock \
EGAL(particule_REELLE_dominante,particule); \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
Eblock \
/* Choix de la particule REEL dominante lorsque 'cX' l'emporte sur 'cA'. 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 deux valeurs aleatoires */ \
/* 'choix_champ_du_quark_REEL', 'choix_champ_de_l_anti_quark_REEL' qui assureront une */ \
/* transition douce... */
#define COMPARE_Q_AQ(cQ,cAQ) \
Bblock \
COMPARE_X_A(cQ,cAQ,quark_REEL); \
Eblock \
/* Choix du quark REEL comme particule dominante quand 'cQ' l'emporte sur 'cAQ'... */
#define COMPARE_AQ_Q(cQ,cAQ) \
Bblock \
COMPARE_X_A(cAQ,cQ,anti_quark_REEL); \
Eblock \
/* Choix de l'anti-quark REEL comme particule dominante quand 'cAQ' l'emporte sur 'cQ'... */
#define PERMUTATION_Q_AQ(permutation) \
Bblock \
permutation(COMPARE_Q_AQ(choix_champ_du_quark_REEL,choix_champ_de_l_anti_quark_REEL); \
,COMPARE_AQ_Q(choix_champ_du_quark_REEL,choix_champ_de_l_anti_quark_REEL); \
); \
Eblock \
/* Permutation de deux tests relatifs au quark et a l'anti-quark REEL. */
#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_du_quark_REEL,COULEUR_indefinie)); \
DEFV(Float,INIT(choix_champ_de_l_anti_quark_REEL,COULEUR_indefinie)); \
/* Ensemble de deux valeurs aleatoires calculees chacune par rapport a la valeur locale */ \
/* du champ de couleur associe. */ \
DEFV(Float,INIT(pour_ne_pas_favoriser_une_particule,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_du_quark_REEL,CHAMP_DE_VALENCE_DU_QUARK_REEL(cX,cY,cZ)); \
EGAL(champ_de_valence_de_l_anti_quark_REEL,CHAMP_DE_VALENCE_DE_L_ANTI_QUARK_REEL(cX,cY,cZ)); \
/* Calcul des champs "de valence". */ \
EGAL(champ_de_valence_ROUGE \
,fMAX2(SCAL(champ_de_valence_du_quark_REEL \
,CHARGE_DE_COULEUR_ROUGE(ROUGE_max) \
,cCOULEUR(quark_REEL,ROUGE) \
) \
,SCAL(champ_de_valence_de_l_anti_quark_REEL \
,CHARGE_DE_COULEUR_ROUGE(ROUGE_max) \
,cCOULEUR(anti_quark_REEL,ROUGE) \
) \
) \
); \
EGAL(champ_de_valence_VERTE \
,fMAX2(SCAL(champ_de_valence_du_quark_REEL \
,CHARGE_DE_COULEUR_VERTE(VERTE_max) \
,cCOULEUR(quark_REEL,VERTE) \
) \
,SCAL(champ_de_valence_de_l_anti_quark_REEL \
,CHARGE_DE_COULEUR_VERTE(VERTE_max) \
,cCOULEUR(anti_quark_REEL,VERTE) \
) \
) \
); \
EGAL(champ_de_valence_BLEUE \
,fMAX2(SCAL(champ_de_valence_du_quark_REEL \
,CHARGE_DE_COULEUR_BLEUE(BLEUE_max) \
,cCOULEUR(quark_REEL,BLEUE) \
) \
,SCAL(champ_de_valence_de_l_anti_quark_REEL \
,CHARGE_DE_COULEUR_BLEUE(BLEUE_max) \
,cCOULEUR(anti_quark_REEL,BLEUE) \
) \
) \
); \
/* Ces trois definitions sont donnees afin d'assurer la compatibilite avec le generateur */ \
/* de nuages de particules virtuelles '$xrq/nucleon.LK$I'... */ \
\
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 \
\
EGAL(champ_global \
,MAX2(CHAMP_DE_VALENCE(champ_de_valence_du_quark_REEL,champ_de_valence_de_l_anti_quark_REEL) \
,champ_de_flux \
) \
); \
/* Superposition des champs "de valence" et "de flux". */ \
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_du_quark_REEL \
,MINIMUM_DU_CHAMP_GLOBAL \
,champ_de_valence_du_quark_REEL \
); \
GENERATION_D_UNE_VALEUR(choix_champ_de_l_anti_quark_REEL \
,MINIMUM_DU_CHAMP_GLOBAL \
,champ_de_valence_de_l_anti_quark_REEL \
); \
/* Generation de deux valeurs aleatoires calculees chacune par rapport a la valeur locale */ \
/* du champ associe ; on notera que si c'est par exemple le quark REEL qui est le champ */ \
/* dominant, alors la valeur aleatoire 'choix_champ_du_quark_REEL' que l'on calculeici a */ \
/* de bonnes chances d'etre superieure a la valeur 'choix_champ_de_l_anti_quark_REEL', et */ \
/* donc le quark REEL a lui aussi de bonnes chances pour etre choisi comme particule REELle */ \
/* dominante... */ \
GENERATION_D_UNE_VALEUR(pour_ne_pas_favoriser_une_particule \
,FZERO \
,FACT(NOMBRE_DE_QUARKS_ET_D_ANTI_QUARKS_DANS_LE_MESON) \
); \
/* Generation d'une valeur aleatoire qui va nous permettre de choisir un ordre de test */ \
/* des trois quarks REELs parmi les 2!=2 possibles... */ \
Choi(INTE(pour_ne_pas_favoriser_une_particule)) \
Bblock \
Ca1e(ZERO) \
Bblock \
PERMUTATION_Q_AQ(PERMUTATION_12); \
Eblock \
ECa1 \
\
Ca1e(UN) \
Bblock \
PERMUTATION_Q_AQ(PERMUTATION_21); \
Eblock \
ECa1 \
\
Defo \
Bblock \
PERMUTATION_Q_AQ(PERMUTATION_21); \
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_Q_AQ(champ_de_valence_du_quark_REEL,champ_de_valence_de_l_anti_quark_REEL); */ \
/* */ \
/* mais, il est evident qu'elle dissymetrise le role des particules REELles, puisque, */ \
/* par exemple, s'il y a egalite entre les champs 'quark REEL' et 'anti-quark REEL', c'est */ \
/* toujours le quark REEL qui sera choisi comme particule dominante. 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)) \
Bblock \
CHANGEMENT_DE_QUARK_REEL(quark_REEL,quarkA); \
/* Si 'quarkD' etait le quark REEL ROUGE, 'quarkD' le devient... */ \
Eblock \
ATes \
Bblock \
PRINT_ERREUR("un quark a le type REEL, mais n'est pas le quark REEL courant"); \
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 \
Test(IFEQ(NATURE(anti_quarkD),ANTI_QUARK_REEL)) \
Bblock \
Choi(NATURE(anti_quarkA)) \
Bblock \
Ca1e(ANTI_QUARK_VIRTUEL) \
Bblock \
DECR(nombre_instantane_d_anti_quarks_VIRTUELs,I); \
/* Decomptage des anti-quarks VIRTUELs. */ \
Eblock \
ECa1 \
\
Defo \
Bblock \
PRINT_ERREUR("la nature de l'anti-quark a changer n'est pas reconnue"); \
Eblock \
EDef \
Eblock \
ECho \
\
NATURE_D_UNE_PARTICULE(anti_quarkA,ANTI_QUARK_REEL); \
/* L'anti-quark 'anti_quarkA' devient reel, puisque 'anti_quarkD' l'etait et qu'il meure... */ \
\
INCR(nombre_instantane_d_anti_quarks_REELs,I); \
INCR(nombre_total_d_anti_quarks_REELs,I); \
/* Comptage des anti-quarks REELs. */ \
\
INITIALISATION_DE_LA_POSITION_INITIALE_D_UNE_PARTICULE(anti_quarkA \
,ASI2(anti_quarkD,espace_temps,position_courante) \
); \
INITIALISATION_DE_LA_POSITION_COURANTE_D_UNE_PARTICULE(anti_quarkA); \
/* Et le 'anti_quarkA' se place la ou etait 'anti_quarkD'... */ \
\
Test(IFEQ(anti_quarkD,anti_quark_REEL)) \
Bblock \
CHANGEMENT_D_ANTI_QUARK_REEL(anti_quark_REEL,anti_quarkA); \
/* Si 'anti_quarkD' etait l'anti-quark REEL ROUGE, 'anti_quarkD' le devient... */ \
Eblock \
ATes \
Bblock \
PRINT_ERREUR("un anti-quark a le type REEL, mais n'est pas l'anti-quark REEL courant"); \
Eblock \
ETes \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
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). */