/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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.2$I' :                                                                                          */
/*                                                                                                                                   */
/*                    Jean-Francois Colonna (LACTAMME, 1992??????????).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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)                                                                                                                     \
                    MUL2(FLOT(x),taux_d_auto_regulation)
#define   REGUL0(x)                                                                                                                     \
                    NEUT(x)
#define   REGUL9(x)                                                                                                                     \
                    DIVZ(FLOT(x),taux_d_auto_regulation)
                                        /* 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  :           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#TestADef 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').         */

#define   COEFFICIENT_D_AUTO_REGULATION                                                                                                 \
                    GRO4(GRO10(FU))
DEFV(Local,DEFV(Float,INIT(coefficient_d_auto_regulation,COEFFICIENT_D_AUTO_REGULATION)));
                                        /* Coefficient controlant la fonction utilisee lorsqu'il y a trop de particules. Alors,      */
                                        /* pour augmenter l'effet, il suffit d'augmenter ce coefficient. ATTENTION : il y avait      */
                                        /* autrefois :                                                                               */
                                        /*                                                                                           */
                                        /*                  #define   COEFFICIENT_D_AUTO_REGULATION                               \  */
                                        /*                                      GRO7(FRA10(FU))                                      */
                                        /*                                                                                           */
                                        /* valeur qui presentait la propriete suivante :                                             */
                                        /*                                                                                           */
                                        /*                  f(1/2)=1/f(2)                                                            */
                                        /*                                                                                           */
                                        /* ou 'f(...)' represente la fonction que l'on definit ici. Or malheureusement, cette        */
                                        /* valeur ne regulait pas assez vite, et le nombre de particules croissait encore assez      */
                                        /* vite...                                                                                   */
#define   DEMI_EXPOSANT_D_AUTO_REGULATION                                                                                               \
                    UN
DEFV(Local,DEFV(Positive,INIT(demi_exposant_d_auto_regulation,DEMI_EXPOSANT_D_AUTO_REGULATION)));
                                        /* Coefficient controlant la fonction utilisee lorsqu'il n'y a pas assez de particules.      */
                                        /* Alors, pour augmenter l'effet, il suffit de dimunuer ce coefficient, sachant que,         */
                                        /* malheureusement 1 est le minimum...                                                       */

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

#define   FACTEUR_NEUTRE_D_AUTO_REGULATION                                                                                              \
                    FU
DEFV(Local,DEFV(Float,INIT(taux_d_auto_regulation,FACTEUR_NEUTRE_D_AUTO_REGULATION)));
                                        /* Facteur de variation des differents nombres d'evenements et probabilites affectes par     */
                                        /* la procedure 'AUTO_REGULATION'. Ce taux est calcule dynamiquement. ATTENTION, on notera   */
                                        /* qu'il est reference dans :                                                                */
                                        /*                                                                                           */
                                        /*                  $xrq/nucleon.La.1$I,                                                     */
                                        /*                  $xrq/nucleon.La.2$I,                                                     */
                                        /*                  $xrq/meson.Lb.2$I,                                                       */
                                        /*                  $xrq/nucleon.Lb.1$I,                                                     */
                                        /*                  $xrq/nucleon.Lb.2$I,                                                     */
                                        /*                                                                                           */
                                        /* uniquement a cause de '$xrq/nucleon.LL.1$I', et donc pour se simplifier la vie...         */

#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   SEUIL_DU_PARAMETRE_D_AUTO_REGULATION                                                                                          \
                    FU                                                                                                                  \
                                        /* Seuil de 'PARAMETRE_D_AUTO_REGULATION' destine a decouper la fonction d'auto-regulation   */ \
                                        /* en deux morceaux...                                                                       */
#define   PARAMETRE_D_AUTO_REGULATION                                                                                                   \
                    DIVI(FLOT(nombre_instantane_de_particules),FLOT(SEUIL_D_AUTO_REGULATION))                                           \
                                        /* Variable destinee a calculer la fonction d'auto-regulation...                             */
