/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N S   D E   L ' I N T E R P O L A T I O N   D E S   P A R A M E T R E S  :                               */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xrq/nucleon.Lf.2$I' :                                                                                          */
/*                                                                                                                                   */
/*                    Jean-Francois Colonna (LACTAMME, 1992??????????).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        V E C T E U R S   D E S   T R A N S F O R M A T I O N S  :                                                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   dTRANSFORMAT_31(liste_des_transformations)                                                                                    \
                    gDEFINITION_LISTE(liste_des_transformations,NOMBRE_MAXIMAL_DE_PERIODES_DE_LA_SIMULATION)                            \
                                        /* Definition d'une liste de transformations particulieres. Ces vecteurs contiennent autant  */ \
                                        /* d'entrees qu'il y a de periodes de simulation possible, chacune d'entre elles donnant     */ \
                                        /* alors la valeur de la grandeur correspondante (par exemple 'ZOOM') a l'instant courant.   */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        G E N E R A L I T E S   S U R   L E S   T R A N S F O R M A T I O N S  :                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   sTRANSFORMAT_31(np,liste_des_transformations)                                                                                 \
                    gACCES_LISTE(np                                                                                                     \
                                ,liste_des_transformations                                                                              \
                                ,NUMERO_DE_LA_PREMIERE_PERIODE_DE_LA_SIMULATION                                                         \
                                ,nombre_de_periodes_de_la_simulation                                                                    \
                                 )                                                                                                      \
                                        /* Formule generale definissant la suite des transformations possibles.                      */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I N I T I A L I S A T I O N   D E S   I N T E R P O L A T I O N S  :                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   iTRANSFORMAT_31(liste_des_transformations,valeur_initiale)                                                                    \
                    Bblock                                                                                                              \
                    gINITIALISATION_LISTE(liste_des_transformations                                                                     \
                                         ,valeur_initiale                                                                               \
                                         ,NUMERO_DE_LA_PREMIERE_PERIODE_DE_LA_SIMULATION                                                \
                                         ,NOMBRE_MAXIMAL_DE_PERIODES_DE_LA_SIMULATION                                                   \
                                          )                                                                                             \
                    Eblock                                                                                                              \
                                        /* Initialisation d'une liste de transformations particulieres.                              */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F I C H I E R S   D E S   T R A N S F O R M A T I O N S   S P E C I F I Q U E S  :                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   EN_TETE_DANS_LES_FICHIERS_DES_TRANSFORMATIONS                                                                                 \
                    ZERO
#define   SAUT_DANS_LES_FICHIERS_DES_TRANSFORMATIONS                                                                                    \
                    ZERO
DEFV(Local,DEFV(Positive,INIT(en_tete_dans_les_fichiers_des_transformations,EN_TETE_DANS_LES_FICHIERS_DES_TRANSFORMATIONS)));
DEFV(Local,DEFV(Positive,INIT(saut_dans_les_fichiers_des_transformations,SAUT_DANS_LES_FICHIERS_DES_TRANSFORMATIONS)));
                                        /* Definition du nombre de valeurs a sauter entre deux valeurs recuperees des fichiers de    */
                                        /* transformations. L'amplitude du saut sur le debut du fichier ("en_tete") a ete            */
                                        /* introduite le 20021104172814 par symetrie avec '$xrv/particule.11$I 20021104161517'.      */

#define   fTRANSFORMAT_31(fichier_des_transformations)                                                                                  \
                    DEFV(Local,DEFV(CHAR,INIT(POINTERc(fichier_des_transformations),NOM_PIPE_Local)));                                  \
                                        /* Definition d'un fichier de transformations particulieres.                                 */

#define   dfTRANSFORMAT_31(liste_des_transformations,fichier_des_transformations,VALEUR_IMPLICITE,valeur_par_defaut)                    \
                    dTRANSFORMAT_31(liste_des_transformations);                                                                         \
                    fTRANSFORMAT_31(fichier_des_transformations);                                                                       \
