/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        G E N E R A T I O N   D E   S U I T E S   D E   V A L E U R S  :                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xci/valeurs.02$I' :                                                                                            */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 1994??????????).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M A C R O S   U T I L E S  :                                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#ifndef   iTRANSFORMATION
                                        /* Ceci a ete ajoute le 20000117113044 lorsque ce fichier a ete inclus dans pratiquement     */
                                        /* tous les programmes '$xrv/*$K', alors que 'iTRANSFORMATION' est deja defini dans          */
                                        /* '$xrq/nucleon.LX.1$I', '$xrq/nucleon.Lf.2$I' et '$xrq/particle.Mf$I'.                     */
#    define    iTRANSFORMATION(np,npA,npB)                                                                                              \
                         ADD2(DIVI(FLOT(SOUS(np,npA)),FLOT(SOUS(npB,npA))),COORDONNEE_BARYCENTRIQUE_MINIMALE)                           \
                                        /* Formule definissant la coordonnee barycentrique d'interpolation pour le numero de         */ \
                                        /* periode 'np' dans [npA,npB] :                                                             */ \
                                        /*                                                                                           */ \
                                        /*                   np  - npA                                                               */ \
                                        /*                  -----------                                                              */ \
                                        /*                   npB - npA                                                               */ \
                                        /*                                                                                           */ \
                                        /* Enfin, on notera que lors du calcul de 'iTRANSFORMATION(...)', on ne verifie pas que le   */ \
                                        /* resultat est dans [COORDONNEE_BARYCENTRIQUE_MINIMALE,COORDONNEE_BARYCENTRIQUE_MAXIMALE].  */
#    define    iDERIVATION(dt,npA,npB)                                                                                                  \
                         DIVI(dt,LENG(npA,npB))                                                                                         \
                                        /* Formule "renormalisant" les derivees par rapport au nombre de periodes.                   */

#    define    iINTERPOLATION_LINEAIRE(tA,dtA,tB,dtB,np,npA,npB)                                                                        \
                         INTERPOLATION_LINEAIRE(tA                                                                                      \
                                               ,tB                                                                                      \
                                               ,iTRANSFORMATION(np,npA,npB)                                                             \
                                                )
#    define    iINTERPOLATION_CUBIQUE(tA,dtA,tB,dtB,np,npA,npB)                                                                         \
                         INTERPOLATION_CUBIQUE(tA,iDERIVATION(dtA,npA,npB)                                                              \
                                              ,tB,iDERIVATION(dtB,npA,npB)                                                              \
                                              ,iTRANSFORMATION(np,npA,npB)                                                              \
                                               )
                                        /* Formules definissant les methodes d'interpolation.                                        */
#Aifndef  iTRANSFORMATION
#Eifndef  iTRANSFORMATION

#define   EDITION_DE_LA_VALEUR_DE_L_OPERATEUR(valeur_de_l_operateur)                                                                    \
                    Bblock                                                                                                              \
                    DEFV(CHAR,INIT(POINTERc(format_d_edition_de_la_valeur_de_l_operateur)                                               \
                                  ,chain_Aconcaten4(INTRODUCTION_FORMAT,valeurs_signees,".*",FORMAT_D_EDITION_EFFECTIF)                 \
                                   )                                                                                                    \
                         );                                                                                                             \
                                                                                                                                        \
                    CAL2(Prin2(Cara(format_d_edition_de_la_valeur_de_l_operateur)                                                       \
                              ,NOMBRE_DE_DECIMALES_EFFECTIF(nombre_de_decimales)                                                        \
                              ,MULTIPLE_DE(ENTIER_FLOTTANT(valeur_de_l_operateur))                                                      \
                               )                                                                                                        \
                         );                                                                                                             \
                                                                                                                                        \
                    CALZ_FreCC(format_d_edition_de_la_valeur_de_l_operateur);                                                           \
                    Eblock                                                                                                              \
                                        /* Introduit le 20180313142557 pour permettre l'execution d'un 'CALZ_FreCC(...)'...          */

#ifdef    DES_NOMBRES_ENTIERS
                                        /* Ceci a ete ajoute le 20081120143333 pour 'v $xci/valeurs_SurR$K 20081120142701'...        */
