/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E   L ' H Y P E R - V O L U M E   P R O P R E M E N T   D I T  :                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xrs/hyper_volumes.12$I' :                                                                                      */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 20230209180401).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E   L ' H Y P E R - V O L U M E   V I A   L E S   C O O R D O N N E E S   C U R V I L I G N E S  :         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xrk/attractor.1A.I"

#include  xrv/champs_5.19.I"
                                        /* Pour eviter le message :                                                                  */
                                        /*                                                                                           */
                                        /*                  Static function is not referenced.                                       */
                                        /*                                                                                           */

#include  xrk/attractor.19.I"
                                        /* Validations et definition de l'espace physique.                                           */

#define   u_NORMALISEE                                                                                                                  \
                    NORM(u,minimum_de_u,maximum_de_u)
#define   v_NORMALISEE                                                                                                                  \
                    NORM(v,minimum_de_v,maximum_de_v)
#define   w_NORMALISEE                                                                                                                  \
                    NORM(w,minimum_de_w,maximum_de_w)
#define   t_NORMALISEE                                                                                                                  \
                    NORM(t,minimum_de_t,maximum_de_t)
                                        /* Coordonnees {u,v,w,t} dans [0,1]...                                                       */

#define   PERMUTATION_EVENTUELLE_DES_COORDONNEES_ET_DES_DIFFERENTIELLES                                                                 \
                    Bblock                                                                                                              \
                    Test(IL_FAUT(permuter_les_coordonnees_et_les_differentielles))                                                      \
                         Bblock                                                                                                         \
                         fSWAP(cx,dcx);                                                                                                 \
                         fSWAP(cy,dcy);                                                                                                 \
                         fSWAP(cz,dcz);                                                                                                 \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Permutation eventuelle des coordonnees et des differentielles.                            */

#define   GENERATION_DU_POINT_uvwt_COURANT(Fx,Fy,Fz,calcul_eventuel_point_courant,sequence_de_generation)                               \
                    Bblock                                                                                                              \
                    begin_nouveau_block                                                                                                 \
                         Bblock                                                                                                         \
                         begin_nouveau_block                                                                                            \
                              Bblock                                                                                                    \
                              begin_nouveau_block                                                                                       \
                                   Bblock                                                                                               \
                                        /* Cette suite de 'Bblock's est destinee a ne pas changer la tabulation de ce qui suit...    */ \
                                   DEFV(Float,INIT(u_effectif,u));                                                                      \
                                   DEFV(Float,INIT(d_u_effectif,d_u));                                                                  \
                                                                                                                                        \
                                   DEFV(Float,INIT(v_effectif,v));                                                                      \
                                   DEFV(Float,INIT(d_v_effectif,d_v));                                                                  \
                                                                                                                                        \
                                   DEFV(Float,INIT(w_effectif,w));                                                                      \
                                   DEFV(Float,INIT(d_w_effectif,d_w));                                                                  \
                                                                                                                                        \
                                   DEFV(Float,INIT(t_effectif,t));                                                                      \
                                   DEFV(Float,INIT(d_t_effectif,d_t));                                                                  \
                                                                                                                                        \
                                   EGAL(u_effectif                                                                                      \
                                       ,COND(IL_NE_FAUT_PAS(gestion_torique_de_u)                                                       \
                                            ,NEUT(u_effectif)                                                                           \
                                            ,MODF(u_effectif,minimum_de_u_effectif,maximum_de_u_effectif)                               \
                                             )                                                                                          \
                                        );                                                                                              \
                                   EGAL(v_effectif                                                                                      \
                                       ,COND(IL_NE_FAUT_PAS(gestion_torique_de_v)                                                       \
                                            ,NEUT(v_effectif)                                                                           \
                                            ,MODF(v_effectif,minimum_de_v_effectif,maximum_de_v_effectif)                               \
                                             )                                                                                          \
                                        );                                                                                              \
                                   EGAL(w_effectif                                                                                      \
                                       ,COND(IL_NE_FAUT_PAS(gestion_torique_de_w)                                                       \
                                            ,NEUT(w_effectif)                                                                           \
                                            ,MODF(w_effectif,minimum_de_w_effectif,maximum_de_w_effectif)                               \
                                             )                                                                                          \
                                        );                                                                                              \
                                   EGAL(t_effectif                                                                                      \
                                       ,COND(IL_NE_FAUT_PAS(gestion_torique_de_t)                                                       \
                                            ,NEUT(t_effectif)                                                                           \
                                            ,MODF(t_effectif,minimum_de_t_effectif,maximum_de_t_effectif)                               \
                                             )                                                                                          \
                                        );                                                                                              \
                                                                                                                                        \
                                   Test(I4ET(IFINff(u_effectif,minimum_de_u_effectif,maximum_de_u_effectif)                             \
                                            ,IFINff(v_effectif,minimum_de_v_effectif,maximum_de_v_effectif)                             \
                                            ,IFINff(w_effectif,minimum_de_w_effectif,maximum_de_w_effectif)                             \
                                            ,IFINff(t_effectif,minimum_de_t_effectif,maximum_de_t_effectif)                             \
                                             )                                                                                          \
                                        )                                                                                               \
                                        Bblock                                                                                          \
                                        Test(I5OU(I4ET(DIVISIBLE(echantillonnage_courant_de_u,echantillonnage_de_u)                     \
                                                      ,DIVISIBLE(echantillonnage_courant_de_v,echantillonnage_de_v)                     \
                                                      ,DIVISIBLE(echantillonnage_courant_de_w,echantillonnage_de_w)                     \
                                                      ,DIVISIBLE(echantillonnage_courant_de_t,echantillonnage_de_t)                     \
                                                       )                                                                                \
                                                 ,I4ET(NON_DIVISIBLE(echantillonnage_courant_de_u,echantillonnage_de_u)                 \
                                                      ,DIVISIBLE(echantillonnage_courant_de_v,echantillonnage_de_v)                     \
                                                      ,DIVISIBLE(echantillonnage_courant_de_w,echantillonnage_de_w)                     \
                                                      ,DIVISIBLE(echantillonnage_courant_de_t,echantillonnage_de_t)                     \
                                                       )                                                                                \
                                                 ,I4ET(DIVISIBLE(echantillonnage_courant_de_u,echantillonnage_de_u)                     \
                                                      ,NON_DIVISIBLE(echantillonnage_courant_de_v,echantillonnage_de_v)                 \
                                                      ,DIVISIBLE(echantillonnage_courant_de_w,echantillonnage_de_w)                     \
                                                      ,DIVISIBLE(echantillonnage_courant_de_t,echantillonnage_de_t)                     \
                                                       )                                                                                \
                                                 ,I4ET(DIVISIBLE(echantillonnage_courant_de_u,echantillonnage_de_u)                     \
                                                      ,DIVISIBLE(echantillonnage_courant_de_v,echantillonnage_de_v)                     \
                                                      ,NON_DIVISIBLE(echantillonnage_courant_de_w,echantillonnage_de_w)                 \
                                                      ,DIVISIBLE(echantillonnage_courant_de_t,echantillonnage_de_t)                     \
                                                       )                                                                                \
                                                 ,I4ET(DIVISIBLE(echantillonnage_courant_de_u,echantillonnage_de_u)                     \
                                                      ,DIVISIBLE(echantillonnage_courant_de_v,echantillonnage_de_v)                     \
                                                      ,DIVISIBLE(echantillonnage_courant_de_w,echantillonnage_de_w)                     \
                                                      ,NON_DIVISIBLE(echantillonnage_courant_de_t,echantillonnage_de_t)                 \
                                                       )                                                                                \
                                                  )                                                                                     \
                                             )                                                                                          \
                                             Bblock                                                                                     \
                                             EGAL(cx,Fx(u_effectif,v_effectif,w_effectif,t_effectif));                                  \
                                             EGAL(cy,Fy(u_effectif,v_effectif,w_effectif,t_effectif));                                  \
                                             EGAL(cz,Fz(u_effectif,v_effectif,w_effectif,t_effectif));                                  \
                                        /* Generation du point courant de l'hyper-volume...                                          */ \
                                                                                                                                        \
                                             BLOC(sequence_de_generation);                                                              \
                                             Eblock                                                                                     \
                                        ATes                                                                                            \
                                             Bblock                                                                                     \
                                             Eblock                                                                                     \
                                        ETes                                                                                            \
                                        Eblock                                                                                          \
                                   ATes                                                                                                 \
                                        Bblock                                                                                          \
                                        Eblock                                                                                          \
                                   ETes                                                                                                 \
                                   Eblock                                                                                               \
                              end_nouveau_block                                                                                         \
                              Eblock                                                                                                    \
                         end_nouveau_block                                                                                              \
                         Eblock                                                                                                         \
                    end_nouveau_block                                                                                                   \
                    Eblock