=    TestADef  VALEUR_IMPLICITE         valeur_par_defaut
                                        /* Definition d'une liste de transformations particulieres, du fichier associe et du         */
                                        /* symbole de valeur implicite (ainsi que la valeur par defaut de celui-ci).                 */
                                        /*                                                                                           */
                                        /* ATTENTION, lors de l'appel de 'dfTRANSFORMAT_31(...)', il est imperatif de ne pas mettre  */
                                        /* de caractere ";" de fin et donc d'ecrire :                                                */
                                        /*                                                                                           */
                                        /*                  dfTRANSFORMAT_31(...)                                                    */
                                        /*                                                                                           */
                                        /* car, en effet, dans le cas contraire, ce caractere ";" fait partie de la definition du    */
                                        /* symbole 'VALEUR_IMPLICITE' dont la valeur est alors 'valeur_par_defaut;'.                 */

#ifdef    GESTION_DES_LISTES_QUELCONQUES_VERSION_01
#    define    gTRANSFORMAT_31(fichier_des_transformations,liste_des_transformations,valeur_par_defaut)                                 \
                         Bblock                                                                                                         \
                         EGAL(nombre_de_periodes_de_la_simulation                                                                       \
                             ,MIN2(nombre_de_periodes_de_la_simulation                                                                  \
                                  ,NOMBRE_MAXIMAL_DE_PERIODES_DE_LA_SIMULATION                                                          \
                                   )                                                                                                    \
                              );                                                                                                        \
                                        /* On notera que cette mise a jour aura lieu plusieurs fois, mais sans consequences...       */ \
                                                                                                                                        \
                         CALS(Fload_fichier_formatte_Float(fichier_des_transformations                                                  \
                                                          ,liste_des_transformations                                                    \
                                                          ,nombre_de_periodes_de_la_simulation                                          \
                                                          ,ZERO                                                                         \
                                                          ,saut_dans_les_fichiers_des_transformations                                   \
                                                          ,VRAI                                                                         \
                                                          ,FLOT(valeur_par_defaut)                                                      \
                                                          ,LE_NOM_DU_FICHIER_EST_CONVERTISSABLE_EN_UNE_VALEUR_NUMERIQUE                 \
                                                           )                                                                            \
                              );                                                                                                        \
                                        /* ATTENTION, jusqu'au 20010422142633, a la place de 'nombre_de_periodes_de_la_simulation',  */ \
                                        /* il y avait :                                                                              */ \
                                        /*                                                                                           */ \
                                        /*                  MIN2(nombre_de_periodes_de_la_simulation                                 */ \
                                        /*                      ,NOMBRE_MAXIMAL_DE_PERIODES_DE_LA_SIMULATION                         */ \
                                        /*                       )                                                                   */ \
                                        /*                                                                                           */ \
                                        /* et cette valeur devait se retrouver aussi dans la definition de '__ParaLon', ce qui se    */ \
                                        /* trouve etre incompatible avec le fonctionnement de 'v $xcc/ccp$Z' qui, etant donnee la    */ \
                                        /* definition de 'NOMBRE_MAXIMAL_DE_PERIODES_DE_LA_SIMULATION' (via 'DIX_MILLE'), est        */ \
                                        /* decoupee au cours du processus, et le 'define' correspondant se retrouve sur deux         */ \
                                        /* lignes. D'ou cette solution...                                                            */ \
                                                                                                                                        \
&define   __ParaVal liste_des_transformations&&&                                                                                        \
&define   __ParaInd PREMIER_ELEMENT_D_UN_FICHIER&&&                                                                                     \
&define   __ParaLon nombre_de_periodes_de_la_simulation&&&                                                                              \
&define   __ParaTyp TYPE_FORMAT_FLOT&&&                                                                                                 \
&define   __ParaFor FORMAT_FLOT_EDITION&&&                                                                                              \
                                                                                                                                        \
                         Eblock                                                                                                         \
                                        /* Recuperation d'un fichier de transformations quelconque. On notera la syntaxe :           */ \
                                        /*                                                                                           */ \
                                        /*                  FLOT(valeur_par_defaut)                                                  */ \
                                        /*                                                                                           */ \
                                        /* rendue obligatoire par les cas ou 'valeur_par_defaut' est une constante entiere (ou du    */ \
                                        /* moins une constante qui a l'air d'etre entiere). Ce cas s'est rencontre dans le programme */ \
                                        /* 'v $xrk/ergodique.11$K' avec 'NOMBRE_D_ITERATIONS_IMPLICITE' lorsque fut introduite la    */ \
                                        /* possibilite de convertir un nom de fichier en valeur numerique...                         */
