/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   E T   G E S T I O N   D E S   T R A I N E E S  :                                                     */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xrv/champs_5.LN$I' :                                                                                           */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 1995??????????).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        G E N E R A T I O N   D E S   T R A I N E E S  :                                                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#TestADef GENERER_LES_TRAINEES                                                                                                          \
                    VRAI
DEFV(Local,DEFV(Logical,INIT(generer_les_trainees,GENERER_LES_TRAINEES)));
                                        /* Indicateur disant si les trainees doivent etre generees.                                  */

#define   MODE_DE_GENERATION_DES_TRAINEES                                                                                               \
                    CALCUL_SIMPLIFIE_DES_TRAINEES                                                                                       \
                                        /* Les deux modes principaux sont :                                                          */ \
                                        /*                                                                                           */ \
                                        /*                  0       : CALCUL_STANDARD_DES_TRAINEES  'ADD2(...)',                     */ \
                                        /*                  1       : CALCUL_SIMPLIFIE_DES_TRAINEES 'MAX2(...)',                     */ \
                                        /*                                                                                           */

#if       (         (defined(__VERSION__GENERATION_D_UN_NUCLEON))                                                                       \
          ||        (defined(__VERSION__GENERATION_D_UN_MESON))                                                                         \
          ||        (defined(__VERSION__GENERATION_DU_VIDE))                                                                            \
           )
#    undef     MODE_DE_GENERATION_DES_TRAINEES
#    define    MODE_DE_GENERATION_DES_TRAINEES                                                                                          \
                         CALCUL_STANDARD_DES_TRAINEES
#Aif      (         (defined(__VERSION__GENERATION_D_UN_NUCLEON))                                                                       \
          ||        (defined(__VERSION__GENERATION_D_UN_MESON))                                                                         \
          ||        (defined(__VERSION__GENERATION_DU_VIDE))                                                                            \
           )
#Eif      (         (defined(__VERSION__GENERATION_D_UN_NUCLEON))                                                                       \
          ||        (defined(__VERSION__GENERATION_D_UN_MESON))                                                                         \
          ||        (defined(__VERSION__GENERATION_DU_VIDE))                                                                            \
           )

DEFV(Local,DEFV(Int,INIT(mode_de_generation_des_trainees,MODE_DE_GENERATION_DES_TRAINEES)));
                                        /* Mode de generation des trainees (voir 'DenumeT07(...,types_de_calcul_de_trainees)'        */
                                        /* dans 'v $xiii/tri_image$DEF'). Le mode 'CALCUL_SIMPLIFIE_DES_TRAINEES' est le mode qui    */
                                        /* donne le plus simplement et le mieux l'effet attendu, tout cela sans problemes de         */
                                        /* renormalisation...                                                                        */

#define   FACTEUR_D_ATTENUATION_DES_TRAINEES                                                                                            \
                    GRO6(FRA10(FU))
DEFV(Local,DEFV(Float,INIT(facteur_d_attenuation_des_trainees,FACTEUR_D_ATTENUATION_DES_TRAINEES)));
                                        /* Facteur 'k' d'attenuation des trainees qui est applique aux trainees 'T'...               */
#define   FACTEUR_D_ATTENUATION_DES_IMAGES                                                                                              \
                    COMP(FACTEUR_D_ATTENUATION_DES_TRAINEES)
DEFV(Local,DEFV(Float,INIT(facteur_d_attenuation_des_images,FACTEUR_D_ATTENUATION_DES_IMAGES)));
                                        /* Facteur '1-k' d'attenuation des trainees qui est applique aux images 'I' de la            */
                                        /* simulation...                                                                             */

DEFV(Local,DEFV(Int,INIT(periode_d_attenuation_des_trainees,UN)));
                                        /* En fait, pour des raisons d'arithmetiques elementaires, on ne peut pas appliquer          */
                                        /* n'importe quelle valeur d'attenuation (par exemple 0.999 et 0.99999 sont equivalentes     */
                                        /* puisqu'appliquees a 255, elles donnent toutes les deux 254...). Donc pour ces valeurs     */
                                        /* tres proches de 1, il faut faire quelque chose d'autre ; ainsi, l'attenuation pourra,     */
                                        /* si necessaire, n'etre appliquee qu'une image sur N, 'N' dependant de la proximite de      */
                                        /* 'facteur_d_attenuation_des_trainees' avec 1.0 (voir le programme 'v $xtc/trainees.01$c'   */
                                        /* qui permet de fixer 'facteur_d_attenuation_des_trainees').                                */