#define   index_definition_arbitraire                                                                                                   \
                    index_de_definition_arbitraire_des_coordonnees_u_v_w_t                                                              \
                                        /* Afin de raccourcir certaines des lignes qui suivent...                                    */

#define   gGENERATION_D_UNE_IMAGE_DE_L_HYPER_VOLUME(Fx,Fy,Fz,calcul_eventuel_point_courant,sequence_de_generation)                      \
                    Bblock                                                                                                              \
                    DEFV(Float,INIT(differentielle_ROUGE,FLOT__UNDEF));                                                                 \
                    DEFV(Float,INIT(differentielle_VERTE,FLOT__UNDEF));                                                                 \
                    DEFV(Float,INIT(differentielle_BLEUE,FLOT__UNDEF));                                                                 \
                    DEFV(Logical,INIT(utiliser_les_differentielles_ROUGE_VERTE_BLEUE,FAUX));                                            \
                                                                                                                                        \
                    DEFV(Float,INIT(minimum_de_u_effectif,minimum_de_u));                                                               \
                    DEFV(Float,INIT(maximum_de_u_effectif,maximum_de_u));                                                               \
                    DEFV(Float,INIT(minimum_de_v_effectif,minimum_de_v));                                                               \
                    DEFV(Float,INIT(maximum_de_v_effectif,maximum_de_v));                                                               \
                    DEFV(Float,INIT(minimum_de_w_effectif,minimum_de_w));                                                               \
                    DEFV(Float,INIT(maximum_de_w_effectif,maximum_de_w));                                                               \
                    DEFV(Float,INIT(minimum_de_t_effectif,minimum_de_t));                                                               \
                    DEFV(Float,INIT(maximum_de_t_effectif,maximum_de_t));                                                               \
                                                                                                                                        \
                    DEFV(Float,INIT(pas_de_u_effectif,DIVI(pas_de_u,diviseur_du_pas_de_u)));                                            \
                    DEFV(Float,INIT(pas_de_v_effectif,DIVI(pas_de_v,diviseur_du_pas_de_v)));                                            \
                    DEFV(Float,INIT(pas_de_w_effectif,DIVI(pas_de_w,diviseur_du_pas_de_w)));                                            \
                    DEFV(Float,INIT(pas_de_t_effectif,DIVI(pas_de_t,diviseur_du_pas_de_t)));                                            \
                                                                                                                                        \
                    DEFV(Int,INIT(echantillonnage_courant_de_u,translation_de_l_echantillonnage_de_u));                                 \
                                        /* Afin de gerer l'echantillonnage de 'u'.                                                   */ \
                                                                                                                                        \
                    DEFV(Float,INIT(pas_u_de_differentiation,FLOT__UNDEF));                                                             \
                    DEFV(Float,INIT(pas_v_de_differentiation,FLOT__UNDEF));                                                             \
                    DEFV(Float,INIT(pas_w_de_differentiation,FLOT__UNDEF));                                                             \
                    DEFV(Float,INIT(pas_t_de_differentiation,FLOT__UNDEF));                                                             \
                                                                                                                                        \
                    EGAL(pas_u_de_differentiation                                                                                       \
                        ,DIVI(COND(EST_VRAI(le_pas_de_u_de_differentiation_est_homothetique),pas_de_u_effectif,pas_de_u)                \
                             ,diviseur_de_differentiation_de_u                                                                          \
                              )                                                                                                         \
                         );                                                                                                             \
                    EGAL(pas_v_de_differentiation                                                                                       \
                        ,DIVI(COND(EST_VRAI(le_pas_de_v_de_differentiation_est_homothetique),pas_de_v_effectif,pas_de_v)                \
                             ,diviseur_de_differentiation_de_v                                                                          \
                              )                                                                                                         \
                         );                                                                                                             \
                    EGAL(pas_w_de_differentiation                                                                                       \
                        ,DIVI(COND(EST_VRAI(le_pas_de_w_de_differentiation_est_homothetique),pas_de_w_effectif,pas_de_w)                \
                             ,diviseur_de_differentiation_de_w                                                                          \
                              )                                                                                                         \
                         );                                                                                                             \
                    EGAL(pas_t_de_differentiation                                                                                       \
                        ,DIVI(COND(EST_VRAI(le_pas_de_t_de_differentiation_est_homothetique),pas_de_t_effectif,pas_de_t)                \
                             ,diviseur_de_differentiation_de_t                                                                          \
                              )                                                                                                         \
                         );                                                                                                             \
                                                                                                                                        \
                    Test(IL_FAUT(definir_arbitrairement_les_coordonnees_u_v_w_t))                                                       \
                         Bblock                                                                                                         \
                         DEFV(Int,INIT(echantillonnage_courant_de_u,translation_de_l_echantillonnage_de_u));                            \
                         DEFV(Int,INIT(echantillonnage_courant_de_v,translation_de_l_echantillonnage_de_v));                            \
                         DEFV(Int,INIT(echantillonnage_courant_de_w,translation_de_l_echantillonnage_de_w));                            \
                         DEFV(Int,INIT(echantillonnage_courant_de_t,translation_de_l_echantillonnage_de_t));                            \
                                        /* Ne servent qu'a permettre 'GENERATION_DU_POINT_uvwt_COURANT(...)' ci-apres...             */ \
                                                                                                                                        \
                         DEFV(Logical,INIT(recuperer_les_coordonnees_u_v_w_t,VRAI));                                                    \
                                                                                                                                        \
                         Tant(IL_FAUT(recuperer_les_coordonnees_u_v_w_t))                                                               \
                              Bblock                                                                                                    \
                              DEFV(Float,INIT(u,ELEMENT_DU_FICHIER_COORDONNEES_u(index_definition_arbitraire)));                        \
                              DEFV(Float,INIT(v,ELEMENT_DU_FICHIER_COORDONNEES_v(index_definition_arbitraire)));                        \
                              DEFV(Float,INIT(w,ELEMENT_DU_FICHIER_COORDONNEES_w(index_definition_arbitraire)));                        \
                              DEFV(Float,INIT(t,ELEMENT_DU_FICHIER_COORDONNEES_t(index_definition_arbitraire)));                        \
                                                                                                                                        \
                              Test(I4ET(IFNE(u,separateur_de_definition_arbitraire_des_coordonnees_u_v_w_t)                             \
                                       ,IFNE(v,separateur_de_definition_arbitraire_des_coordonnees_u_v_w_t)                             \
                                       ,IFNE(w,separateur_de_definition_arbitraire_des_coordonnees_u_v_w_t)                             \
                                       ,IFNE(t,separateur_de_definition_arbitraire_des_coordonnees_u_v_w_t)                             \
                                        )                                                                                               \
                                   )                                                                                                    \
                                        /* Test introduit le 20230217102703...                                                       */ \
                                   Bblock                                                                                               \
                                   Test(I3ET(IFNE_chaine(fichier_des_coordonnees_ROUGE,NOM_PIPE_Local)                                  \
                                            ,IFNE_chaine(fichier_des_coordonnees_VERTE,NOM_PIPE_Local)                                  \
                                            ,IFNE_chaine(fichier_des_coordonnees_BLEUE,NOM_PIPE_Local)                                  \
                                             )                                                                                          \
                                        )                                                                                               \
                                        Bblock                                                                                          \
                                        EGAL(differentielle_ROUGE,ELEMENT_DU_FICHIER_COORDONNEES_ROUGE(index_definition_arbitraire));   \
                                        EGAL(differentielle_VERTE,ELEMENT_DU_FICHIER_COORDONNEES_VERTE(index_definition_arbitraire));   \
                                        EGAL(differentielle_BLEUE,ELEMENT_DU_FICHIER_COORDONNEES_BLEUE(index_definition_arbitraire));   \
                                        /* Les initialisations de 'GENERATION_D_UNE_IMAGE_DE_L_HYPER_VOLUME_AVEC_DIFFEREN...(...)'   */ \
                                        /* sont donc ici "oubliees"...                                                               */ \
                                                                                                                                        \
                                        EGAL(utiliser_les_differentielles_ROUGE_VERTE_BLEUE,VRAI);                                      \
                                        /* Afin de pouvoir definir {differentielle_x,differentielle_y,differentielle_z}              */ \
                                        /* dans 'GENER_HYPER_VOLUME_AVEC_DIFFERENCES____(...)'.                                      */ \
                                        Eblock                                                                                          \
                                   ATes                                                                                                 \
                                        Bblock                                                                                          \
                                        Eblock                                                                                          \
                                   ETes                                                                                                 \
                                                                                                                                        \
                                   Test(IFNE_chaine(fichier_des_coordonnees_RAYON,NOM_PIPE_Local))                                      \
                                        Bblock                                                                                          \
                                        EGAL(rayon_de_visualisation,ELEMENT_DU_FICHIER_COORDONNEES_RAYON(index_definition_arbitraire)); \
                                        /* Introduit le 20240517140550...                                                            */ \
                                        Eblock                                                                                          \
                                   ATes                                                                                                 \
                                        Bblock                                                                                          \
                                        Eblock                                                                                          \
                                   ETes                                                                                                 \
                                                                                                                                        \
                                   Test(IFNE_chaine(fichier_des_coordonnees_MASSE,NOM_PIPE_Local))                                      \
                                        Bblock                                                                                          \
                                        EGAL(masse_de_la_sphere_courante                                                                \
                                            ,ELEMENT_DU_FICHIER_COORDONNEES_MASSE(index_definition_arbitraire)                          \
                                             );                                                                                         \
                                        /* Introduit le 20240519090812...                                                            */ \
                                        Eblock                                                                                          \
                                   ATes                                                                                                 \
                                        Bblock                                                                                          \
                                        Eblock                                                                                          \
                                   ETes                                                                                                 \
                                                                                                                                        \
                                   GENERATION_DU_POINT_uvwt_COURANT(Fx,Fy,Fz                                                            \
                                                                   ,calcul_eventuel_point_courant                                       \
                                                                   ,sequence_de_generation                                              \
                                                                    );                                                                  \
                                   Eblock                                                                                               \
                              ATes                                                                                                      \
                                   Bblock                                                                                               \
                                   EGAL(recuperer_les_coordonnees_u_v_w_t,FAUX);                                                        \
                                   Eblock                                                                                               \
                              ETes                                                                                                      \
                                                                                                                                        \
                              INCR(index_definition_arbitraire,pas_de_parcours_d_un_fichier);                                           \
                                                                                                                                        \
                              Test(IFGT(index_definition_arbitraire,DERNIER_ELEMENT_D_UN_FICHIER))                                      \
                                   Bblock                                                                                               \
                                   EGAL(index_definition_arbitraire,PREMIER_ELEMENT_D_UN_FICHIER);                                      \
                                   EGAL(recuperer_les_coordonnees_u_v_w_t,FAUX);                                                        \
                                   Eblock                                                                                               \
                              ATes                                                                                                      \
                                   Bblock                                                                                               \
                                   Eblock                                                                                               \
                              ETes                                                                                                      \
                              Eblock                                                                                                    \
                         ETan                                                                                                           \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         FDoIn(u,minimum_de_u_effectif,maximum_de_u_effectif,pas_de_u_effectif)                                         \
                              Bblock                                                                                                    \
                              DEFV(Int,INIT(echantillonnage_courant_de_v,translation_de_l_echantillonnage_de_v));                       \
                                        /* Afin de gerer l'echantillonnage de 'v'.                                                   */ \
                                                                                                                                        \
                              FDoIn(v,minimum_de_v_effectif,maximum_de_v_effectif,pas_de_v_effectif)                                    \
                                   Bblock                                                                                               \
                                   DEFV(Int,INIT(echantillonnage_courant_de_w,translation_de_l_echantillonnage_de_w));                  \
                                        /* Afin de gerer l'echantillonnage de 'w'.                                                   */ \
                                                                                                                                        \
                                   FDoIn(w,minimum_de_w_effectif,maximum_de_w_effectif,pas_de_w_effectif)                               \
                                        Bblock                                                                                          \
                                        DEFV(Int,INIT(echantillonnage_courant_de_t,translation_de_l_echantillonnage_de_t));             \
                                        /* Afin de gerer l'echantillonnage de 't'.                                                   */ \
                                                                                                                                        \
                                        FDoIn(t,minimum_de_t_effectif,maximum_de_t_effectif,pas_de_t_effectif)                          \
                                             Bblock                                                                                     \
                                             GENERATION_DU_POINT_uvwt_COURANT(Fx,Fy,Fz                                                  \
                                                                             ,calcul_eventuel_point_courant                             \
                                                                             ,sequence_de_generation                                    \
                                                                              );                                                        \
                                                                                                                                        \
                                             INCR(echantillonnage_courant_de_t,I);                                                      \
                                        /* Gestion de l'echantillonnage de 't'.                                                      */ \
                                             Eblock                                                                                     \
                                        EFDoI                                                                                           \
                                                                                                                                        \
                                        INCR(echantillonnage_courant_de_w,I);                                                           \
                                        /* Gestion de l'echantillonnage de 'w'.                                                      */ \
                                        Eblock                                                                                          \
                                   EFDoI                                                                                                \
                                                                                                                                        \
                                   INCR(echantillonnage_courant_de_v,I);                                                                \
                                        /* Gestion de l'echantillonnage de 'v'.                                                      */ \
                                   Eblock                                                                                               \
                              EFDoI                                                                                                     \
                                                                                                                                        \
                              INCR(echantillonnage_courant_de_u,I);                                                                     \
                                        /* Gestion de l'echantillonnage de 'u'.                                                      */ \
                              Eblock                                                                                                    \
                         EFDoI                                                                                                          \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                                                                                                                                        \
                    Eblock                                                                                                              \
                                        /* Calcul et visualisation generale de l'hyper-volume pour un instant donne.                 */

