/*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N S D U T E M P S : */ /* */ /* */ /* Author of '$xrq/particle.M3$I' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 1994??????????). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N D E L A S I M U L A T I O N P R O P R E M E N T D I T E : */ /* */ /*************************************************************************************************************************************/ #define NOMBRE_DE_PERIODES_DE_LA_SIMULATION \ CENT_VINGT_HUIT 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. */ #define NUMERO_DE_LA_PREMIERE_PERIODE \ UN DEFV(Local,DEFV(Positive,INIT(numero_de_la_periode_courante,NUMERO_DE_LA_PREMIERE_PERIODE))); /* Definition du numero de la periode courante. */ #define NUMERO_DE_LA_PREMIERE_PERIODE_A_VISUALISER \ NUMERO_DE_LA_PREMIERE_PERIODE DEFV(Local,DEFV(Positive,INIT(numero_de_la_premiere_periode_a_visualiser,NUMERO_DE_LA_PREMIERE_PERIODE_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,...). */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 : */ /* */ /*************************************************************************************************************************************/ #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) \ ) \ ) \ ) DEFV(Local,DEFV(Float,INIT(periode_initiale_de_l_horloge,PERIODE_INITIALE_DE_L_HORLOGE))); /* 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 un nucleon. */ #define INSTANT_INITIAL \ FZERO DEFV(Local,DEFV(Float,INIT(instant_initial,INSTANT_INITIAL))); DEFV(Local,DEFV(Float,INIT(temps,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 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 : 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 DILATATION_DU_TEMPS(variable_temporelle) \ MUL2(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... */ #define PERIODE_COURANTE_DE_L_HORLOGE \ DILATATION_DU_TEMPS(periode_initiale_de_l_horloge) \ /* La periode reelle de l'horloge peut, si cela est souhaite, varier avec le temps... */ #define TOP_D_HORLOGE \ Bblock \ INCR(temps,PERIODE_COURANTE_DE_L_HORLOGE); \ INCR(numero_de_la_periode_courante,I); \ Eblock \ /* Simulation des "tops" de l'horloge universelle. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 certaines grandeurs */ /* eventuellement) vont dependre de l'echelle */ /* temporelle d'observation : plus les durees */ /* seront breves, et plus les evenements seront */ /* improbables, car sinon, les resultats (par */ /* exemple en nombre d'evenements) dependraient */ /* de la periode de l'horloge... */ /* */ /* */ /* Fonction utilisee (pour les nombres d'evenements par exemple) : */ /* */ /* */ /* V ^ */ /* | */ /* | */ /* V | . . . . . . . . . . . . . . . . . . . . . . . . . */ /* i | * * * * * */ /* | * */ /* V + + +* */ /* c | + */ /* | * + */ /* | + */ /* V * + */ /* 0 | + */ /* ----------O----+--------------------------------------------> */ /* | dtc dt */ /* | */ /* */ /* */ /* dt */ /* (V - V ) .----- */ /* i 0 dtc */ /* V = V + ------------------------- = fV(dt,V0,Vc,dtc,Vi) */ /* 0 V - V */ /* dt i 0 */ /* ----- - (1 - ---------) */ /* dtc V - V */ /* c 0 */ /* */ /* ou : */ /* */ /* 'dt' : designe le pas de temps courant, */ /* 'V0' : designe la valeur de 'V' pour dt=0, */ /* 'dtc' : designe un pas de temps "caracteristique", */ /* 'Vc' : designe la valeur caracteristique de 'V' pour dt=dtc, */ /* 'Vi' : designe la valeur 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)' */ /* doit avoir lieu, sont du type (ou 'P' designe une */ /* variable aleatoire dans [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 */ /* le seuil dimminue quand 'dt' diminue. On prendra donc */ /* pour les probabilites la fonction suivante : */ /* */ /* fP(dt,Pc,dtc) = fV(dt,EVENEMENT_IMPOSSIBLE,Pc,dtc,EVENEMENT_CERTAIN) */ /* */ /* le test ci-dessus devenant : */ /* */ /* SI (P <= fP(dt,seuil,dtc)) ALORS E(P); */ /* */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 ' U N E V A L E U R */ /* 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 vDISTORSION(dt,V0,Vc,dtc,Vi) \ ADD2(V0 \ ,DIVI(MUL2(SOUS(Vi,V0) \ ,DIVI(dt,dtc) \ ) \ ,SOUS(DIVI(dt,dtc) \ ,SOUS(FU,DIVI(SOUS(Vi,V0),SOUS(Vc,V0))) \ ) \ ) \ ) \ /* Fonction generale de distorsion 'fV(...)' d'une valeur 'Vc(dtc)' pour 'dt' : */ \ /* */ \ /* dt */ \ /* (V - V ) .----- */ \ /* i 0 dtc */ \ /* V = V + ------------------------- = fV(dt,V0,Vc,dtc,Vi) */ \ /* 0 V - V */ \ /* dt i 0 */ \ /* ----- - (1 - ---------) */ \ /* dtc V - V */ \ /* c 0 */ #define fNOMBRE(nombre_d_evenements) \ INTE(vDISTORSION(PERIODE_COURANTE_DE_L_HORLOGE \ ,DILATATION_DU_TEMPS(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) \ vDISTORSION(dt,EVENEMENT_IMPOSSIBLE,Vc,dtc,EVENEMENT_CERTAIN) \ /* Fonction generale de distorsion d'une probabilite 'Pc(dtc)' pour 'dt' : */ \ /* */ \ /* fP(dt,Pc,dtc) = fV(dt,EVENEMENT_IMPOSSIBLE,Pc,dtc,EVENEMENT_CERTAIN) */ \ /* */ #define hPROBABILITE(probabilite) \ pDISTORSION(PERIODE_COURANTE_DE_L_HORLOGE \ ,probabilite \ ,PERIODE_INITIALE_DE_L_HORLOGE \ ) \ /* Fonction de distorsion d'une probabilite en fonction de la periode courante de l'horloge. */ #define aPROBABILITE(probabilite,particule,duree_de_vie_moyenne_de_la_particule) \ pDISTORSION(AGE(particule) \ ,probabilite \ ,MOIT(duree_de_vie_moyenne_de_la_particule) \ ) \ /* 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... */