/*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N S D E L ' A U T O - R E G U L A T I O N D U M O D E L E : */ /* */ /* */ /* Author of '$xrq/nucleon.LL.1$I' : */ /* */ /* Jean-Francois Colonna (LACTAMME, 1991??????????). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* P R O C E D U R E S D ' A U T O - R E G U L A T I O N : */ /* */ /*************************************************************************************************************************************/ #define REGUL1(x) \ NEUT(x) #define REGUL0(x) \ NEUT(x) #define REGUL9(x) \ NEUT(x) /* Ces trois procedures correspondent aux trois cas de figure possibles, a savoir : */ /* */ /* REGUL1 : diminuer / augmenter */ /* REGUL0 : rien / rien */ /* REGUL9 : augmenter / diminuer */ /* */ /* suivant qu'il a trop ou pas assez de particules... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* T E N T A T I V E D ' A U T O - R E G U L A T I O N D E L A D E N S I T E D E P A R T I C U L E S : */ /* */ /*************************************************************************************************************************************/ #define AUTO_REGULER_LE_MODELE \ VRAI DEFV(Local,DEFV(Logical,INIT(auto_reguler_le_modele,AUTO_REGULER_LE_MODELE))); /* Indicateur precisant si l'auto-regulation est activable ('VRAI') ou pas ('FAUX'). */ DEFV(Local,DEFV(Logical,INIT(auto_regulation_en_cours,FAUX))); /* Indicateur precisant si l'auto-regulation est active ('VRAI') ou pas encore ('FAUX') ; */ /* notons d'ailleurs qu'une fois que ce processus est declenche, il ne s'arrete plus... */ DEFV(Local,DEFV(Float,INIT(coefficient_d_auto_regulation,FLOT__UNDEF))); DEFV(Local,DEFV(Positive,INIT(demi_exposant_d_auto_regulation,UNDEF))); /* Ces deux variables sont la uniquement pour simplifier les choses... */ #define TAUX_D_AUTO_REGULATION \ FRA1(FRA10(FRA10(FU))) DEFV(Local,DEFV(Float,INIT(taux_d_auto_regulation,TAUX_D_AUTO_REGULATION))); /* Taux de variation des differents nombres d'evenements et probabilites affectes par */ /* la procedure 'AUTO_REGULATION'. */ #define REGULATION_DOWN(variable) \ Bblock \ DECR(variable,MUL2(taux_d_auto_regulation,variable)); \ Eblock #define REGULATION_ZERO(variable) \ Bblock \ Eblock #define REGULATION_HAUT(variable) \ Bblock \ INCR(variable,MUL2(taux_d_auto_regulation,variable)); \ Eblock /* Fonctions d'evolution vers le bas et vers le haut de differentes variables (probabilites */ /* et nombres d'evenements) lors du processus d'auto-regulation... */ #define SEUIL_D_AUTO_REGULATION \ MOIT(nombre_maximal_de_particules_dans_le_proton) \ /* Nombre de particules qui est le seuil au-dela duquel on enclenche le processus */ \ /* d'auto-regulation (pour ne plus jamais l'arreter...). On notera que ce parametre n'est */ \ /* pas affecte par 'tSCALE(...)' car en effet, il correspond a un etat d'equilibre du */ \ /* systeme, auquel cas le nombre de particules est independant de la duree de l'observation. */ #define ___AUTO_REGULATION \ Bblock \ Test(IL_FAUT(auto_reguler_le_modele)) \ Bblock \ Test(IFGT(nombre_instantane_de_particules,SEUIL_D_AUTO_REGULATION)) \ Bblock \ EGAL(auto_regulation_en_cours,VRAI); \ /* Lorsque le nombre total de particules excede la moitie (arbitraire...) du maximum */ \ /* prevu, on met en marche (a moins qu'il y fut deja) le processus d'auto-regulation... */ \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ Eblock \ ATes \ Bblock \ EGAL(auto_regulation_en_cours,FAUX); \ /* Lorsqu'il ne faut pas auto-reguler le modele, le processus est systematiquement */ \ /* desactive... */ \ Eblock \ ETes \ \ Test(EST_VRAI(auto_regulation_en_cours)) \ Bblock \ /* Cas ou l'auto-regulation est active : */ \ Test(IFGE(nombre_instantane_de_particules,SEUIL_D_AUTO_REGULATION)) \ Bblock \ /* Cas ou l'auto-regulation est active et ou il y a trop de particules : on va reduire */ \ /* les nombres d'evenements ainsi que les probabilites de creation, et on va augmenter */ \ /* les probabilites de collisions... */ \ Repe(INTE(NEUT(DIVI(FLOT(nombre_instantane_de_particules) \ ,FLOT(SEUIL_D_AUTO_REGULATION) \ ) \ ) \ ) \ ) \ Bblock \ /* Dans le cas ou il y a trop de particules par rapport a 'SEUIL_D_AUTO_REGULATION' il */ \ /* convient de "moduler" l'action a entreprendre ; en effet, lorsqu'un tres petit nombre */ \ /* de particules est desire, les processus de fluctuation du vide et d'injection de nuages */ \ /* de particules virtuelles creent beaucoup de particules (relativement au seuil), et donc */ \ /* le nombre de particules 'nombre_instantane_de_particules' depassent alors rapidement et */ \ /* largement ce seuil. En consequence de quoi, la sequence suivante est repetee un certain */ \ /* nombre de fois fonction du surplus de particules ; malgre cela, et de facon a ne pas */ \ /* etre trop drastique, on utilise une fonction de ce rapport : 'RACX(...)' ou actuellement */ \ /* 'NEUT(...)'... */ \ REGULATION_DOWN(nombre_d_evenements_pour_les_fluctuations_quantiques_du_vide); \ REGULATION_ZERO(nombre_d_evenements_pour_l_injection_de_nuages_de_quarks_virtuels); \ REGULATION_ZERO(nombre_d_evenements_pour_l_injection_de_nuages_d_anti_quarks_virtuels); \ REGULATION_ZERO(nombre_d_evenements_pour_l_injection_de_nuages_de_gluons_virtuels); \ REGULATION_HAUT(probabilite_de_STRONG_ANNHILATION_GxGxGxG___V); \ REGULATION_HAUT(probabilite_de_STRONG_ANNHILATION_GxGxG___V); \ REGULATION_HAUT(probabilite_de_STRONG_ANNHILATION_QxAQxG___V); \ REGULATION_HAUT(probabilite_de_STRONG_ABSORBTION_QxG___Q); \ REGULATION_HAUT(probabilite_de_STRONG_ABSORBTION_AQxG___AQ); \ REGULATION_HAUT(probabilite_de_STRONG_TRANSFORMATION_QxAQ___G); \ REGULATION_HAUT(probabilite_de_STRONG_TRANSFORMATION_GxG___G); \ REGULATION_ZERO(probabilite_de_INCHANGE_V); \ REGULATION_ZERO(probabilite_de_STRONG_CREATION_V___QxAQxG); \ REGULATION_ZERO(probabilite_de_STRONG_CREATION_V___GxGxG); \ REGULATION_ZERO(probabilite_de_STRONG_CREATION_V___GxGxGxG); \ REGULATION_ZERO(probabilite_d_evenement_conditionnel_pour_un_point_du_vide); \ REGULATION_ZERO(probabilite_de_INCHANGE_Q); \ REGULATION_DOWN(probabilite_de_STRONG_EMISSION_Q___QxG); \ REGULATION_ZERO(probabilite_d_evenement_conditionnel_pour_un_quark); \ REGULATION_ZERO(probabilite_de_INCHANGE_AQ); \ REGULATION_DOWN(probabilite_de_STRONG_EMISSION_AQ___AQxG); \ REGULATION_ZERO(probabilite_d_evenement_conditionnel_pour_un_anti_quark); \ REGULATION_ZERO(probabilite_de_INCHANGE_G); \ REGULATION_DOWN(probabilite_de_STRONG_TRANSFORMATION_G___QxAQ); \ REGULATION_DOWN(probabilite_de_STRONG_TRANSFORMATION_G___GxG); \ REGULATION_DOWN(probabilite_de_STRONG_TRANSFORMATION_G___GxGxG); \ REGULATION_ZERO(probabilite_d_evenement_conditionnel_pour_un_gluon); \ Eblock \ ERep \ TRACE_D_UN_EVENEMENT(Prin2("REGULATION trop de particules (%d/%d)" \ ,nombre_instantane_de_particules \ ,SEUIL_D_AUTO_REGULATION \ ) \ ); \ Eblock \ ATes \ Bblock \ /* Cas ou l'auto-regulation est active et ou il n'y a pas assez de particules : on va */ \ /* augmenter les nombres d'evenements ainsi que les probabilites de creation, et on va */ \ /* reduire les probabilites de collisions... */ \ REGULATION_HAUT(nombre_d_evenements_pour_les_fluctuations_quantiques_du_vide); \ REGULATION_ZERO(nombre_d_evenements_pour_l_injection_de_nuages_de_quarks_virtuels); \ REGULATION_ZERO(nombre_d_evenements_pour_l_injection_de_nuages_d_anti_quarks_virtuels); \ REGULATION_ZERO(nombre_d_evenements_pour_l_injection_de_nuages_de_gluons_virtuels); \ REGULATION_DOWN(probabilite_de_STRONG_ANNHILATION_GxGxGxG___V); \ REGULATION_DOWN(probabilite_de_STRONG_ANNHILATION_GxGxG___V); \ REGULATION_DOWN(probabilite_de_STRONG_ANNHILATION_QxAQxG___V); \ REGULATION_DOWN(probabilite_de_STRONG_ABSORBTION_QxG___Q); \ REGULATION_DOWN(probabilite_de_STRONG_ABSORBTION_AQxG___AQ); \ REGULATION_DOWN(probabilite_de_STRONG_TRANSFORMATION_QxAQ___G); \ REGULATION_DOWN(probabilite_de_STRONG_TRANSFORMATION_GxG___G); \ REGULATION_ZERO(probabilite_de_INCHANGE_V); \ REGULATION_ZERO(probabilite_de_STRONG_CREATION_V___QxAQxG); \ REGULATION_ZERO(probabilite_de_STRONG_CREATION_V___GxGxG); \ REGULATION_ZERO(probabilite_de_STRONG_CREATION_V___GxGxGxG); \ REGULATION_ZERO(probabilite_d_evenement_conditionnel_pour_un_point_du_vide); \ REGULATION_ZERO(probabilite_de_INCHANGE_Q); \ REGULATION_HAUT(probabilite_de_STRONG_EMISSION_Q___QxG); \ REGULATION_ZERO(probabilite_d_evenement_conditionnel_pour_un_quark); \ REGULATION_ZERO(probabilite_de_INCHANGE_AQ); \ REGULATION_HAUT(probabilite_de_STRONG_EMISSION_AQ___AQxG); \ REGULATION_ZERO(probabilite_d_evenement_conditionnel_pour_un_anti_quark); \ REGULATION_ZERO(probabilite_de_INCHANGE_G); \ REGULATION_HAUT(probabilite_de_STRONG_TRANSFORMATION_G___QxAQ); \ REGULATION_HAUT(probabilite_de_STRONG_TRANSFORMATION_G___GxG); \ REGULATION_HAUT(probabilite_de_STRONG_TRANSFORMATION_G___GxGxG); \ REGULATION_ZERO(probabilite_d_evenement_conditionnel_pour_un_gluon); \ TRACE_D_UN_EVENEMENT(Prin2("REGULATION pas assez de particules (%d/%d)" \ ,nombre_instantane_de_particules \ ,SEUIL_D_AUTO_REGULATION \ ) \ ); \ Eblock \ ETes \ Eblock \ ATes \ Bblock \ /* Cas ou l'auto-regulation n'est pas encore activee... */ \ Eblock \ ETes \ Eblock \ /* Tentative d'auto-regulation du nombre de particules preseentes en jouant sur certaines */ \ /* probabilites et sur certains nombres d'evenements... */ BFonctionI DEFV(LoF,GENERE__Fonction__OPT(AUTO_REGULATION,A,___AUTO_REGULATION)) EFonctionI