#define   LISTER_EVENTUELLEMENT_LES_COORDONNEES_u_v_w_t_DES_POINTS                                                                      \
                    Bblock                                                                                                              \
                    Test(IFET(IL_FAUT(lister_la_liste_des_points)                                                                       \
                             ,IL_FAUT(lister_les_coordonnees_u_v_w_t_des_points)                                                        \
                              )                                                                                                         \
                         )                                                                                                              \
                         Bblock                                                                                                         \
                         Test(IFET(IZGT(rayon_de_visualisation)                                                                         \
                                  ,IFOU(EST_VRAI(les_trois_les_differentielles_peuvent_etre_nulles)                                     \
                                       ,IFET(EST_FAUX(les_trois_les_differentielles_peuvent_etre_nulles)                                \
                                            ,IFOU(IL_NE_FAUT_PAS(renormaliser_arbitrairement_derivees)                                  \
                                                 ,IFET(IL_FAUT(renormaliser_arbitrairement_derivees)                                    \
                                                      ,I3OU(IZNE(dcx)                                                                   \
                                                           ,IZNE(dcy)                                                                   \
                                                           ,IZNE(dcz)                                                                   \
                                                            )                                                                           \
                                                       )                                                                                \
                                                  )                                                                                     \
                                             )                                                                                          \
                                        )                                                                                               \
                                   )                                                                                                    \
                              )                                                                                                         \
                              Bblock                                                                                                    \
                              CAL2(Prin4(" U=%+.^^^ V=%+.^^^ W=%+.^^^ T=%+.^^^   "                                                      \
                                        ,u_effectif                                                                                     \
                                        ,v_effectif                                                                                     \
                                        ,w_effectif                                                                                     \
                                        ,t_effectif                                                                                     \
                                         )                                                                                              \
                                   );                                                                                                   \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Listage des coordonnees {u,v,w,t} des points...                                           */