#if       (         (defined(__VERSION__GENERATION_D_UN_NUCLEON))                                                                       \
          ||        (defined(__VERSION__GENERATION_D_UN_MESON))                                                                         \
          ||        (defined(__VERSION__GENERATION_D_UN_DI_ELECTRON))                                                                   \
          ||        (defined(__VERSION__GENERATION_DU_VIDE))                                                                            \
           )
                                        /* On notera qu'a compter du 20170125111231, ce 'if(...)' est inutile puisqu'en effet,       */
                                        /* 'RENORMALISATION_AUTOMATIQUE_DES_TRAINEES' est defini dans tous les cas, mais on ne       */
                                        /* sait jamais...                                                                            */
#    define    RENORMALISATION_AUTOMATIQUE_DES_TRAINEES                                                                                 \
                         NE_PAS_RENORMALISER_LES_TRAINEES_CALCULEES_ITERATIVEMENT                                                       \
                                        /* Afin de ne pas renormaliser automatiquement les trainees...                               */
#Aif      (         (defined(__VERSION__GENERATION_D_UN_NUCLEON))                                                                       \
          ||        (defined(__VERSION__GENERATION_D_UN_MESON))                                                                         \
          ||        (defined(__VERSION__GENERATION_D_UN_DI_ELECTRON))                                                                   \
          ||        (defined(__VERSION__GENERATION_DU_VIDE))                                                                            \
           )
#    define    RENORMALISATION_AUTOMATIQUE_DES_TRAINEES                                                                                 \
                         NE_PAS_RENORMALISER_LES_TRAINEES_CALCULEES_ITERATIVEMENT                                                       \
                                        /* Afin de ne pas renormaliser automatiquement les trainees (introduit le 20170125111231).   */
#Eif      (         (defined(__VERSION__GENERATION_D_UN_NUCLEON))                                                                       \
          ||        (defined(__VERSION__GENERATION_D_UN_MESON))                                                                         \
          ||        (defined(__VERSION__GENERATION_D_UN_DI_ELECTRON))                                                                   \
          ||        (defined(__VERSION__GENERATION_DU_VIDE))                                                                            \
           )

#define   TRAINEES_ROUGE                                                                                                                \
                    ImageA1
#define   TRAINEES_VERTE                                                                                                                \
                    ImageA2
#define   TRAINEES_BLEUE                                                                                                                \
                    ImageA3
                                        /* Definition des images contenant les cumuls utiles au calcul des trainees.                 */

#ifdef    BUG_SYSTEME_DPX5000_SPIX_CC_LACT11_ZONE_DE_SWAP_2
#    define    CUMUL_D_UNE_COMPOSANTE_POUR_LE_CALCUL_DES_TRAINEES(composante,cumul,trainee_du_BLANC_avant,trainee_du_BLANC_apres,num)   \
                         Bblock                                                                                                         \
                         PRINT_ATTENTION("sur 'SYSTEME_DPX5000_SPIX_CC' le calcul des trainees n'est pas implante");                    \
                         Eblock                                                                                                         \
                                        /* Cumul d'une composante (non implante sur 'SYSTEME_DPX5000_SPIX_CC').                      */
