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