#define   GENERATION_D_UNE_IMAGE_DE_L_HYPER_VOLUME_SANS_DIFFERENTIATION(Fx,Fy,Fz,calcul_eventuel_point_courant)                         \
                    Bblock                                                                                                              \
                    DEFV(Float,INIT(d_u,FLOT__UNDEF));                                                                                  \
                    DEFV(Float,INIT(d_v,FLOT__UNDEF));                                                                                  \
                    DEFV(Float,INIT(d_w,FLOT__UNDEF));                                                                                  \
                    DEFV(Float,INIT(d_t,FLOT__UNDEF));                                                                                  \
                                                                                                                                        \
                    gGENERATION_D_UNE_IMAGE_DE_L_HYPER_VOLUME                                                                           \
                        (Fx,Fy,Fz                                                                                                       \
                        ,calcul_eventuel_point_courant                                                                                  \
                        ,BLOC(Bblock                                                                                                    \
                              RECHERCHE_DES_EXTREMA_DES_COORDONNEES_ET_DES_DERIVEES;                                                    \
                                        /* On notera que cette recherche n'est pas conditionnee par 'editer_les_extrema', car les    */ \
                                        /* extrema pourraient etre utilises pour la visualisation...                                 */ \
                                                                                                                                        \
                              BLOC(calcul_eventuel_point_courant);                                                                      \
                                        /* Calculs eventuels d'informations specifiques au point courant...                          */ \
                                                                                                                                        \
                              PERMUTATION_EVENTUELLE_DES_COORDONNEES_ET_DES_DIFFERENTIELLES;                                            \
                                                                                                                                        \
                              LISTER_EVENTUELLEMENT_LES_COORDONNEES_u_v_w_t_DES_POINTS;                                                 \
                                                                                                                                        \
                              CALS(memorisation_1_point_06(SOUS(cx,Xcentre_ESPACE)                                                      \
                                                          ,SOUS(cy,Ycentre_ESPACE)                                                      \
                                                          ,SOUS(cz,Zcentre_ESPACE)                                                      \
                                                          ,dcx                                                                          \
                                                          ,dcy                                                                          \
                                                          ,dcz                                                                          \
                                                           )                                                                            \
                                   );                                                                                                   \
                                        /* Memorisation du point courant.                                                            */ \
                                                                                                                                        \
                              Eblock                                                                                                    \
                              )                                                                                                         \
                         )                                                                                                              \
                    Eblock                                                                                                              \
                                        /* Calcul et visualisation de l'hyper-volume pour un instant donne sans differentiation.     */