#Aifdef   BUG_SYSTEME_DPX5000_SPIX_CC_LACT11_ZONE_DE_SWAP_2
#    define    CUMUL_D_UNE_COMPOSANTE_POUR_LE_CALCUL_DES_TRAINEES(composante,cumul,trainee_du_BLANC_avant,trainee_du_BLANC_apres,num)   \
                         Bblock                                                                                                         \
                         Test(IL_FAUT(generer_les_trainees))                                                                            \
                              Bblock                                                                                                    \
                              EGAL(trainee_du_BLANC_avant,trainee_du_BLANC_apres);                                                      \
                                        /* Trainee courante du 'BLANC' avant l'appel de 'Icalcul_iteratif_des_trainees(...)' pour    */ \
                                        /* la composante courante ('ROUGE', 'VERTE' ou 'BLEUE').                                     */ \
                              EGAL(trainee_du_BLANC_apres                                                                               \
                                  ,Icalcul_iteratif_des_trainees(composante                                                             \
                                                                ,COND(DIVISIBLE(num,periode_d_attenuation_des_trainees)                 \
                                                                     ,facteur_d_attenuation_des_trainees                                \
                                                                     ,FU                                                                \
                                                                      )                                                                 \
                                                                ,cumul                                                                  \
                                                                ,facteur_d_attenuation_des_images                                       \
                                                                ,composante                                                             \
                                                                ,mode_de_generation_des_trainees                                        \
                                                                ,trainee_du_BLANC_avant                                                 \
                                                                ,RENORMALISATION_AUTOMATIQUE_DES_TRAINEES                               \
                                                                 )                                                                      \
                                   );                                                                                                   \
                                        /* Calcul de l'effet de trainee, ainsi que de l'"image" du 'BLANC' pour la composante        */ \
                                        /* courante ('ROUGE', 'VERTE' ou 'BLEUE'). Le processus est grossierement le suivant :       */ \
                                        /*                                                                                           */ \
                                        /*                  composante = FAT*cumul + FAI*composante                                  */ \
                                        /*                                                                                           */ \
                                        /* ou 'FAT' designe le parametre 'facteur_d_attenuation_des_trainees' et ou 'FAI' designe    */ \
                                        /* le parametre 'facteur_d_attenuation_des_images'...                                        */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION, avant le 1995062200, le facteur d'attenuation des images etait modifie         */ \
                                        /* lors de l'appel de 'Icalcul_iteratif_des_trainees(...)' de la facon suivante :            */ \
                                        /*                                                                                           */ \
                                        /*                  ,COND(IFEQ(mode_de_generation_des_trainees                            \  */ \
                                        /*                            ,CALCUL_STANDARD_DES_TRAINEES                               \  */ \
                                        /*                             )                                                          \  */ \
                                        /*                       ,facteur_d_attenuation_des_images                                \  */ \
                                        /*                       ,FU                                                              \  */ \
                                        /*                        )                                                               \  */ \
                                        /*                                                                                           */ \
                                        /* pour une raison assez mysterieuse. Il parait plus logique de transmettre tel quel         */ \
                                        /* le parametre 'facteur_d_attenuation_des_images' (cette modification a ete effectuee       */ \
                                        /* a cause de son utilisation dans 'v $xrr/N_corps.11$K').                                   */ \
                              CONVOLUTION_D_UNE_COMPOSANTE(composante);                                                                 \
                                        /* Puis, eventuellement, convolution du resultat...                                          */ \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Eblock                                                                                                         \
                                        /* Cumul d'une composante :                                                                  */ \
                                        /*                                                                                           */ \
                                        /*                  composante <-- F(cumul,composante)                                       */ \
                                        /*                                                                                           */ \
                                        /* ainsi, on ajoute a la composante courante la "somme ponderee" des composantes             */ \
                                        /* precedentes. Rappelons le principe general :                                              */ \
                                        /*                                                                                           */ \
                                        /* soient :                                                                                  */ \
                                        /*                                                                                           */ \
                                        /*                  I   : une image calculee a l'instant 'i' de la simulation,               */ \
                                        /*                   i                                                                       */ \
                                        /*                                                                                           */ \
                                        /*                  T   : une image calculee de trainee a l'instant 'j' de la simulation,    */ \
                                        /*                   j                                                                       */ \
                                        /*                                                                                           */ \
                                        /*                  n+1 : le nombre d'images a cumuler pour le calcul d'une trainee,         */ \
                                        /*                                                                                           */ \
                                        /*                  k   : le facteur d'attenuation dans [0,1],                               */ \
                                        /*                                                                                           */ \
                                        /* Posons :                                                                                  */ \
                                        /*                                                                                           */ \
                                        /*                       n    n-1        1    0                                              */ \
                                        /*                  d = k  + k    +...+ k  + k                                               */ \
                                        /*                                                                                           */ \
                                        /* On a alors ('+' designant l'operation de "cumul de trainees" qui n'est pas forcement      */ \
                                        /* l'addition arithmetique) :                                                                */ \
                                        /*                                                                                           */ \
                                        /*                            1         n         n-1               1         0              */ \
                                        /*                  T      = ---.(I   .k  + I   .k    +...+ I     .k  + I   .k )             */ \
                                        /*                   p+n      d    p+0       p+1             p+n-1       p+n                 */ \
                                        /*                                                                                           */ \
                                        /* et :                                                                                      */ \
                                        /*                            1                   n                 2         1           0  */ \
                                        /*                  T      = ---.(          I   .k    +...+ I     .k  + I   .k  + I     .k ) */ \
                                        /*                   p+n+1    d              p+1             p+n-1       p+n       p+n+1     */ \
                                        /*                                                                                           */ \
                                        /* d'ou :                                                                                    */ \
                                        /*                                                                                           */ \
                                        /*                                     1   n         1   0                                   */ \
                                        /*                  T      = k.T    - ---.k .I    + ---.k .I                                 */ \
                                        /*                   p+n+1      p+n    d      p+0    d      p+n+1                            */ \
                                        /*                                                                                           */ \
                                        /* Or malheureusement, ici, nous avons perdu la memoire des evenements passes, et donc       */ \
                                        /* nous approximons en :                                                                     */ \
                                        /*                                                                                           */ \
                                        /*                                     1   0                                                 */ \
                                        /*                  T      = k.T    + ---.k .I                                               */ \
                                        /*                   p+n+1      p+n    d      p+n+1                                          */ \
                                        /*                                                                                           */ \
                                        /* En fait se pose de plus un grave probleme de "stabilite" des niveaux, car en effet        */ \
                                        /* il faut qu'ils restent dans [NOIR,BLANC]. Or une renormalisation "locale" entrainerait    */ \
                                        /* d'une image a une autre des fluctuations (par exemple sur les quarks reels). Reecrivons   */ \
                                        /* donc la formule precedente de la facon suivante :                                         */ \
                                        /*                                                                                           */ \
                                        /*                  T    = a.T  + b.I                                                        */ \
                                        /*                   m+1      m      m+1                                                     */ \
                                        /*                                                                                           */ \
                                        /* en developpant la formule de recurrence, et en utilisant les niveaux maximaux, nous       */ \
                                        /* trouvons la condition suivante afin de rester dans [NOIR,BLANC] :                         */ \
                                        /*                                                                                           */ \
                                        /*                          0    1    2        m                                             */ \
                                        /*                  1 = b.(a  + a  + a  +...+ a )                                            */ \
                                        /*                                                                                           */ \
                                        /* d'ou :                                                                                    */ \
                                        /*                                                                                           */ \
                                        /*                              m+1                                                          */ \
                                        /*                         1 - a                                                             */ \
                                        /*                  1 = b.----------                                                         */ \
                                        /*                          1 - a                                                            */ \
                                        /*                                                                                           */ \
                                        /*                                          m+1                                              */ \
                                        /* et en faisant tendre 'm' vers l'infini, a    devient negligeable :                        */ \
                                        /*                                                                                           */ \
                                        /*                         b                                                                 */ \
                                        /*                  1 = -------                                                              */ \
                                        /*                       1 - a                                                               */ \
                                        /*                                                                                           */ \
                                        /* d'ou la formule de recurrence de calcul des trainees :                                    */ \
                                        /*                                                                                           */ \
                                        /*                  T      = k.T    + (1-k).I                                                */ \
                                        /*                   p+n+1      p+n          p+n+1                                           */ \
                                        /*                                                                                           */ \
                                        /* la stabilite est alors garantie puisque :                                                 */ \
                                        /*                                                                                           */ \
                                        /*                  k + (1-k) = 1                                                            */ \
                                        /*                                                                                           */ \
                                        /* Enfin, pour etre plus general (et puisque 'Icalcul_iteratif_des_trainees(...)' contient   */ \
                                        /* un 'TRON(...)' garantissant les niveaux dans [NOIR,BLANC]), on prend :                    */ \
                                        /*                                                                                           */ \
                                        /*                  T      = a.T    + b.I                                                    */ \
                                        /*                   p+n+1      p+n      p+n+1                                               */ \
                                        /*                                                                                           */ \
                                        /* On notera enfin que 'k' multiplie le cumul courant, et '1-k' l'image courante, et non     */ \
                                        /* pas l'inverse...                                                                          */