#    define    FORMAT_D_EDITION_EVENTUELLEMENT_ENTIER                                                                                   \
                         COND(IL_FAUT(des_nombres_entiers)                                                                              \
                             ,ptCARA(FORMAT_D_EDITION_g)                                                                                \
                             ,format_d_edition                                                                                          \
                              )                                                                                                         \
                                        /* Dans le cas ou l'edition de nombres entiers est demande, il faut forcer le format         */ \
                                        /* 'FORMAT_D_EDITION_g'. Ceci fut introduit le 20081120100649 afin de permettre d'editer     */ \
                                        /* des nombres entiers avec des ecritures (d'apparence paradoxale) du type :                 */ \
                                        /*                                                                                           */ \
                                        /*                  format=f entier=VRAI                                                     */ \
                                        /*                                                                                           */ \
                                        /* Dans cet exemple le parametre "format=f" sera ignore et "format=g" sera en fait utilise   */ \
                                        /* grace a la procedure 'FORMAT_D_EDITION_g'. Cela s'est vu lors du developpement des        */ \
                                        /* commandes du type 'v $xci/StatLigne.01$Z .FoRmAt.entier=VRAI' ou la variable '$FoRmAt'    */ \
                                        /* contient "format=f"...                                                                    */
#Aifdef   DES_NOMBRES_ENTIERS
#    define    FORMAT_D_EDITION_EVENTUELLEMENT_ENTIER                                                                                   \
                         format_d_edition
#Eifdef   DES_NOMBRES_ENTIERS

#define   FORMAT_D_EDITION_EFFECTIF                                                                                                     \
                    COND(IL_FAUT(ajouter_un_K_LF_en_fin_de_format_d_edition)                                                            \
                        ,chain_Aconcaten2(FORMAT_D_EDITION_EVENTUELLEMENT_ENTIER,C_LF)                                                  \
                        ,FORMAT_D_EDITION_EVENTUELLEMENT_ENTIER                                                                         \
                         )                                                                                                              \
                                        /* Format d'edition effectif (introduit le 20040323142056).                                  */

#ifdef    DES_NOMBRES_ENTIERS
                                        /* Ceci a ete ajoute le 20081121142050 pour 'v $xci/valeurs_SurR$K 20081120142701'...        */
#    define    NOMBRE_DE_DECIMALES_EFFECTIF(nombre_de_decimales)                                                                        \
                         COND(IL_FAUT(des_nombres_entiers)                                                                              \
                             ,NOMBRE_DE_DECIMALES                                                                                       \
                             ,COND(IFEQ_chaine(FORMAT_D_EDITION_EVENTUELLEMENT_ENTIER,FORMAT_D_EDITION_g)                               \
                                  ,nombre_de_decimales                                                                                  \
                                  ,nombre_de_decimales                                                                                  \
                                   )                                                                                                    \
                              )                                                                                                         \
                                        /* Formule permettant de selectionner le nombre de decimales effectif en fonction du format  */ \
                                        /* utilise, sachant qu'avec le format "g" le "nombre de decimales" designe en fait le        */ \
                                        /* nombre de chiffres...                                                                     */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION, pendant "quelques minutes" avant le 20011207174434, j'ai utilise :             */ \
                                        /*                                                                                           */ \
                                        /*                  COND(IFEQ_chaine(format_d_edition,FORMAT_D_EDITION_g)                    */ \
                                        /*                      ,NOMBRE_DE_DECIMALES                                                 */ \
                                        /*                      ,nombre_de_decimales                                                 */ \
                                        /*                       )                                                                   */ \
                                        /*                                                                                           */ \
                                        /* mais, malheureusement, cela risque de poser quelques problemes de compatibilite (c'est    */ \
                                        /* par exemple le cas de 'v $xiird/.ACIN.G.11.$U decimales=8') ; cette definition est        */ \
                                        /* dond (provisoirement ?) "annulee"...                                                      */ \
                                        /*                                                                                           */ \
                                        /* Le 20081121134507 fut introduit le test des nombres entiers, afin de prendre en compte,   */ \
                                        /* comme le 20081120100649 ci-dessus, les ecritures (d'apparence paradoxale) du type :       */ \
                                        /*                                                                                           */ \
                                        /*                  format=f decimales=2 entier=VRAI                                         */ \
                                        /*                                                                                           */ \
                                        /* Dans cet exemple le parametre "decimales=2" sera remplace par "decimales=14". Cela s'est  */ \
                                        /* vu lors du developpement des commandes du type 'v $xci/StatLigne.01$Z decimales='...      */

