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