#Eifdef   BUG_SYSTEME_DPX5000_SPIX_CC_LACT11_ZONE_DE_SWAP_2

#ifdef    BUG_SYSTEME_DPX5000_SPIX_CC_LACT11_ZONE_DE_SWAP_2
#    define    MISE_A_JOUR_D_UN_CUMUL_POUR_LE_CALCUL_DES_TRAINEES(cumul,composante)                                                     \
                         Bblock                                                                                                         \
                         PRINT_ATTENTION("sur 'SYSTEME_DPX5000_SPIX_CC' le calcul des trainees n'est pas implante");                    \
                         Eblock                                                                                                         \
                                        /* Mise a jour du cumul (non implante sur 'SYSTEME_DPX5000_SPIX_CC').                        */
#Aifdef   BUG_SYSTEME_DPX5000_SPIX_CC_LACT11_ZONE_DE_SWAP_2
#    define    MISE_A_JOUR_D_UN_CUMUL_POUR_LE_CALCUL_DES_TRAINEES(cumul,composante)                                                     \
                         Bblock                                                                                                         \
                         Test(IL_FAUT(generer_les_trainees))                                                                            \
                              Bblock                                                                                                    \
                              CALS(Imove(cumul,composante));                                                                            \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Eblock                                                                                                         \
                                        /* Mise a jour du cumul, le 'cumul' donnant l'etat courant des trainees...                   */