#    define    ENTIER_FLOTTANT(x)                                                                                                       \
                         COND(IL_FAUT(des_nombres_entiers)                                                                              \
                             ,AINT_a_peu_pres(x,epsilon_de_conversion_entier)                                                           \
                             ,x                                                                                                         \
                              )                                                                                                         \
                                        /* Formule permettant d'editer soit des nombres flottants entiers, soit des nombres          */ \
                                        /* flottants avec leurs decimales...                                                         */
#Aifdef   DES_NOMBRES_ENTIERS
#    define    NOMBRE_DE_DECIMALES_EFFECTIF(nombre_de_decimales)                                                                        \
                         COND(IFEQ_chaine(FORMAT_D_EDITION_EVENTUELLEMENT_ENTIER,FORMAT_D_EDITION_g)                                    \
                             ,nombre_de_decimales                                                                                       \
                             ,nombre_de_decimales                                                                                       \
                              )                                                                                                         \
                                        /* Formule permettant de selectionner le nombre de decimales effectif en fonction du format  */ \
                                        /* utilise, sachant qu'avec le format "g" le "nombre de decimales" designe en fait le        */ \
                                        /* nombre de chiffres...                                                                     */
#    define    ENTIER_FLOTTANT(x)                                                                                                       \
                         NEUT(x)                                                                                                        \
                                        /* Formule permettant d'editer soit des nombres flottants entiers, soit des nombres          */ \
                                        /* flottants avec leurs decimales...                                                         */
#Eifdef   DES_NOMBRES_ENTIERS

#define   MULTIPLE_DE(x)                                                                                                                \
                    COND(IL_FAUT(etre_multiple_de)                                                                                      \
                        ,MULTIPLE(x,unite_de_multiplicite)                                                                              \
                        ,x                                                                                                              \
                         )                                                                                                              \
                                        /* Formule permettant, si necessaire, de ramener la valeur courante a un multiple            */ \
                                        /* de 'unite_de_multiplicite'.                                                               */

#define   MODULO(x)                                                                                                                     \
                    COND(IL_FAUT(etre_modulo)                                                                                           \
                        ,fMODF(x,origine_modulo,extremite_modulo)                                                                       \
                        ,x                                                                                                              \
                         )                                                                                                              \
                                        /* Formule permettant, si necessaire, de ramener la valeur courante dans un segment          */ \
                                        /* [origine,extremite] modulo...                                                             */

#ifdef    DES_NOMBRES_ENTIERS
                                        /* Ceci a ete ajoute le 20081120144332 pour 'v $xci/valeurs_SurR$K 20081120142701'...        */
#    define    PROCESS_ARGUMENTS_DE_PARAMETRAGE_DE_LA_GENERATION_DE_SUITE_DE_VALEURS_ENTIERES                                           \
                         Bblock                                                                                                         \
                                                                                                                                        \
                         DEBUT_D_IMBRICATION_DES_____gPROCESS_PARAMETRE_____SECONDAIRES;                                                \
                                                                                                                                        \
                         GET_ARGUMENT_L("entiers=""entier=""e=",des_nombres_entiers);                                                   \
                                        /* Le parametre "entiers=" fut introduit le 20070104135147 car il s'agit en fait de la forme */ \
                                        /* la plus utilisee...                                                                       */ \
                         GET_ARGUMENT_F("epsilon=",epsilon_de_conversion_entier);                                                       \
                                                                                                                                        \
                         FIN___D_IMBRICATION_DES_____gPROCESS_PARAMETRE_____SECONDAIRES;                                                \
                                                                                                                                        \
                         Eblock                                                                                                         \
                                        /* Introduit le 20081120144332...                                                            */
#Aifdef   DES_NOMBRES_ENTIERS
#    define    PROCESS_ARGUMENTS_DE_PARAMETRAGE_DE_LA_GENERATION_DE_SUITE_DE_VALEURS_ENTIERES                                           \
                         Bblock                                                                                                         \
                                                                                                                                        \
                         DEBUT_D_IMBRICATION_DES_____gPROCESS_PARAMETRE_____SECONDAIRES;                                                \
                                                                                                                                        \
                         BLOC(VIDE;);                                                                                                   \
                                                                                                                                        \
                         FIN___D_IMBRICATION_DES_____gPROCESS_PARAMETRE_____SECONDAIRES;                                                \
                                                                                                                                        \
                         Eblock                                                                                                         \
                                        /* Introduit le 20081120144332...                                                            */