#define   GENER_HYPER_VOLUME_AVEC_DIFFERENCES____(Fx,Fy,Fz,calcul_eventuel_point_courant)                                               \
                    Bblock                                                                                                              \
                    DEFV(Float,INIT(d_u,FLOT__UNDEF));                                                                                  \
                    DEFV(Float,INIT(d_v,FLOT__UNDEF));                                                                                  \
                    DEFV(Float,INIT(d_w,FLOT__UNDEF));                                                                                  \
                    DEFV(Float,INIT(d_t,FLOT__UNDEF));                                                                                  \
                                                                                                                                        \
                    gGENERATION_D_UNE_IMAGE_DE_L_HYPER_VOLUME                                                                           \
                        (Fx,Fy,Fz                                                                                                       \
                        ,calcul_eventuel_point_courant                                                                                  \
                        ,BLOC(Bblock                                                                                                    \
                              DEFV(Float,INIT(differentielle_x,FLOT__UNDEF));                                                           \
                              DEFV(Float,INIT(differentielle_y,FLOT__UNDEF));                                                           \
                              DEFV(Float,INIT(differentielle_z,FLOT__UNDEF));                                                           \
                                        /* Definition des trois differentielles.                                                     */ \
                                                                                                                                        \
                              Test(IL_FAUT(utiliser_les_differentielles_ROUGE_VERTE_BLEUE))                                             \
                                   Bblock                                                                                               \
                                   EGAL(differentielle_x,differentielle_ROUGE);                                                         \
                                   EGAL(differentielle_y,differentielle_VERTE);                                                         \
                                   EGAL(differentielle_z,differentielle_BLEUE);                                                         \
                                                                                                                                        \
                                   EGAL(utiliser_les_differentielles_ROUGE_VERTE_BLEUE,FAUX);                                           \
                                        /* Ne sert a rien, mais c'est plus sur...                                                    */ \
                                   Eblock                                                                                               \
                              ATes                                                                                                      \
                                   Bblock                                                                                               \
                                   EGAL(differentielle_x                                                                                \
                                       ,DERIVATION_PARTIELLE(Fx(SOUS(u_effectif,MUL2(facteur_x_de_pas_de_u,pas_u_de_differentiation))   \
                                                               ,SOUS(v_effectif,MUL2(facteur_x_de_pas_de_v,pas_v_de_differentiation))   \
                                                               ,SOUS(w_effectif,MUL2(facteur_x_de_pas_de_w,pas_w_de_differentiation))   \
                                                               ,SOUS(t_effectif,MUL2(facteur_x_de_pas_de_t,pas_t_de_differentiation))   \
                                                                )                                                                       \
                                                            ,Fx(ADD2(u_effectif,MUL2(facteur_x_de_pas_de_u,pas_u_de_differentiation))   \
                                                               ,ADD2(v_effectif,MUL2(facteur_x_de_pas_de_v,pas_v_de_differentiation))   \
                                                               ,ADD2(w_effectif,MUL2(facteur_x_de_pas_de_w,pas_w_de_differentiation))   \
                                                               ,ADD2(t_effectif,MUL2(facteur_x_de_pas_de_t,pas_t_de_differentiation))   \
                                                                )                                                                       \
                                                            ,DOUB(GpytF4D(MUL2(facteur_x_de_pas_de_u,pas_u_de_differentiation)          \
                                                                         ,MUL2(facteur_x_de_pas_de_v,pas_v_de_differentiation)          \
                                                                         ,MUL2(facteur_x_de_pas_de_w,pas_w_de_differentiation)          \
                                                                         ,MUL2(facteur_x_de_pas_de_t,pas_t_de_differentiation)          \
                                                                          )                                                             \
                                                                  )                                                                     \
                                                             )                                                                          \
                                        );                                                                                              \
                                   EGAL(differentielle_y                                                                                \
                                       ,DERIVATION_PARTIELLE(Fy(SOUS(u_effectif,MUL2(facteur_y_de_pas_de_u,pas_u_de_differentiation))   \
                                                               ,SOUS(v_effectif,MUL2(facteur_y_de_pas_de_v,pas_v_de_differentiation))   \
                                                               ,SOUS(w_effectif,MUL2(facteur_y_de_pas_de_w,pas_w_de_differentiation))   \
                                                               ,SOUS(t_effectif,MUL2(facteur_y_de_pas_de_t,pas_t_de_differentiation))   \
                                                                )                                                                       \
                                                            ,Fy(ADD2(u_effectif,MUL2(facteur_y_de_pas_de_u,pas_u_de_differentiation))   \
                                                               ,ADD2(v_effectif,MUL2(facteur_y_de_pas_de_v,pas_v_de_differentiation))   \
                                                               ,ADD2(w_effectif,MUL2(facteur_y_de_pas_de_w,pas_w_de_differentiation))   \
                                                               ,ADD2(t_effectif,MUL2(facteur_y_de_pas_de_t,pas_t_de_differentiation))   \
                                                                )                                                                       \
                                                            ,DOUB(GpytF4D(MUL2(facteur_y_de_pas_de_u,pas_u_de_differentiation)          \
                                                                         ,MUL2(facteur_y_de_pas_de_v,pas_v_de_differentiation)          \
                                                                         ,MUL2(facteur_y_de_pas_de_w,pas_w_de_differentiation)          \
                                                                         ,MUL2(facteur_y_de_pas_de_t,pas_t_de_differentiation)          \
                                                                          )                                                             \
                                                                  )                                                                     \
                                                             )                                                                          \
                                        );                                                                                              \
                                   EGAL(differentielle_z                                                                                \
                                       ,DERIVATION_PARTIELLE(Fz(SOUS(u_effectif,MUL2(facteur_z_de_pas_de_u,pas_u_de_differentiation))   \
                                                               ,SOUS(v_effectif,MUL2(facteur_z_de_pas_de_v,pas_v_de_differentiation))   \
                                                               ,SOUS(w_effectif,MUL2(facteur_z_de_pas_de_w,pas_w_de_differentiation))   \
                                                               ,SOUS(t_effectif,MUL2(facteur_z_de_pas_de_t,pas_t_de_differentiation))   \
                                                                )                                                                       \
                                                            ,Fz(ADD2(u_effectif,MUL2(facteur_z_de_pas_de_u,pas_u_de_differentiation))   \
                                                               ,ADD2(v_effectif,MUL2(facteur_z_de_pas_de_v,pas_v_de_differentiation))   \
                                                               ,ADD2(w_effectif,MUL2(facteur_z_de_pas_de_w,pas_w_de_differentiation))   \
                                                               ,ADD2(t_effectif,MUL2(facteur_z_de_pas_de_t,pas_t_de_differentiation))   \
                                                                )                                                                       \
                                                            ,DOUB(GpytF4D(MUL2(facteur_z_de_pas_de_u,pas_u_de_differentiation)          \
                                                                         ,MUL2(facteur_z_de_pas_de_v,pas_v_de_differentiation)          \
                                                                         ,MUL2(facteur_z_de_pas_de_w,pas_w_de_differentiation)          \
                                                                         ,MUL2(facteur_z_de_pas_de_t,pas_t_de_differentiation)          \
                                                                          )                                                             \
                                                                  )                                                                     \
                                                             )                                                                          \
                                        );                                                                                              \
                                   Eblock                                                                                               \
                              ETes                                                                                                      \
                                                                                                                                        \
                              EGAL(dcx                                                                                                  \
                                  ,LIZ10(ponderation_de__x_____dans_dx,cx                                                               \
                                        ,ponderation_de__y_____dans_dx,cy                                                               \
                                        ,ponderation_de__z_____dans_dx,cz                                                               \
                                        ,ponderation_de__u_____dans_dx,u                                                                \
                                        ,ponderation_de__v_____dans_dx,v                                                                \
                                        ,ponderation_de__w_____dans_dx,w                                                                \
                                        ,ponderation_de__t_____dans_dx,t                                                                \
                                        ,ponderation_de_dx_____dans_dx,differentielle_x                                                 \
                                        ,ponderation_de_dy_____dans_dx,differentielle_y                                                 \
                                        ,ponderation_de_dz_____dans_dx,differentielle_z                                                 \
                                         )                                                                                              \
                                   );                                                                                                   \
                              EGAL(dcy                                                                                                  \
                                  ,LIZ10(ponderation_de__x_____dans_dy,cx                                                               \
                                        ,ponderation_de__y_____dans_dy,cy                                                               \
                                        ,ponderation_de__z_____dans_dy,cz                                                               \
                                        ,ponderation_de__u_____dans_dy,u                                                                \
                                        ,ponderation_de__v_____dans_dy,v                                                                \
                                        ,ponderation_de__w_____dans_dy,w                                                                \
                                        ,ponderation_de__t_____dans_dy,t                                                                \
                                        ,ponderation_de_dx_____dans_dy,differentielle_x                                                 \
                                        ,ponderation_de_dy_____dans_dy,differentielle_y                                                 \
                                        ,ponderation_de_dz_____dans_dy,differentielle_z                                                 \
                                         )                                                                                              \
                                   );                                                                                                   \
                              EGAL(dcz                                                                                                  \
                                  ,LIZ10(ponderation_de__x_____dans_dz,cx                                                               \
                                        ,ponderation_de__y_____dans_dz,cy                                                               \
                                        ,ponderation_de__z_____dans_dz,cz                                                               \
                                        ,ponderation_de__u_____dans_dz,u                                                                \
                                        ,ponderation_de__v_____dans_dz,v                                                                \
                                        ,ponderation_de__w_____dans_dz,w                                                                \
                                        ,ponderation_de__t_____dans_dz,t                                                                \
                                        ,ponderation_de_dx_____dans_dz,differentielle_x                                                 \
                                        ,ponderation_de_dy_____dans_dz,differentielle_y                                                 \
                                        ,ponderation_de_dz_____dans_dz,differentielle_z                                                 \
                                         )                                                                                              \
                                   );                                                                                                   \
                                        /* Calcul des couleurs utiles...                                                             */ \
                                                                                                                                        \
                              RECHERCHE_DES_EXTREMA_DES_COORDONNEES_ET_DES_DERIVEES;                                                    \
                                        /* On notera que cette recherche n'est pas conditionnee par 'editer_les_extrema', car les    */ \
                                        /* extrema pourraient etre utilises pour la visualisation...                                 */ \
                                                                                                                                        \
                              BLOC(calcul_eventuel_point_courant);                                                                      \
                                        /* Calculs eventuels d'informations specifiques au point courant...                          */ \
                                                                                                                                        \
                              PERMUTATION_EVENTUELLE_DES_COORDONNEES_ET_DES_DIFFERENTIELLES;                                            \
                                                                                                                                        \
                              LISTER_EVENTUELLEMENT_LES_COORDONNEES_u_v_w_t_DES_POINTS;                                                 \
                                                                                                                                        \
                              CALS(memorisation_1_point_06(SOUS(cx,Xcentre_ESPACE)                                                      \
                                                          ,SOUS(cy,Ycentre_ESPACE)                                                      \
                                                          ,SOUS(cz,Zcentre_ESPACE)                                                      \
                                                          ,dcx                                                                          \
                                                          ,dcy                                                                          \
                                                          ,dcz                                                                          \
                                                           )                                                                            \
                                   );                                                                                                   \
                                        /* Memorisation du point courant.                                                            */ \
                              Eblock                                                                                                    \
                              )                                                                                                         \
                         )                                                                                                              \
                    Eblock                                                                                                              \
                                        /* Calcul et visualisation de l'hyper-volume pour un instant donne avec differentiation      */ \
                                        /* numerique.                                                                                */