#define   ___AUTO_REGULATION                                                                                                            \
                    Bblock                                                                                                              \
                    EGAL(taux_d_auto_regulation,FACTEUR_NEUTRE_D_AUTO_REGULATION);                                                      \
                                        /* A priori, on initialise de facon a ce que l'auto-regulation soit ineffective...           */ \
                    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                                                                                                    \
                                        /* Lorsque le nombre total de particules n'excede pas la moitie (arbitraire...) du maximum   */ \
                                        /* prevu, on laisse inchange l'etat de l'auto-regulation :                                   */ \
                                        /*                                                                                           */ \
                                        /* 1-si elle n'etait pas encore active, elle reste inactive,                                 */ \
                                        /* 2-si elle etait active, elle le reste (ainsi, on peut esperer que le nombre de particules */ \
                                        /* va re-augmenter...).                                                                      */ \
                                        /*                                                                                           */ \
                              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 : le taux est calcule dynamiquement en fonction du    */ \
                                        /* nombre de particules par rapport a un certain seuil, le nombre de particules etant        */ \
                                        /* renormalise par rapport a ce seuil, ce qui donne 'PARAMETRE_D_AUTO_REGULATION'...         */ \
                                        /*                                                                                           */ \
                                        /*        .                                                                                  */ \
                                        /*       /|\                                                                                 */ \
                                        /*        |                                                                                  */ \
                                        /*        | *                       .                                                        */ \
                                        /*        | *    pas    |           .  morceaux non utilises                                 */ \
                                        /*        | *   assez               . /                                                      */ \
                                        /*        | *    de     |           ./                                                       */ \
                                        /*        | * particules            .        trop                                            */ \
                                        /*        |             |                     de                                             */ \
                                        /*        |  *                     .      particules                                         */ \
                                        /*        |             |                                                                    */ \
                                        /*        |    *                 .                                                           */ \
                                        /*        |       *     |     .                                                              */ \
                                        /*    1.0 | - - - - - * * * < - - - - FACTEUR_NEUTRE_D_AUTO_REGULATION                       */ \
                                        /*        |       .     |     *                                                              */ \
                                        /*        |                     *                                                            */ \
                                        /*        |     .       |        *                                                           */ \
                                        /*        |                        *                                                         */ \
                                        /*        |    .        |              * * * * * * * * * * * * * * *                         */ \
                                        /*        |----------------------------------------------------------->                      */ \
                                        /*        |   .        1.0                               PARAMETRE_D_AUTO_REGULATION         */ \
                                        /*        |                                                          (x)                     */ \
                                        /*        |             ^                                                                    */ \
                                        /*        |  .          |___ SEUIL_DU_PARAMETRE_D_AUTO_REGULATION                            */ \
                                        /*        |   \                                                                              */ \
                                        /*        |    \                                                                             */ \
                                        /*        | .   morceaux non utilises                                                        */ \
                                        /*        |                                                                                  */ \
                                        /*                                                                                           */ \
                                        /* Cette fonction est construite par raccordement de deux morceaux ; a gauche de 1, elle     */ \
                                        /* est constituee de l'inverse d'un monome translate et de degre pair, alors qu'a droite de  */ \
                                        /* 1, il s'agit d'une courbe rationnelle du troisieme degre.                                 */ \
                         Test(IFGE(PARAMETRE_D_AUTO_REGULATION,SEUIL_DU_PARAMETRE_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...                                                         */ \
                              EGAL(taux_d_auto_regulation                                                                               \
                                  ,DIVZ(PARAMETRE_D_AUTO_REGULATION                                                                     \
                                       ,AXPB(AXPB(coefficient_d_auto_regulation                                                         \
                                                 ,PARAMETRE_D_AUTO_REGULATION                                                           \
                                                 ,SOUS(INVE(FACTEUR_NEUTRE_D_AUTO_REGULATION)                                           \
                                                      ,DOUB(MUL2(coefficient_d_auto_regulation,SEUIL_DU_PARAMETRE_D_AUTO_REGULATION))   \
                                                       )                                                                                \
                                                  )                                                                                     \
                                            ,PARAMETRE_D_AUTO_REGULATION                                                                \
                                            ,MUL2(coefficient_d_auto_regulation,EXP2(SEUIL_DU_PARAMETRE_D_AUTO_REGULATION))             \
                                             )                                                                                          \
                                        )                                                                                               \
                                   );                                                                                                   \
                                        /* Calcul du morceau de fonction correspondant a "trop de particules"...                     */ \
                                        /*                                                                                           */ \
                                        /*                             x                                                             */ \
                                        /*                  y = ---------------- avec x E ]1,+INFINI[                                */ \
                                        /*                          2                                                                */ \
                                        /*                       a.x  + b.x + c                                                      */ \
                                        /*                                                                                           */ \
                                        /* (ou 'a' represente 'coefficient_d_auto_regulation').                                      */ \
                                        /*                                                                                           */ \
                                        /* Le maximum de la fonction est obtenu pour :                                               */ \
                                        /*                                                                                           */ \
                                        /*                           ____                                                            */ \
                                        /*                          / c                                                              */ \
                                        /*                  x = \  / ---  = SEUIL_DU_PARAMETRE_D_AUTO_REGULATION                     */ \
                                        /*                       \/   a                                                              */ \
                                        /*                                                                                           */ \
                                        /*                             1                                                             */ \
                                        /*                  y = --------------- = FACTEUR_NEUTRE_D_AUTO_REGULATION                   */ \
                                        /*                            ____                                                           */ \
                                        /*                           /                                                               */ \
                                        /*                       2.\/ a.c  + b                                                       */ \
                                        /*                                                                                           */ \
                                        /* d'ou 'b' et 'c' en fonction de 'a' (qui designe 'coefficient_d_auto_regulation').         */ \
                              TRACE_D_UN_EVENEMENT(Prin6("REGULATION     trop de particules (%d/%d) [Regul1(%g)=%g,Regul9(%g)=%g]"      \
                                                        ,nombre_instantane_de_particules                                                \
                                                        ,SEUIL_D_AUTO_REGULATION                                                        \
                                                        ,FU,REGUL1(FU)                                                                  \
                                                        ,FU,REGUL9(FU)                                                                  \
                                                         )                                                                              \
                                                   );                                                                                   \
                              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...                                                 */ \
                              EGAL(taux_d_auto_regulation                                                                               \
                                  ,DIVZ(FACTEUR_NEUTRE_D_AUTO_REGULATION                                                                \
                                       ,SOUS(FACTEUR_NEUTRE_D_AUTO_REGULATION                                                           \
                                            ,PUIX(SOUS(PARAMETRE_D_AUTO_REGULATION,SEUIL_DU_PARAMETRE_D_AUTO_REGULATION)                \
                                                 ,DOUB(demi_exposant_d_auto_regulation)                                                 \
                                                  )                                                                                     \
                                             )                                                                                          \
                                        )                                                                                               \
                                   );                                                                                                   \
                                        /* Calcul du morceau de fonction correspondant a "pas assez de particules"...                */ \
                                        /*                                                                                           */ \
                                        /*                             1                                                             */ \
                                        /*                  y = ---------------- avec x E [0,1]                                      */ \
                                        /*                                  2.n                                                      */ \
                                        /*                       1 - (x - 1)                                                         */ \
                                        /*                                                                                           */ \
                                        /* (ou 'n' represente 'demi_exposant_d_auto_regulation)                                      */ \
                                        /*                                                                                           */ \
                              TRACE_D_UN_EVENEMENT(Prin6("REGULATION     pas assez de particules (%d/%d) [Regul1(%g)=%g,Regul9(%g)=%g]" \
                                                        ,nombre_instantane_de_particules                                                \
                                                        ,SEUIL_D_AUTO_REGULATION                                                        \
                                                        ,FU,REGUL1(FU)                                                                  \
                                                        ,FU,REGUL9(FU)                                                                  \
                                                         )                                                                              \
                                                   );                                                                                   \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                                                                                                                                        \
                         Test(IZLE(taux_d_auto_regulation))                                                                             \
                              Bblock                                                                                                    \
                              PRINT_ERREUR("le facteur d'auto-regulation est negatif ou nul");                                          \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              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 presentes en jouant sur certaines     */ \
                                        /* probabilites et sur certains nombres d'evenements...                                      */

BFonctionI

DEFV(LoF,GENERE__Fonction__OPT(AUTO_REGULATION,A,___AUTO_REGULATION))

EFonctionI



Copyright © Jean-François Colonna, 2019-2021.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / Ecole Polytechnique, 2019-2021.