#Eifdef   DES_NOMBRES_ENTIERS

#define   PROCESS_ARGUMENTS_DE_PARAMETRAGE_DE_LA_GENERATION_DE_SUITE_DE_VALEURS_1                                                       \
                    Bblock                                                                                                              \
                                                                                                                                        \
                    DEBUT_D_IMBRICATION_DES_____gPROCESS_PARAMETRE_____SECONDAIRES;                                                     \
                                        /* Introduit le 20070130091001 car, en effet, il manquait...                                 */ \
                                                                                                                                        \
                    GET_ARGUMENT_C("signe=",valeurs_signees);                                                                           \
                    GET_ARGUMENT_C("format=",format_d_edition);                                                                         \
                                        /* On notera le 20070302105758, que l'on peut ecrire :                                       */ \
                                        /*                                                                                           */ \
                                        /*                  format="f"                                                               */ \
                                        /*                                                                                           */ \
                                        /* ('v $Falias_change format=') comme argument explicite dans l'appel a une commande '$X'.   */ \
                                        /* Par contre, definir :                                                                     */ \
                                        /*                                                                                           */ \
                                        /*                  set       PaRaMeTrEs='... format="f" ...'                                */ \
                                        /*                                                                                           */ \
                                        /* puis appeler une commande '$X' avec comme argument explicite '$PaRaMeTrEs' ne marchera    */ \
                                        /* pas car, en effet, les '$K_QD' qui entourent le format 'f' seront integrees au format,    */ \
                                        /* ce qui est evidemment incorrect ('v $Falias_Udisk format='). Il a donc ete decide a cette */ \
                                        /* date de ne jamais encadrer des formats ("f", "g",...) par des '$K_QD', quel que soit      */ \
                                        /* l'utilisation. Au passage, si l'on souhaitait veritablement "double quoter" les formats   */ \
                                        /* ("f", "g",...), il suffirait d'ecrire :                                                   */ \
                                        /*                                                                                           */ \
                                        /*                  set       PaRaMeTrEs=`eval echo '... format="f" ...'`                    */ \
                                        /*                                                                                           */ \
                                        /* pour avoir les '$K_QD's et les "effacer" immediatement...                                 */ \
                    GET_ARGUMENT_I("decimales=",nombre_de_decimales);                                                                   \
                                        /* On notera bien qu'il s'agit d'un synonyme de 'v $xig/fonct$vv$DEF ChiffresFlot='...       */ \
                                                                                                                                        \
                    PROCESS_ARGUMENTS_DE_PARAMETRAGE_DE_LA_GENERATION_DE_SUITE_DE_VALEURS_ENTIERES;                                     \
                                        /* Introduit le 20081120144332 sous cette forme...                                           */ \
                                                                                                                                        \
                    GET_ARGUMENT_L("multiple=",etre_multiple_de);                                                                       \
                    GET_ARGUMENT_F("unite=",unite_de_multiplicite);                                                                     \
                                                                                                                                        \
                    FIN___D_IMBRICATION_DES_____gPROCESS_PARAMETRE_____SECONDAIRES;                                                     \
                                        /* Introduit le 20070130091001 car, en effet, il manquait...                                 */ \
                                                                                                                                        \
                    Eblock                                                                                                              \
                                        /* Introduit le 20061226180952...                                                            */
#define   PROCESS_ARGUMENTS_DE_PARAMETRAGE_DE_LA_GENERATION_DE_SUITE_DE_VALEURS_2                                                       \
                    Bblock                                                                                                              \
                                                                                                                                        \
                    DEBUT_D_IMBRICATION_DES_____gPROCESS_PARAMETRE_____SECONDAIRES;                                                     \
                                        /* Introduit le 20070130091001 car, en effet, il manquait...                                 */ \
                                                                                                                                        \
                    GET_ARGUMENT_L("LF=""K_LF=",ajouter_un_K_LF_en_fin_de_format_d_edition);                                            \
                                                                                                                                        \
                    FIN___D_IMBRICATION_DES_____gPROCESS_PARAMETRE_____SECONDAIRES;                                                     \
                                        /* Introduit le 20070130091001 car, en effet, il manquait...                                 */ \
                                                                                                                                        \
                    Eblock



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