#define   VISUALISATION_GENERALE_DE_L_HYPER_VOLUME(calcul_des_parametres,calcul_de_l_hyper_volume,Fx,Fy,Fz,Pxyz)                        \
                    Bblock                                                                                                              \
                    RE_INITIALISATION_DE_L_HORLOGE;                                                                                     \
                                        /* Depuis que le 19990512152305 a ete mis en place un :                                      */ \
                                        /*                                                                                           */ \
                                        /*        INCREMENTATION_DE_L_HORLOGE(dct);                                                  */ \
                                        /*                                                                                           */ \
                                        /* apres chaque image, l'initialisation de l'horloge ne doit plus etre faite pour chaque     */ \
                                        /* image, mais une seul fois, au tout debut...                                               */ \
                                                                                                                                        \
                    Komp(numero_de_la_periode_courante_de_la_simulation,nombre_de_periodes_de_la_simulation)                            \
                         Bblock                                                                                                         \
                         INITIALISATIONS_RELATIVES_A_CHAQUE_NOUVELLE_IMAGE(numero_de_la_periode_courante);                              \
                                        /* Initialisations necessaires avant le calcul et la generation de chaque nouvelle image.    */ \
                                                                                                                                        \
                         BLOC(calcul_des_parametres);                                                                                   \
                                        /* Calcul des parametres evoluant au cours de la simulation...                               */ \
                                                                                                                                        \
                         BLOC(calcul_de_l_hyper_volume);                                                                                \
                                        /* Calcul de l'hyper-volume proprement dit...                                                */ \
                                                                                                                                        \
                         GENERATION_D_UNE_IMAGE_ET_PASSAGE_A_LA_SUIVANTE(BLOC(VIDE;));                                                  \
                                        /* Generation de l'image courante...                                                         */ \
                                                                                                                                        \
                         INCREMENTATION_DE_L_HORLOGE(dct);                                                                              \
                         Eblock                                                                                                         \
                    EKom                                                                                                                \
                                                                                                                                        \
                    EDITION_DES_EXTREMA_DES_COORDONNEES_ET_DES_DERIVEES;                                                                \
                                        /* Edition facultative des extrema des coordonnees.                                          */ \
                    Eblock                                                                                                              \
                                        /* Calcul et visualisation de l'hyper-volume avec evolution temporelle...                    */

