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