/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D E   L A   G E S T I O N   D E   L ' E N S E M B L E   D E   P A R T I C U L E S  :                 */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xrq/particle.M8$I' :                                                                                           */
/*                                                                                                                                   */
/*                    Jean-Francois Colonna (LACTAMME, 1994??????????).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D E   D E U X   P A R T I C U L E S   F I C T I V E S   N E C E S S A I R E S                        */
/*        A   L A   G E S T I O N   D E   L ' E N S E M B L E   D E   P A R T I C U L E S  :                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   PARTICULE_NON_DEFINIE                                                                                                         \
                    ADRESSE(particule_non_definie)
DEFV(Local,DEFV(Particule,particule_non_definie));
                                        /* Pour permettre la reference de particules non definies, ce qui est necessaire d'une part  */
                                        /* pour initialiser la liste des particules, et d'autre part pour faire des validations.     */

#define   PARTICULE_INDIFFERENTE                                                                                                        \
                    ADRESSE(particule_indifferente)
DEFV(Local,DEFV(Particule,particule_indifferente));
                                        /* Au cas ou une particule indifferente serait necessaire.                                   */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D E   L A   L I S T E   D E   L ' E N S E M B L E   D E   P A R T I C U L E S   ( F I N )  :         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
CREATION_D_UNE_LISTE(Particule
                    ,premiere_particule,derniere_particule
                    ,nombre_instantane_de_particules
                    ,debordement_de_la_liste_des_particules
                    ,PARTICULE_NON_DEFINIE
                     );
                                        /* Creation de la liste des particules...                                                    */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        G E S T I O N   D E S   E N S E M B L E S   D E   P A R T I C U L E S  :                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   CREATION_D_UNE_PARTICULE(particule_a_creer)                                                                                   \
                    Bblock                                                                                                              \
                    INSERTION_ELEMENT(Particule                                                                                         \
                                     ,premiere_particule,derniere_particule                                                             \
                                     ,nombre_instantane_de_particules                                                                   \
                                     ,debordement_de_la_liste_des_particules                                                            \
                                     ,PARTICULE_NON_DEFINIE                                                                             \
                                     ,SUIVANTE,PRECEDENTE,VALIDATION                                                                    \
                                     ,particule_a_creer                                                                                 \
                                     ,BLOC(EGAL(NOM(particule_a_creer),PARTICULE_NAISSANTE);)                                           \
                                      );                                                                                                \
                    Eblock                                                                                                              \
                                        /* Creation d'une particule.                                                                 */
#define   DESTRUCTION_D_UNE_PARTICULE(particule_a_detruire)                                                                             \
                    Bblock                                                                                                              \
                    DESTRUCTION_ELEMENT(Particule                                                                                       \
                                       ,premiere_particule,derniere_particule                                                           \
                                       ,nombre_instantane_de_particules                                                                 \
                                       ,debordement_de_la_liste_des_particules                                                          \
                                       ,PARTICULE_NON_DEFINIE                                                                           \
                                       ,SUIVANTE,PRECEDENTE,VALIDATION                                                                  \
                                       ,particule_a_detruire                                                                            \
                                       ,BLOC(Test(IFNE(NOM(particule_a_detruire),PARTICULE_INEXISTANTE))                                \
                                                  Bblock                                                                                \
                                                  EGAL(NOM(particule_a_detruire),PARTICULE_INEXISTANTE);                                \
                                                  Eblock                                                                                \
                                             ATes                                                                                       \
                                                  Bblock                                                                                \
                                                  PRINT_ERREUR("la particule a detruire est deja INEXISTANTE");                         \
                                                  Eblock                                                                                \
                                             ETes                                                                                       \
                                             )                                                                                          \
                                        );                                                                                              \
                    Eblock                                                                                                              \
                                        /* Destruction d'une particule.                                                              */

#define   ENSEMBLE_DES_PARTICULES(sequence)                                                                                             \
                    Bblock                                                                                                              \
                    PARCOURS_D_UNE_LISTE(Particule                                                                                      \
                                        ,premiere_particule,derniere_particule                                                          \
                                        ,nombre_instantane_de_particules                                                                \
                                        ,debordement_de_la_liste_des_particules                                                         \
                                        ,PARTICULE_NON_DEFINIE                                                                          \
                                        ,SUIVANTE,PRECEDENTE,VALIDATION                                                                 \
                                        ,particule_courante                                                                             \
                                        ,BLOC(sequence)                                                                                 \
                                         );                                                                                             \
                    Eblock                                                                                                              \
                                        /* Repetition d'une certaine sequence sur l'ensemble des particules.                         */

#define   COURANTE(particule_courante)                                                                                                  \
                    ACCES_A_UN_ELEMENT_D_UNE_LISTE(particule_courante)                                                                  \
                                        /* Acces a une particule donnee...                                                           */
#define   PARTICULE_COURANTE                                                                                                            \
                    COURANTE(particule_courante)                                                                                        \
                                        /* Definition de la particule courante dans la procedure 'ENSEMBLE_DES_PARTICULES(...)'.     */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        E T I Q U E T T A G E   D E S   P A R T I C U L E S  :                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
DEFV(Local,DEFV(Positive,INIT(etiquette_de_la_prochaine_particule_a_creer,UN)));
                                        /* Etiquette unique de la prochaine particule a creer...                                     */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        T E S T   D E   P R E S E N C E   D A N S   L ' U N I V E R S   P O U R   U N E   P A R T I C U L E  :                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   EXTENSION_DE_L_UNIVERS(dimension)                                                                                             \
                    GRO2(FRA1(dimension))                                                                                               \
                                        /* Afin que l'univers des particules soit superieur a l'univers visible...                   */

#define   EST_HORS_DE_L_UNIVERS(particule)                                                                                              \
                    IFGT(RdisF3D(POSITION_COURANTE_X(particule)                                                                         \
                                ,POSITION_COURANTE_Y(particule)                                                                         \
                                ,POSITION_COURANTE_Z(particule)                                                                         \
                                ,Xcentre_ESPACE                                                                                         \
                                ,Ycentre_ESPACE                                                                                         \
                                ,Zcentre_ESPACE                                                                                         \
                                 )                                                                                                      \
                        ,MOIT(RdisF3D(EXTENSION_DE_L_UNIVERS(ASD2(espace_physique,origine,x))                                           \
                                     ,EXTENSION_DE_L_UNIVERS(ASD2(espace_physique,origine,y))                                           \
                                     ,EXTENSION_DE_L_UNIVERS(ASD2(espace_physique,origine,z))                                           \
                                     ,EXTENSION_DE_L_UNIVERS(ASD2(espace_physique,extremite,x))                                         \
                                     ,EXTENSION_DE_L_UNIVERS(ASD2(espace_physique,extremite,y))                                         \
                                     ,EXTENSION_DE_L_UNIVERS(ASD2(espace_physique,extremite,z))                                         \
                                      )                                                                                                 \
                              )                                                                                                         \
                         )                                                                                                              \
                                        /* Test verifiant si la particule argument est dans l'univers de la simulation, l'univers    */ \
                                        /* etant une sphere circonscrite au parallelepipede le definissant dans 'espace_physique'.   */



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