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

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        V E C T E U R S   D E S   V A L E U R S   I N T E R P O L E E S   D E S   P A R A M E T R E S  :                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   LISTE_DES_VALEURS_INTERPOLEES_NON_ENCORE_ALLOUEE                                                                              \
                    STATIQUE_UNDEF                                                                                                      \
                                        /* Valeur d'une liste dont la memoire n'a pas encore ete allouee...                          */

#define   dTRANSFORMAT_21(liste_des_valeurs_interpolees)                                                                                \
                    DEFV(Local,DEFV(Float,DdTb1(POINTERf                                                                                \
                                               ,liste_des_valeurs_interpolees                                                           \
                                               ,nombre_de_periodes_de_la_simulation                                                     \
                                               ,LISTE_DES_VALEURS_INTERPOLEES_NON_ENCORE_ALLOUEE                                        \
                                                )                                                                                       \
                                    )                                                                                                   \
                         );                                                                                                             \
                                        /* Definition d'une liste de valeurs interpolees particulieres. Ces vecteurs contiennent     */ \
                                        /* autant d'entrees qu'il y a de periodes de simulation demandee, chacune d'entre elles      */ \
                                        /* donnant alors la valeur de la grandeur correspondante (par exemple 'ZOOM') a l'instant    */ \
                                        /* courant.                                                                                  */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F I C H I E R S   D E S   V A L E U R S   I N T E R P O L E E S   D E S   P A R A M E T R E S  :                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   SAUT_DANS_LES_FICHIERS_DES_VALEURS_INTERPOLEES                                                                                \
                    ZERO
DEFV(Local,DEFV(Positive,INIT(saut_dans_les_fichiers_des_valeurs_interpolees,SAUT_DANS_LES_FICHIERS_DES_VALEURS_INTERPOLEES)));
                                        /* Definition du nombre de valeurs a sauter entre deux valeurs recuperees des fichiers de    */
                                        /* valeurs interpolees.                                                                      */

#define   fTRANSFORMAT_21(fichier_des_valeurs_interpolees)                                                                              \
                    DEFV(Local,DEFV(CHAR,INIT(POINTERc(fichier_des_valeurs_interpolees),NOM_PIPE_Local)));                              \
                                        /* Definition d'un fichier de valeurs interpolees particulieres.                             */

#define   dfTRANSFORMAT_21(liste_des_valeurs_interpolees,fichier_des_valeurs_interpolees,VALEUR_IMPLICITE,valeur_par_defaut)            \
                    dTRANSFORMAT_21(liste_des_valeurs_interpolees);                                                                     \
                    fTRANSFORMAT_21(fichier_des_valeurs_interpolees);                                                                   \
=    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_21(...)', il est imperatif de ne pas mettre  */
                                        /* de caractere ";" de fin et donc d'ecrire :                                                */
                                        /*                                                                                           */
                                        /*                  dfTRANSFORMAT_21(...)                                                    */
                                        /*                                                                                           */
                                        /* 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;'.                 */

