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