#Aifdef   GESTION_DES_LISTES_QUELCONQUES_VERSION_01
#Eifdef   GESTION_DES_LISTES_QUELCONQUES_VERSION_01

#ifdef    GESTION_DES_LISTES_QUELCONQUES_VERSION_02
#    define    gTRANSFORMAT_31(fichier_des_transformations,liste_des_transformations,valeur_par_defaut)                                 \
                         Bblock                                                                                                         \
                         gaINITIALISATION_LISTE(liste_des_transformations                                                               \
                                               ,valeur_par_defaut                                                                       \
                                               ,NUMERO_DE_LA_PREMIERE_PERIODE_DE_LA_SIMULATION                                          \
                                               ,nombre_de_periodes_de_la_simulation                                                     \
                                                );                                                                                      \
                                        /* Allocation de la memoire necessaire et initialisation par defaut (operation redondante    */ \
                                        /* avec celle qui est faite dans 'Fload_fichier_formatte_Float(...)').                       */ \
                                                                                                                                        \
                         CALS(Fload_fichier_formatte_Float(fichier_des_transformations                                                  \
                                                          ,liste_des_transformations                                                    \
                                                          ,nombre_de_periodes_de_la_simulation                                          \
                                                          ,ZERO                                                                         \
                                                          ,saut_dans_les_fichiers_des_transformations                                   \
                                                          ,VRAI                                                                         \
                                                          ,FLOT(valeur_par_defaut)                                                      \
                                                          ,LE_NOM_DU_FICHIER_EST_CONVERTISSABLE_EN_UNE_VALEUR_NUMERIQUE                 \
                                                           )                                                                            \
                              );                                                                                                        \
                                                                                                                                        \
&define   __ParaVal liste_des_transformations&&&                                                                                        \
&define   __ParaInd PREMIER_ELEMENT_D_UN_FICHIER&&&                                                                                     \
&define   __ParaLon nombre_de_periodes_de_la_simulation&&&                                                                              \
&define   __ParaTyp TYPE_FORMAT_FLOT&&&                                                                                                 \
&define   __ParaFor FORMAT_FLOT_EDITION&&&                                                                                              \
                                                                                                                                        \
                         Eblock                                                                                                         \
                                        /* Recuperation d'un fichier de transformations quelconque. On notera la syntaxe :           */ \
                                        /*                                                                                           */ \
                                        /*                  FLOT(valeur_par_defaut)                                                  */ \
                                        /*                                                                                           */ \
                                        /* rendue obligatoire par les cas ou 'valeur_par_defaut' est une constante entiere (ou du    */ \
                                        /* moins une constante qui a l'air d'etre entiere). Ce cas s'est rencontre dans le programme */ \
                                        /* 'v $xrk/ergodique.11$K' avec 'NOMBRE_D_ITERATIONS_IMPLICITE' lorsque fut introduite la    */ \
                                        /* possibilite de convertir un nom de fichier en valeur numerique...                         */
#Aifdef   GESTION_DES_LISTES_QUELCONQUES_VERSION_02
#Eifdef   GESTION_DES_LISTES_QUELCONQUES_VERSION_02

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R E C U P E R A T I O N   D ' U N E   V A L E U R   D A N S   U N   F I C H I E R                                          */
/*        D E   T R A N S F O R M A T I O N S   S P E C I F I Q U E S   S ' I L   E X I S T E  :                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   vTRANSFORMAT_31(variable,acces_a_la_liste_des_transformations,index_d_acces,fichier_des_transformations)                      \
                    Bblock                                                                                                              \
                    Test(IFNE_chaine(fichier_des_transformations,NOM_PIPE_Local))                                                       \
                         Bblock                                                                                                         \
                         EGAL(variable,acces_a_la_liste_des_transformations(index_d_acces));                                            \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Recuperation de la valeur d'une variable dans un fichier si celui-ci existe...            */



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