#define   VISUALISATION_DE_L_HYPER_VOLUME_SANS_DIFFERENTIATION(calcul_des_parametres,Fx,Fy,Fz,Pxyz,calcul_pc)                           \
                    Bblock                                                                                                              \
                    VISUALISATION_GENERALE_DE_L_HYPER_VOLUME(BLOC(calcul_des_parametres)                                                \
                                                            ,BLOC(Bblock                                                                \
                                                                  GENERATION_D_UNE_IMAGE_DE_L_HYPER_VOLUME_SANS_DIFFERENTIATION         \
                                                                      (Fx,Fy,Fz                                                         \
                                                                      ,BLOC(calcul_pc)                                                  \
                                                                       );                                                               \
                                                                  Eblock                                                                \
                                                                  )                                                                     \
                                                            ,Fx,Fy,Fz                                                                   \
                                                            ,Pxyz                                                                       \
                                                             );                                                                         \
                    Eblock                                                                                                              \
                                        /* Calcul sans differentiation et visualisation de l'hyper-volume avec evolution temporelle. */
#define   VISUALISATION_DE_L_HYPER_VOLUME_AVEC_DIFFERENCES____(calcul_des_parametres,Fx,Fy,Fz,Pxyz,calcul_pc)                           \
                    Bblock                                                                                                              \
                    VISUALISATION_GENERALE_DE_L_HYPER_VOLUME(BLOC(calcul_des_parametres)                                                \
                                                            ,BLOC(Bblock                                                                \
                                                                  GENER_HYPER_VOLUME_AVEC_DIFFERENCES____(Fx,Fy,Fz                      \
                                                                                                         ,BLOC(calcul_pc)               \
                                                                                                          );                            \
                                                                  Eblock                                                                \
                                                                  )                                                                     \
                                                            ,Fx,Fy,Fz                                                                   \
                                                            ,Pxyz                                                                       \
                                                             );                                                                         \
                    Eblock                                                                                                              \
                                        /* Calcul avec differentiation et visualisation de l'hyper-volume avec evolution temporelle. */



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