#Eifdef   BUG_SYSTEME_DPX5000_SPIX_CC_LACT11_ZONE_DE_SWAP_2

#define   RENORMALISER_BRUTALEMENT_LES_TRAINEES                                                                                         \
                    FAUX
DEFV(Local,DEFV(Logical,INIT(renormaliser_brutalement_les_trainees,RENORMALISER_BRUTALEMENT_LES_TRAINEES)));
                                        /* Indicateur disant si les trainees doivent etre renormalisees brutalement (introduit       */
                                        /* le 20241121174308)..                                                                      */

#define   RENORMALISER_LES_TRAINEES                                                                                                     \
                    VRAI
DEFV(Local,DEFV(Logical,INIT(renormaliser_les_trainees,RENORMALISER_LES_TRAINEES)));
                                        /* Indicateur disant si les trainees doivent etre renormalisees en fonction de l'"image"     */
                                        /* du 'BLANC' renvoyee par 'Icalcul_iteratif_des_trainees(...)'.                             */

DEFV(Local,DEFV(genere_p,INIT(trainee_du_ROUGE_avant,NIVEAU_UNDEF)));
DEFV(Local,DEFV(genere_p,INIT(trainee_du_ROUGE_apres,NOIR)));

DEFV(Local,DEFV(genere_p,INIT(trainee_du_VERTE_avant,NIVEAU_UNDEF)));
DEFV(Local,DEFV(genere_p,INIT(trainee_du_VERTE_apres,NOIR)));

