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