/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N S D U T E M P S : */
/* */
/* */
/* Author of '$xrq/nucleon.L3$I' : */
/* */
/* Jean-Francois COLONNA (LACTAMME, 1991??????????). */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D E L ' H O R L O G E U N I V E R S E L L E : */
/* */
/*************************************************************************************************************************************/
#TestADef NOMBRE_DE_PERIODES_DE_LA_SIMULATION \
SOIXANTE_QUATRE \
/* Definition du nombre de periodes, c'est-a-dire du nombre d'instants simules. */
DEFV(Local,DEFV(Positive,INIT(nombre_de_periodes_de_la_simulation,NOMBRE_DE_PERIODES_DE_LA_SIMULATION)));
/* Definition du nombre de periodes, c'est-a-dire du nombre d'instants simules. */
#TestADef NOMBRE_MAXIMAL_DE_PERIODES_DE_LA_SIMULATION \
DIX_MILLE \
/* Definition du nombre maximal de periodes de la simulation. Le 19970408111923 et a cause */ \
/* du programme 'v $xrv/particule.10$K', cette definition est passee de '#define' a */ \
/* a '#TestADef' afin de pouvoir etre pre-definie (avec une valeur plus grande...). */
#define NUMERO_DE_LA_PREMIERE_PERIODE_DE_LA_SIMULATION \
PREMIERE_ITERATION_D_UN_Komp \
/* Definition du numero de la premiere periode de la simulation... */
DEFV(Local,DEFV(Positive,INIT(numero_de_la_periode_courante,NUMERO_DE_LA_PREMIERE_PERIODE_DE_LA_SIMULATION)));
/* Definition du numero de la periode courante. */
#define NUMERO_DE_LA_PREMIERE_PERIODE_DE_LA_SIMULATION_A_VISUALISER \
NUMERO_DE_LA_PREMIERE_PERIODE_DE_LA_SIMULATION \
/* Definition du numero de la premiere periode de la simulation... */
DEFV(Local,DEFV(Positive,INIT(numero_de_la_premiere_periode_a_visualiser
,NUMERO_DE_LA_PREMIERE_PERIODE_DE_LA_SIMULATION_A_VISUALISER
)
)
);
/* Definition du numero de la premiere periode a visualiser, ce qui permet de se */
/* repositionner rapidement dans le modele en cas de defaut (coupure de courant,...). */
#define PERIODE_INITIALE_DE_L_HORLOGE \
GRO1(FRA1(DIVI(DIVI(DIAMETRE_D_UN_HADRON,VITESSE_DE_LA_LUMIERE) \
,FLOT(NOMBRE_DE_PERIODES_DE_LA_SIMULATION) \
) \
) \
) \
/* Definition de la periode initiale de l'horloge : elle est choisie de facon a ce que la */ \
/* duree de la simulation soit de l'ordre de grandeur du temps necessaire a un photon pour */ \
/* traverser le proton... */
DEFV(Local,DEFV(Float,INIT(periode_initiale_de_l_horloge,PERIODE_INITIALE_DE_L_HORLOGE)));
/* Definition de la periode de l'horloge : elle est choisie de facon a ce qu'un photon */
/* ait le temps de traverser le proton pendant le temps de la simulation... */
#define INSTANT_INITIAL \
FZERO \
/* Definition de l'instant de debut de la simulation. */
DEFV(Local,DEFV(Float,INIT(instant_initial,INSTANT_INITIAL)));
DEFV(Local,DEFV(Float,INIT(temps_courant,INSTANT_INITIAL)));
/* Definition de l'instant de debut de la simulation et du temps courant. On notera que */
/* l'introduction de 'instant_initial' a eu lieu le 19980925093711. */
#define RE_INITIALISATION_DE_L_HORLOGE \
Bblock \
EGAL(temps_courant,instant_initial); \
Eblock \
/* (re-)initialisation de l'horloge... */
#define RALENTISSEMENT_DE_L_HORLOGE(periode,temps) \
NEUT(periode) \
/* Fonction destinee, par exemple, a ralentir l'horloge de simulation au cours du temps... */
#define PERIODE_COURANTE_DE_L_HORLOGE \
RALENTISSEMENT_DE_L_HORLOGE(tSCALE(periode_initiale_de_l_horloge),temps_courant) \
/* La periode reelle de l'horloge peut, si cela est souhaite, varier avec le temps... */
#define INCREMENTATION_DE_L_HORLOGE(top) \
Bblock \
INCR(temps_courant,top); \
Eblock \
/* Incrementation de l'horloge. */
#define TOP_D_HORLOGE \
Bblock \
INCREMENTATION_DE_L_HORLOGE(PERIODE_COURANTE_DE_L_HORLOGE); \
INCR(numero_de_la_periode_courante,I); \
Eblock \
/* Simulation des "tops" de l'horloge universelle. */
#define ECHELLE_DE_TEMPS \
FU
DEFV(Local,DEFV(Float,INIT(echelle_de_temps,ECHELLE_DE_TEMPS)));
/* Constante destinee a ralentir (<1) ou acceler (>1) le temps. ATTENTION : la modification */
/* de l'echelle de temps a des consequences sur les voisinages des particules (voir celui */
/* qui s'appelle 'voisinage_1_D1_D2') lorsque l'on accelere. On lira les commentaires de */
/* validation dans '$xrq/nucleon.LY.?$I' avec profit. En effet, plus on accelere, moins l'on */
/* a de chance de voir des particules se froler, puisqu'alors l'echantillonnage temporel est */
/* beaucoup moins precis et fin... */
#define tSCALE(variable_temporelle) \
MUL2(variable_temporelle,echelle_de_temps)
#define tiSCALE(variable_temporelle) \
DIVI(variable_temporelle,echelle_de_temps)
/* Variation lineaire d'une grandeur (periode de l'horloge ou encore nombre d'evenements) */
/* permettant d'acceler ou ralentir le deroulement de la simulation... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* F O N C T I O N D E D I S T O R S I O N T E M P O R E L L E D E S P R O B A B I L I T E S */
/* E T D E S N O M B R E S D ' E V E N E M E N T S S U I V A N T U N P H E N O M E N E */
/* G E N E R A L D E V I E I L L I S S E M E N T L I E A L ' H O R L O G E : */
/* */
/* */
/* Principe : */
/* */
/* Les probabilites (et les nombres d'evenements */
/* eventuellement) vont dependre de l'echelle */
/* temporelle d'observation : plus les durees */
/* seront breves, et plus les evenements seront */
/* improbables... */
/* */
/* */
/* Fonction utilisee pour les nombres d'evenements : */
/* */
/* */
/* V ^ */
/* | */
/* | */
/* Vn | . . . . . . . . . . . . . . . . . . . . . . . . . */
/* | * * * * * */
/* | * */
/* Vc | . . . * */
/* | . */
/* | * . */
/* | . */
/* | * . */
/* | . */
/* ----------O-------------------------------------------------> */
/* | dtc dt */
/* | */
/* */
/* */
/* dt */
/* Vn.----- */
/* dtc */
/* V = -------------------- = V(dt,Vc,dtc,Vn) */
/* dt Vn */
/* ----- + (1 - ----) */
/* dtc Vc */
/* */
/* ou : */
/* */
/* 'dt' : designe une duree "courante", */
/* 'dtc' : designe la duree "caracteristique", */
/* 'Vc' : designe la valeur caracteristique de 'V' pour dt=dtc, */
/* 'Vn' : designe la valeur caracteristique de 'V' pour dt=infini, */
/* 'V' : designe la valeur distordue pour 'dt' quelconque. */
/* */
/* */
/* Fonction utilisee pour les probabilites : */
/* */
/* Soit 'P' une probabilite ; les tests qui sont */
/* effectues pour savoir si l'evenement associe 'E(P)' */
/* va avoir lieu, sont du type (avec P E [0,1]) : */
/* */
/* SI (P <= seuil) ALORS E(P); */
/* */
/* Ainsi, si l'on veut que les evenements deviennent */
/* improbables lorsque 'dt' tend vers 0, il convient que */
/* 'P' augmente quand 'dt' diminue, et varie donc a */
/* l'inverse de 'V' ci dessus... On prendra donc, pour */
/* les probabilites la fonction suivante : */
/* */
/* */
/* P ^ */
/* | */
/* | */
/* Pn * */
/* | */
/* | */
/* | * */
/* | */
/* | * */
/* Pc | . . . * */
/* | . * */
/* | . * * * * * */
/* ----------O-------------------------------------------------> */
/* | dtc dt */
/* | */
/* */
/* */
/* 1 */
/* P = ---------------------------- = P(dt,Pc,dtc,Pn) */
/* dt 1 1 1 */
/* -----.(---- - ----) + ---- */
/* dtc Pc Pn Pn */
/* */
/* */
/* ou : */
/* */
/* 'dt' : designe une duree "courante", */
/* 'dtc' : designe la duree "caracteristique", */
/* 'Pc' : designe la valeur caracteristique de 'P' pour dt=dtc, */
/* 'Pn' : designe la valeur caracteristique de 'P' pour dt=infini (c'est-a-dire 'EVENEMENT_CERTAIN'), */
/* 'P' : designe la valeur distordue pour 'dt' quelconque. */
/* */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* F O N C T I O N D E D I S T O R S I O N T E M P O R E L L E D E S N O M B R E S D ' E V E N E M E N T S */
/* S U I V A N T L A P E R I O D E C O U R A N T E D E L ' H O R L O G E : */
/* */
/*************************************************************************************************************************************/
#define nDISTORSION(dt,Vc,dtc,Vn) \
DIVI(MUL2(Vn \
,DIVI(dt,dtc) \
) \
,ADD2(DIVI(dt,dtc) \
,DIVI(SOUS(Vn,Vc),Vc) \
) \
) \
/* Fonction generale de distorsion d'une valeur 'Vc(dtc)' pour 'dt'. */
#define fNOMBRE(nombre_d_evenements) \
INTE(nDISTORSION(PERIODE_COURANTE_DE_L_HORLOGE \
,tSCALE(FLOT(nombre_d_evenements)) \
,PERIODE_INITIALE_DE_L_HORLOGE \
,INFINI \
) \
) \
/* Fonction de distorsion d'un nombre d'evenements en fonction de la periode courante */ \
/* de l'horloge. */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* F O N C T I O N D E D I S T O R S I O N T E M P O R E L L E D E S P R O B A B I L I T E S S U I V A N T */
/* L ' A G E D E S P A R T I C U L E S O U L A P E R I O D E C O U R A N T E D E L ' H O R L O G E : */
/* */
/*************************************************************************************************************************************/
#define pDISTORSION(dt,Pc,dtc,Pn) \
ADD2(EVENEMENT_IMPOSSIBLE \
,INVE(AXPB(SOUS(INVE(Pc),INVE(Pn)) \
,DIVI(dt,dtc) \
,INVE(Pn) \
) \
) \
) \
/* Fonction generale de distorsion d'une probabilite 'Pc(dtc)' pour 'dt'. */
#define hPROBABILITE(probabilite) \
pDISTORSION(PERIODE_COURANTE_DE_L_HORLOGE \
,probabilite \
,PERIODE_INITIALE_DE_L_HORLOGE \
,EVENEMENT_CERTAIN \
) \
/* Fonction de distorsion d'une probabilite en fonction de la periode courante de l'horloge. */
#define DUREE_DE_VIE_MOYENNE_INITIALE(particule) \
ASI2(particule,espace_temps,duree_de_vie_moyenne_initiale) \
/* Valeur initiale de la duree de vie moyenne d'une particule ; il est necessaire de la */ \
/* memoriser pour chaque particule, car en effet, 'duree_de_vie_moyenne_courante' peut */ \
/* augmenter au cours du temps lorsque, par exemple une particule 'Q' ou 'AQ' est "visee" */ \
/* par un 'G'. Or rien empeche qu'un meme 'Q' ou 'AQ' soit "vise" par plusieurs 'G' ; si */ \
/* tel est le cas, il ne faut pas que 'duree_de_vie_moyenne_courante' augmente demesurement */ \
/* dans 'ALLONGEMENT_DE_LA_DUREE_DE_VIE_MOYENNE(...)', la comparaison relative des deux */ \
/* valeurs 'duree_de_vie_moyenne_initiale' et 'duree_de_vie_moyenne_courante' permet de */ \
/* savoir ou l'on en est... */
#define DUREE_DE_VIE_MOYENNE_COURANTE(particule) \
ASI2(particule,espace_temps,duree_de_vie_moyenne_courante) \
/* Duree de vie moyenne d'une particule ; on notera que cette duree peut varier au cours de */ \
/* la vie, et en particulier augmenter (c'est par exemple le cas des particules 'Q', 'AQ' */ \
/* ou 'G' en attente de collisions apres 'INTERCEPTION_PARTICULE_PAR_UN_GLUON(...)'). */
#define AGE(particule) \
SOUS(temps_courant,ASI2(particule,espace_temps,date_de_naissance)) \
/* Age d'une particule... */
#define aPROBABILITE(probabilite,particule,duree_de_vie_moyenne_de_la_particule) \
pDISTORSION(AGE(particule) \
,probabilite \
,MOIT(duree_de_vie_moyenne_de_la_particule) \
,EVENEMENT_CERTAIN \
) \
/* La probabilite d'un evenement est faible pour une particule jeune (voire nulle, si la */ \
/* particule vient de naitre grace a 'FLUCTUATIONS_QUANTIQUES_DU_VIDE' par exemple), alors */ \
/* qu'elle augmente lorsque cette meme particule vieillit. Enfin, on notera que c'est */ \
/* 'MOIT(duree_de_vie_moyenne_de_la_particule)' que l'on utilise arbitrairement... */