DEFV(Local,DEFV(genere_p,INIT(trainee_du_BLEUE_avant,NIVEAU_UNDEF)));
DEFV(Local,DEFV(genere_p,INIT(trainee_du_BLEUE_apres,NOIR)));
                                        /* "Images" du 'BLANC' ('BLANC' designant le niveau maximal possible pour une composante     */
                                        /* 'ROUGE', 'VERTE' ou 'BLEUE') par le processus de calcul des trainees ; rappelons que      */
                                        /* 'Icalcul_iteratif_des_trainees' est, comme son nom l'indique, un processus iteratif.      */
                                        /* Cette fonction renvoie donc a chaque appel l'image courante du 'BLANC' suivant :          */
                                        /*                                                                                           */
                                        /*                  I   (BLANC) = k.I (BLANC) + (1-k).BLANC                                  */
                                        /*                   n+1             n                                                       */
                                        /*                                                                                           */
                                        /* ou 'I (BLANC)' designe l'image du 'BLANC' avant l'appel,                                  */
                                        /*      n                                                                                    */
                                        /*                                                                                           */
                                        /* et 'I   (BLANC)' designe l'image du 'BLANC' apres l'appel (voir le 'RETU(...)').          */
                                        /*      n+1                                                                                  */
                                        /*                                                                                           */

#ifdef    BUG_SYSTEME_DPX5000_SPIX_CC_LACT11_ZONE_DE_SWAP_2
#    define    RENORMALISATION_EVENTUELLE_D_UNE_COMPOSANTE(composante,trainee_du_BLANC_avant,trainee_du_BLANC_apres)                    \
                         Bblock                                                                                                         \
                         PRINT_ATTENTION("sur 'SYSTEME_DPX5000_SPIX_CC' le calcul des trainees n'est pas implante");                    \
                         Eblock                                                                                                         \
                                        /* Renormalisation eventuelle d'une composante (non implante sur 'SYSTEME_DPX5000_SPIX_CC'). */
#Aifdef   BUG_SYSTEME_DPX5000_SPIX_CC_LACT11_ZONE_DE_SWAP_2
#    define    RENORMALISATION_EVENTUELLE_D_UNE_COMPOSANTE(composante,trainee_du_BLANC_avant,trainee_du_BLANC_apres)                    \
                         Bblock                                                                                                         \
                         Test(I3ET(IL_FAUT(generer_les_trainees)                                                                        \
                                  ,IL_FAUT(renormaliser_les_trainees)                                                                   \
                                  ,IFEQ(mode_de_generation_des_trainees,CALCUL_STANDARD_DES_TRAINEES)                                   \
                                   )                                                                                                    \
                              )                                                                                                         \
                              Bblock                                                                                                    \
                              Test(IL_FAUT(renormaliser_brutalement_les_trainees))                                                      \
                                   Bblock                                                                                               \
                                   CALS(Irenormalisation(composante,composante));                                                       \
                                        /* Introduit le 20241121174308...                                                            */ \
                                   Eblock                                                                                               \
                              ATes                                                                                                      \
                                   Bblock                                                                                               \
                                   Test(IFET(IFGE(trainee_du_BLANC_apres,trainee_du_BLANC_avant)                                        \
                                            ,IFGT(trainee_du_BLANC_apres,NOIR)                                                          \
                                             )                                                                                          \
                                        )                                                                                               \
                                        Bblock                                                                                          \
                                        CALS(Iscale(composante                                                                          \
                                                   ,INVE(______NORMALISE_NIVEAU(trainee_du_BLANC_apres))                                \
                                                   ,composante                                                                          \
                                                   ,FZERO                                                                               \
                                                    )                                                                                   \
                                             );                                                                                         \
                                        /* On renormalise la composante courante, en remontant son niveau maximal en fonction de     */ \
                                        /* l'image du BLANC...                                                                       */ \
                                        Eblock                                                                                          \
                                   ATes                                                                                                 \
                                        Bblock                                                                                          \
                                        PRINT_ERREUR("l'image de trainee du 'BLANC' ne peut que croitre");                              \
                                        Eblock                                                                                          \
                                   ETes                                                                                                 \
                                   Eblock                                                                                               \
                              ETes                                                                                                      \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Eblock                                                                                                         \
                                        /* Renormalisation eventuelle d'une composante en fonction de l'"image" de son niveau        */ \
                                        /* maximal (appele 'BLANC') par la fonction de trainee...                                    */
#Eifdef   BUG_SYSTEME_DPX5000_SPIX_CC_LACT11_ZONE_DE_SWAP_2




Copyright © Jean-François COLONNA, 2019-2025.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2019-2025.