#define   gTRANSFORMAT_21(fichier_des_valeurs_interpolees,liste_des_valeurs_interpolees,valeur_par_defaut)                              \
                    Bblock                                                                                                              \
                    iTRANSFORMAT_21(liste_des_valeurs_interpolees,valeur_par_defaut);                                                   \
                                        /* 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_valeurs_interpolees                                                   \
                                                     ,liste_des_valeurs_interpolees                                                     \
                                                     ,nombre_de_periodes_de_la_simulation                                               \
                                                     ,ZERO                                                                              \
                                                     ,saut_dans_les_fichiers_des_valeurs_interpolees                                    \
                                                     ,VRAI                                                                              \
                                                     ,FLOT(valeur_par_defaut)                                                           \
                                                     ,LE_NOM_DU_FICHIER_EST_CONVERTISSABLE_EN_UNE_VALEUR_NUMERIQUE                      \
                                                      )                                                                                 \
                         );                                                                                                             \
                                                                                                                                        \
&define   __ParaVal liste_des_valeurs_interpolees&&&                                                                                    \
&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 valeurs interpolees 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 */ \
                                        /* '$xrk/ergodique.11$K' avec 'NOMBRE_D_ITERATIONS_IMPLICITE' lorsque fut introduite la      */ \
                                        /* possibilite de convertir un nom de fichier en valeur numerique...                         */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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_21(liste_des_valeurs_interpolees,valeur_initiale)                                                                \
                    Bblock                                                                                                              \
                    DEFV(Int,INIT(index,UNDEF));                                                                                        \
                                        /* Index d'initialisation d'une liste de valeurs interpolees particulieres.                  */ \
                                                                                                                                        \
                    Test(IFEQ(liste_des_valeurs_interpolees,LISTE_DES_VALEURS_INTERPOLEES_NON_ENCORE_ALLOUEE))                          \
                         Bblock                                                                                                         \
                                        /* Cas ou la liste n'a pas encore ete allouee : il s'agit soit du passage dans la procedure  */ \
                                        /* 'gTRANSFORMAT_21(...)' lors de la lecture du fichier des valeurs, soit, lorsqu'il n'y a   */ \
                                        /* pas eu de fichier demande, de l'initialisation a priori, apres l'appel a la procedure     */ \
                                        /* 'GET_ARGUMENTSv(...)'.                                                                    */ \
                         MdTb1(liste_des_valeurs_interpolees                                                                            \
                              ,nombre_de_periodes_de_la_simulation                                                                      \
                              ,Float                                                                                                    \
                              ,LISTE_DES_VALEURS_INTERPOLEES_NON_ENCORE_ALLOUEE                                                         \
                               );                                                                                                       \
                                        /* Allocation de la memoire necessaire a cette liste de transformation...                    */ \
                                                                                                                                        \
                         DoIn(index                                                                                                     \
                             ,NUMERO_DE_LA_PREMIERE_PERIODE                                                                             \
                             ,LSTX(NUMERO_DE_LA_PREMIERE_PERIODE,nombre_de_periodes_de_la_simulation)                                   \
                             ,I                                                                                                         \
                              )                                                                                                         \
                              Bblock                                                                                                    \
                              EGAL(sTRANSFORMAT_21(index,liste_des_valeurs_interpolees)                                                 \
                                  ,valeur_initiale                                                                                      \
                                   );                                                                                                   \
                                        /* Et on initialise element par element...                                                   */ \
                              Eblock                                                                                                    \
                         EDoI                                                                                                           \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                                        /* Cas ou la liste a deja ete allouee : cela signifie que l'on est ici apres l'appel a la    */ \
                                        /* procedure 'GET_ARGUMENTSv(...)' et qu'un fichier de valeurs a donc ete lu...              */ \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Initialisation d'une liste de valeurs interpolees particulieres.                          */

#define   lTRANSFORMAT_21(liste_des_valeurs_interpolees)                                                                                \
                    Bblock                                                                                                              \
                    FdTb1(liste_des_valeurs_interpolees                                                                                 \
                         ,nombre_de_periodes_de_la_simulation                                                                           \
                         ,size_Float                                                                                                    \
                         ,LISTE_DES_VALEURS_INTERPOLEES_NON_ENCORE_ALLOUEE                                                              \
                          );                                                                                                            \
                                        /* Liberation de la memoire necessaire a cette liste de transformation...                    */ \
                                        /*                                                                                           */ \
                                        /* Le 'LISTE_DES_VALEURS_INTERPOLEES_NON_ENCORE_ALLOUEE' a ete introduit le 20050221173032.  */ \
                    Eblock                                                                                                              \
                                        /* Liberation d'une liste de valeurs interpolees particulieres.                              */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        G E N E R A L I T E S   S U R   L E S   V A L E U R S   I N T E R P O L E E S   D E S   P A R A M E T R E S  :             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   sTRANSFORMAT_21(np,liste_des_valeurs_interpolees)                                                                             \
                    IdTb1(liste_des_valeurs_interpolees                                                                                 \
                         ,INDX(np,NUMERO_DE_LA_PREMIERE_PERIODE)                                                                        \
                         ,nombre_de_periodes_de_la_simulation                                                                           \
                          )                                                                                                             \
                                        /* Formule generale definissant la suite des valeurs interpolees possibles.                  */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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   V A L E U R S   I N T E R P O L E E S   D E S   P A R A M E T R E S   S ' I L   E X I S T E  :                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   vTRANSFORMAT_21(variable,acces_a_la_liste_des_valeurs_interpolees,index_d_acces,fichier_des_valeurs_interpolees)              \
                    Bblock                                                                                                              \
                    Test(IFNE_chaine(fichier_des_valeurs_interpolees,NOM_PIPE_Local))                                                   \
                         Bblock                                                                                                         \
                         EGAL(variable,acces_a_la_liste_des_valeurs_interpolees(index_d_acces));                                        \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Recuperation de la valeur d'une variable dans un fichier si celui-ci existe...            */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F I N   D E S   I N T E R P O L A T I O N S  :                                                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   rTRANSFORMAT_21(liste_des_valeurs_interpolees)                                                                                \
                    Bblock                                                                                                              \
                    CALZ_FreSS(liste_des_valeurs_interpolees);                                                                          \
                                        /* Restitution de la memoire allouee a cette liste de transformation...                      */ \
                    Eblock                                                                                                              \
                                        /* Restitution de la memoire allouee a cette liste de transformation...                      */



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