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