/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N S   D E S   R O T A T I O N S   D E   L ' E S P A C E  :                                               */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xrq/nucleon.LE$I' :                                                                                            */
/*                                                                                                                                   */
/*                    Jean-Francois Colonna (LACTAMME, 1991??????????).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R O T A T I O N   A L E A T O I R E   D E   L ' E S P A C E   P H Y S I Q U E                                              */
/*        P A S S A N T   D E   L ' E S P A C E   P H Y S I Q U E   ( O X 1 , O Y 1 , O Z 1 )                                        */
/*        A   L ' E S P A C E   A L E A T O I R E   ( O X 2 , O Y 2 , O Z 2 )   E T   I N V E R S E M E N T  :                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   DEBUT_DE_ROTATION_ALEATOIRE_DE_L_ESPACE_PHYSIQUE                                                                              \
                                        /* ATTENTION : on n'utilise pas ici le couple ('BblockV','EblockV') car en effet sur         */ \
                                        /* certains systemes, il est vide ; or ici, dans la mesure ou l'on redefinit des variables   */ \
                                        /* locales, il est absoluement necessaire que ce couple soit equivalent au couple            */ \
                                        /* ('Bblock','Eblock')...                                                                    */ \
                    Bblock                                                                                                              \
                    DEFV(Float,INIT(Euler1,FLOT__UNDEF));                                                                               \
                    DEFV(Float,INIT(Euler2,FLOT__UNDEF));                                                                               \
                    DEFV(Float,INIT(Euler3,FLOT__UNDEF));                                                                               \
                                        /* La rotation de l'espace physique est definie par les 3 angles d'Euler (voir page 324      */ \
                                        /* de l'aide memoire de mathematiques) :                                                     */ \
                                        /*                                                                                           */ \
                                        /* Euler1 : angle de nutation 'theta' (entre les axes OZ1 et OZ2),                           */ \
                                        /* Euler2 : angle de precession 'psi' (entre l'axe OX1 et la droite d'intersection entre     */ \
                                        /*          les plans (OX1,OY1) et (OX2,OY2)),                                               */ \
                                        /* Euler3 : angle de rotation pure 'phi' (entre l'axe OX2 et la droite d'intersection entre  */ \
                                        /*          les plans (OX1,OY1) et (OX2,OY2)),                                               */ \
                                        /*                                                                                           */ \
                    GENERATION_D_UN_DEMI_ANGLE(Euler1);                                                                                 \
                    GENERATION_D_UN_ANGLE(Euler2);                                                                                      \
                    GENERATION_D_UN_ANGLE(Euler3);                                                                                      \
                                        /* Rotation aleatoire de l'espace physique par choix aleatoire des 3 angles d'Euler, avec :  */ \
                                        /*                                                                                           */ \
                                        /*                  Euler1 E [0,pi],                                                         */ \
                                        /*                  Euler2 E [0,2*pi],                                                       */ \
                                        /*                  Euler3 E [0,2*pi].                                                       */ \
                                        /*                                                                                           */ \
                    INITIALISATION_D_UNE_MATRICE_DE_ROTATION_D_EULER(matrice_de_rotation,Euler1,Euler2,Euler3);                         \
                                        /* Calcul de la matrice de rotation de l'espace physique permettant de passer de l'espace    */ \
                                        /* aleatoire (OX2,OY2,OZ2) a l'espace physique (OX1,OY1,OZ1).                                */ \
                                        /*                                                                                           */ \
                                        /* Debut de la sequence de rotation aleatoire de l'espace physique.                          */
#define   DEBUT_DE_CHOIX_D_UNE_DIRECTION_ALEATOIRE_DANS_L_ESPACE_PHYSIQUE                                                               \
                                        /* ATTENTION : on n'utilise pas ici le couple ('BblockV','EblockV') car en effet sur         */ \
                                        /* certains systemes, il est vide ; or ici, dans la mesure ou l'on redefinit des variables   */ \
                                        /* locales, il est absoluement necessaire que ce couple soit equivalent au couple            */ \
                                        /* ('Bblock','Eblock')...                                                                    */ \
                    Bblock                                                                                                              \
                    DEFV(Float,INIT(theta_polaire,FLOT__UNDEF));                                                                        \
                                        /* Direction polaire aleatoire dans le plan (OX2,OY2) apres rotation de l'espace physique.   */ \
                    GENERATION_D_UNE_DIRECTION_2D(theta_polaire);                                                                       \
                                        /* Direction polaire aleatoire dans le plan (OX2,OY2) apres rotation de l'espace physique.   */ \
                                        /*                                                                                           */ \
                                        /* Debut de la sequence de choix d'une direction aleatoire dans l'espace physique.           */

#define   FIN_DE_CHOIX_D_UNE_DIRECTION_ALEATOIRE_DANS_L_ESPACE_PHYSIQUE                                                                 \
                                        /* ATTENTION : on n'utilise pas ici le couple ('BblockV','EblockV') car en effet sur         */ \
                                        /* certains systemes, il est vide ; or ici, dans la mesure ou l'on redefinit des variables   */ \
                                        /* locales, il est absoluement necessaire que ce couple soit equivalent au couple            */ \
                                        /* ('Bblock','Eblock')...                                                                    */ \
                    Eblock                                                                                                              \
                                        /* Fin de la sequence de choix d'une direction aleatoire dans l'espace physique.             */
#define   FIN_DE_ROTATION_ALEATOIRE_DE_L_ESPACE_PHYSIQUE                                                                                \
                                        /* ATTENTION : on n'utilise pas ici le couple ('BblockV','EblockV') car en effet sur         */ \
                                        /* certains systemes, il est vide ; or ici, dans la mesure ou l'on redefinit des variables   */ \
                                        /* locales, il est absoluement necessaire que ce couple soit equivalent au couple            */ \
                                        /* ('Bblock','Eblock')...                                                                    */ \
                    Eblock                                                                                                              \
                                        /* Fin de la sequence de rotation aleatoire de l'espace physique.                            */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F L U C T U A T I O N   A L E A T O I R E   D ' U N E   P O S I T I O N  :                                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#TestADef VOISINAGE_D_INTERACTION_1_POUR_2_PARTICULES                                                                                   \
                    GRO4(FRA10(FRA10(RAYON_D_UN_HADRON)))                                                                               \
                                        /* ATTENTION : la valeur de 'VOISINAGE_D_INTERACTION_1_POUR_2_PARTICULES' est plus grande    */ \
                                        /* dans '$xrq/di_elec.L0$K' que dans '$xrq/nucleon.LE$I', et ce afin de favoriser au         */ \
                                        /* mieux l'absorbtion, par des electrons, des photons qui doivent les intercepter...         */
#TestADef DISTANCE_DE_PERTURBATION_D_UNE_POSITION                                                                                       \
                    FRA4(GRO4(FRA10(FRA10(RAYON_D_UN_HADRON))))                                                                         \
                                        /* ATTENTION : la valeur de 'DISTANCE_DE_PERTURBATION_D_UNE_POSITION' est choisie nulle      */ \
                                        /* dans '$xrq/di_elec.L0$K' afin de garantir que tout le monde restera dans le plan          */ \
                                        /* (OX,OY)...                                                                                */
DEFV(Local,DEFV(Float,INIT(distance_de_perturbation_d_une_position,DISTANCE_DE_PERTURBATION_D_UNE_POSITION)));
                                        /* Distance maximale sur la quelle une position peut etre perturbee. ATTENTION, autrefois    */
                                        /* on trouvait la definition :                                                               */
                                        /*                                                                                           */
                                        /*                  #define   DISTANCE_DE_PERTURBATION_D_UNE_POSITION                     \  */
                                        /*                                      FRA4(VOISINAGE_D_INTERACTION_1_POUR_2_PARTICULES)    */
                                        /*                                                                                           */
                                        /* mais il est plus logique de decoupler les deux definitions ; cela a ete introduit a       */
                                        /* l'occasion de la definition du "di-electron"...                                           */

#define   FLUCTUATION_ALEATOIRE_D_UNE_POSITION(position)                                                                                \
                    Bblock                                                                                                              \
                    DEFINITION_D_UNE_DIRECTION_EN_COORDONNEES_SPHERIQUES(rho_position,theta_position,phi_position);                     \
                                        /* Definition d'une position en coordonnees spheriques.                                      */ \
                    GENERATION_D_UNE_VALEUR(rho_position                                                                                \
                                           ,FZERO                                                                                       \
                                           ,distance_de_perturbation_d_une_position                                                     \
                                            );                                                                                          \
                    GENERATION_D_UNE_DIRECTION_3D(theta_position,phi_position)                                                          \
                                        /* Generation d'une distance et d'une direction aleatoire...                                 */ \
                    INCR(ASD1(position,x)                                                                                               \
                        ,Xcartesienne_3D(rho_position                                                                                   \
                                        ,theta_position                                                                                 \
                                        ,phi_position                                                                                   \
                                         )                                                                                              \
                         );                                                                                                             \
                    INCR(ASD1(position,y)                                                                                               \
                        ,Ycartesienne_3D(rho_position                                                                                   \
                                        ,theta_position                                                                                 \
                                        ,phi_position                                                                                   \
                                         )                                                                                              \
                         );                                                                                                             \
                    INCR(ASD1(position,z)                                                                                               \
                        ,Zcartesienne_3D(rho_position                                                                                   \
                                        ,theta_position                                                                                 \
                                        ,phi_position                                                                                   \
                                         )                                                                                              \
                         );                                                                                                             \
                                        /* Fluctuations aleatoires et independantes des trois composantes de la position.            */ \
                    Eblock                                                                                                              \
                                        /* Fluctuation aleatoire d'une position.                                                     */

#define   PERTURBER_UNE_POSITION                                                                                                        \
                    VRAI
#define   NE_PAS_PERTURBER_UNE_POSITION                                                                                                 \
                    NOTL(PERTURBER_UNE_POSITION)
                                        /* Arguments de 'FLUCTUATION_ALEATOIRE_D_UNE_POSITION_INITIALE(...)',                        */
                                        /* 'FLUCTUATION_ALEATOIRE_D_UNE_POSITION_COURANTE(...)' et                                   */
                                        /* 'FLUCTUATION_ALEATOIRE_DES_POSITIONS_INITIALE_ET_COURANTE(...)'.                          */
#define   FLUCTUATION_ALEATOIRE_D_UNE_POSITION_INITIALE(particule,perturber)                                                            \
                    Bblock                                                                                                              \
                    Test(IL_FAUT(perturber))                                                                                            \
                         Bblock                                                                                                         \
                         FLUCTUATION_ALEATOIRE_D_UNE_POSITION(ASI2(particule,espace_temps,position_initiale));                          \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Fluctuation aleatoire d'une position initiale.                                            */
#define   FLUCTUATION_ALEATOIRE_D_UNE_POSITION_COURANTE(particule,perturber)                                                            \
                    Bblock                                                                                                              \
                    Test(IL_FAUT(perturber))                                                                                            \
                         Bblock                                                                                                         \
                         FLUCTUATION_ALEATOIRE_D_UNE_POSITION(ASI2(particule,espace_temps,position_courante));                          \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Fluctuation aleatoire d'une position courante.                                            */
#define   FLUCTUATION_ALEATOIRE_DES_POSITIONS_INITIALE_ET_COURANTE(particule,perturber)                                                 \
                    Bblock                                                                                                              \
                    Test(IL_FAUT(perturber))                                                                                            \
                         Bblock                                                                                                         \
                         FLUCTUATION_ALEATOIRE_D_UNE_POSITION_INITIALE(particule,perturber);                                            \
                         INITIALISATION_DE_LA_POSITION_COURANTE_D_UNE_PARTICULE(particule);                                             \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Fluctuation aleatoire des positions initiale et courante.                                 */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F L U C T U A T I O N   A L E A T O I R E   D ' U N E   D I R E C T I O N  :                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   TAUX_DE_FLUCTUATION_D_UNE_DIRECTION                                                                                           \
                    GRO1(FRA2(FRA10(FU)))
DEFV(Local,DEFV(Float,INIT(taux_de_fluctuation_d_une_direction,TAUX_DE_FLUCTUATION_D_UNE_DIRECTION)));
                                        /* Taux de fluctuation d'une direction...                                                    */

#define   FLUCTUATION_ALEATOIRE_D_UNE_DIRECTION(direction,perturber_la_direction_theta,perturber_la_direction_phi)                      \
                    Bblock                                                                                                              \
                    DEFINITION_D_UNE_DIRECTION_EN_COORDONNEES_SPHERIQUES(rho_direction,theta_direction,phi_direction);                  \
                                        /* Definition d'une direction en coordonnees spheriques.                                     */ \
                    DEFV(Float,INIT(fluctuation_de_theta_direction,FZERO));                                                             \
                    DEFV(Float,INIT(fluctuation_de_phi_direction,FZERO));                                                               \
                                        /* Definition des fluctuations exprimees en coordonnees spheriques et initialisees comme     */ \
                                        /* si 'NE_PAS_PERTURBER_LA_DIRECTION_THETA' et 'NE_PAS_PERTURBER_LA_DIRECTION_PHI'...        */ \
                    EGAL(rho_direction                                                                                                  \
                        ,Rho_3D(ASD1(direction,dx),ASD1(direction,dy),ASD1(direction,dz))                                               \
                         );                                                                                                             \
                    EGAL(theta_direction                                                                                                \
                        ,Phi_3D(ASD1(direction,dx),ASD1(direction,dy),ASD1(direction,dz))                                               \
                         );                                                                                                             \
                    EGAL(phi_direction                                                                                                  \
                        ,Theta_3D(ASD1(direction,dx),ASD1(direction,dy),ASD1(direction,dz))                                             \
                         );                                                                                                             \
                                        /* Passage des coordonnees cartesiennes aux coordonnees spheriques. ATTENTION, a la          */ \
                                        /* permutation de 'theta' et de 'phi' liee a la definition des coordonnees spheriques (voir  */ \
                                        /* l'Aide-Memoire de Mathematiques, page 321 et 322).                                        */ \
                                                                                                                                        \
                    Test(IL_FAUT(perturber_la_direction_theta))                                                                         \
                         Bblock                                                                                                         \
                         GENERATION_D_UNE_VALEUR(fluctuation_de_theta_direction                                                         \
                                                ,NEGA(MUL2(taux_de_fluctuation_d_une_direction,PI))                                     \
                                                ,NEUT(MUL2(taux_de_fluctuation_d_une_direction,PI))                                     \
                                                 );                                                                                     \
                                        /* Calcul de la fluctuation aleatoire de l'angles 'theta' dans un intervalle [-p.PI,+p.PI]   */ \
                                        /* ou 'p' represente un pourcentage de 'PI'...                                               */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                                                                                                                                        \
                    Test(IL_FAUT(perturber_la_direction_phi))                                                                           \
                         Bblock                                                                                                         \
                         GENERATION_D_UNE_VALEUR(fluctuation_de_phi_direction                                                           \
                                                ,NEGA(MUL2(taux_de_fluctuation_d_une_direction,PI))                                     \
                                                ,NEUT(MUL2(taux_de_fluctuation_d_une_direction,PI))                                     \
                                                 );                                                                                     \
                                        /* Calcul de la fluctuation aleatoire de l'angles 'phi' dans un intervalle [-p.PI,+p.PI]     */ \
                                        /* ou 'p' represente un pourcentage de 'PI'...                                               */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                                                                                                                                        \
                    INITIALISATION_ACCROISSEMENT_3D(direction                                                                           \
                                                   ,Xcartesienne_3D(rho_direction                                                       \
                                                                   ,ADD2(theta_direction,fluctuation_de_theta_direction)                \
                                                                   ,ADD2(phi_direction,fluctuation_de_phi_direction)                    \
                                                                    )                                                                   \
                                                   ,Ycartesienne_3D(rho_direction                                                       \
                                                                   ,ADD2(theta_direction,fluctuation_de_theta_direction)                \
                                                                   ,ADD2(phi_direction,fluctuation_de_phi_direction)                    \
                                                                    )                                                                   \
                                                   ,Zcartesienne_3D(rho_direction                                                       \
                                                                   ,ADD2(theta_direction,fluctuation_de_theta_direction)                \
                                                                   ,ADD2(phi_direction,fluctuation_de_phi_direction)                    \
                                                                    )                                                                   \
                                                    );                                                                                  \
                                        /* Fluctuations aleatoires et independantes des trois composantes de la direction ; pour     */ \
                                        /* ce faire, on repasse des coordonnees spheriques aux coordonnees cartesiennes en           */ \
                                        /* perturbant les deux angles (theta,phi), et en laissant 'rho' inchange...                  */ \
                    Eblock                                                                                                              \
                                        /* Fluctuation aleatoire d'une direction. On notera que la norme de la 'direction' est       */ \
                                        /* conservee par cette operation, puisque l'on ne touche qu'a (theta,phi)...                 */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R O T A T I O N   D ' A L I G N E M E N T   D E   L ' A X E   ' O X 2 '   D E   L ' E S P A C E   P H Y S I Q U E          */
/*        S U R   U N E   D I R E C T I O N   D O N N E E ,   L E S   A X E S   ' O Y 2 '   E T   ' O Z 2 '   E T A N T              */
/*        P O S I T I O N N E S   A L E A T O I R E M E N T E   E T   P A S S A N T   D E   L ' E S P A C E   P H Y S I Q U E        */
/*        ( O X 1 , O Y 1 , O Z 1 )   A   L ' E S P A C E   ( O X 2 , O Y 2 , O Z 2 )   E T   I N V E R S E M E N T  :               */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definitions :                                                                                                              */
/*                                                                                                                                   */
/*                                      .                                                                                            */
/*                                 OY1 /|\                                                                                           */
/*                                      |                                                                +                           */
/*                                      |                                         .                    .                             */
/*                                      |                                       .                    .                               */
/*                                      |     .                               .   OX2              .                                 */
/*                                      |       .                           .                    .   direction sur laquelle          */
/*                                      |  OY2    .                       .                    .     est aligne l'axe 'OX2'          */
/*                                      |           . plan  dans lequel .                    .                                       */
/*                                      |             .  est  mesure  .                    .                                         */
/*                                      |               .  'theta'  .                                                                */
/*                                      |                 .       .                                                                  */
/*                                      |                   .   .                                                                    */
/*                                      |                     .                                                                      */
/*                                      |                  O2                                                                        */
/*                                      |                     .                                                                      */
/*                                      |                                                                                            */
/*                                      |                     .                                                                      */
/*                                      |                                                                                            */
/*                                   O1 |_____________________.___________________________\                                          */
/*                                     /                                                  /                                          */
/*                                    /                       .                                                                      */
/*                                   /                                                OX1                                            */
/*                                  /                         .                                                                      */
/*                                 /                                                                                                 */
/*                                /                           .                                                                      */
/*                               /                                                                                                   */
/*                              /                         OZ2 .                                                                      */
/*                         OZ1 /                                                                                                     */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                    En general, le couple (OY2,OZ2) tourne "librement"                                                             */
/*                  autour de l'axe 'OX2' (l'angle de rotation etant par                                                             */
/*                  exemple fixe aleatoirement...).                                                                                  */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   PERTURBER_UNE_DIRECTION                                                                                                       \
                    VRAI
#define   NE_PAS_PERTURBER_UNE_DIRECTION                                                                                                \
                    NOTL(PERTURBER_UNE_DIRECTION)
                                        /* Arguments de 'DEBUT_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_DANS_UNE_DIRECTION()'.  */

#define   PERTURBER_LA_DIRECTION_THETA                                                                                                  \
                    PERTURBER_UNE_DIRECTION
#define   NE_PAS_PERTURBER_LA_DIRECTION_THETA                                                                                           \
                    NE_PAS_PERTURBER_UNE_DIRECTION
#define   PERTURBER_LA_DIRECTION_PHI                                                                                                    \
                    PERTURBER_UNE_DIRECTION
#define   NE_PAS_PERTURBER_LA_DIRECTION_PHI                                                                                             \
                    NE_PAS_PERTURBER_UNE_DIRECTION
                                        /* Arguments de 'FLUCTUATION_ALEATOIRE_D_UNE_DIRECTION(...)'.                                */

#define   DEBUT_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_DANS_UNE_DIRECTION(direction,perturber_la_direction)                      \
                                        /* ATTENTION : on n'utilise pas ici le couple ('BblockV','EblockV') car en effet sur         */ \
                                        /* certains systemes, il est vide ; or ici, dans la mesure ou l'on redefinit des variables   */ \
                                        /* locales, il est absoluement necessaire que ce couple soit equivalent au couple            */ \
                                        /* ('Bblock','Eblock')...                                                                    */ \
                    Bblock                                                                                                              \
                    DEFV(deltaF_3D,direction_perturbee);                                                                                \
                                        /* Definition d'une version perturbee aleatoirement de la 'direction' argument...            */ \
                    DEFV(Float,INIT(module_du_vecteur_direction,FLOT__UNDEF));                                                          \
                                        /* Definition du module du vecteur direction ; on notera que ce module peut etre nul dans    */ \
                                        /* le cas exceptionnel du vecteur vitesse d'une particule immobile (cas des quarks REELs     */ \
                                        /* par exemple de temps en temps)...                                                         */ \
                    DEFV(deltaF_3D,vecteur_unitaire_de_OX2);                                                                            \
                                        /* Definition des cosinus directeurs (l1,m1,n1) de l'axe 'OX2'.                              */ \
                    DEFV(deltaF_3D,vecteur_unitaire_de_OY2_non_normalise);                                                              \
                                        /* Definition des cosinus directeurs non normalises (lp2,mp2,np2) de l'axe 'OY2',            */ \
                    DEFV(Float,INIT(module_du_vecteur_unitaire_de_OY2_non_normalise,FLOT__UNDEF));                                      \
                                        /* Module du vecteur (lp2,mp2,np2).                                                          */ \
                    DEFV(deltaF_3D,vecteur_unitaire_de_OY2);                                                                            \
                                        /* Definition des cosinus directeurs (l2,m2,n2) de l'axe 'OY2'.                              */ \
                    DEFV(deltaF_3D,vecteur_unitaire_de_OZ2);                                                                            \
                                        /* Definition des cosinus directeurs (l3,m3,n3) de l'axe 'OZ2'.                              */ \
                                                                                                                                        \
                    TRANSFERT_ACCROISSEMENT_3D(direction_perturbee,direction);                                                          \
                                        /* Transfert de la direction argument afin de pouvoir eventuellement la perturber...         */ \
                    Test(IL_FAUT(perturber_la_direction))                                                                               \
                         Bblock                                                                                                         \
                         FLUCTUATION_ALEATOIRE_D_UNE_DIRECTION(direction_perturbee                                                      \
                                                              ,PERTURBER_LA_DIRECTION_THETA                                             \
                                                              ,PERTURBER_LA_DIRECTION_PHI                                               \
                                                               );                                                                       \
                                        /* Perturbation aleatoire de la 'direction' argument...                                      */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    EGAL(module_du_vecteur_direction,longF3D(direction_perturbee));                                                     \
                                        /* Calcul du module du vecteur direction ; on notera que ce module peut etre nul dans        */ \
                                        /* le cas exceptionnel du vecteur vitesse d'une particule immobile (cas des quarks REELs     */ \
                                        /* par exemple de temps en temps)...                                                         */ \
                                                                                                                                        \
                    Test(IZNE(module_du_vecteur_direction))                                                                             \
                         Bblock                                                                                                         \
                                        /* Cas, par exemple, du vecteur vitesse d'une particule en mouvement :                       */ \
                         INITIALISATION_ACCROISSEMENT_3D(vecteur_unitaire_de_OX2                                                        \
                                                        ,DIVI(ASD1(direction_perturbee,dx),module_du_vecteur_direction)                 \
                                                        ,DIVI(ASD1(direction_perturbee,dy),module_du_vecteur_direction)                 \
                                                        ,DIVI(ASD1(direction_perturbee,dz),module_du_vecteur_direction)                 \
                                                         );                                                                             \
                                        /* Calcul des cosinus (l1,m1,n1) directeurs de l'axe 'OX2' que l'on aligne sur le vecteur    */ \
                                        /* direction...                                                                              */ \
                         Test(IZNE(ASD1(vecteur_unitaire_de_OX2,dx)))                                                                   \
                              Bblock                                                                                                    \
                              GENERATION_D_UNE_VALEUR(ASD1(vecteur_unitaire_de_OY2_non_normalise,dy),FZERO,FU);                         \
                              GENERATION_D_UNE_VALEUR(ASD1(vecteur_unitaire_de_OY2_non_normalise,dz),FZERO,FU);                         \
                                                                                                                                        \
                              EGAL(ASD1(vecteur_unitaire_de_OY2_non_normalise,dx)                                                       \
                                  ,DIVI(NEGA(ADD2(MUL2(ASD1(vecteur_unitaire_de_OX2,dy)                                                 \
                                                      ,ASD1(vecteur_unitaire_de_OY2_non_normalise,dy)                                   \
                                                       )                                                                                \
                                                 ,MUL2(ASD1(vecteur_unitaire_de_OX2,dz)                                                 \
                                                      ,ASD1(vecteur_unitaire_de_OY2_non_normalise,dz)                                   \
                                                       )                                                                                \
                                                  )                                                                                     \
                                             )                                                                                          \
                                       ,ASD1(vecteur_unitaire_de_OX2,dx)                                                                \
                                        )                                                                                               \
                                   );                                                                                                   \
                                        /* Calcul des cosinus directeurs non normalises de l'axe 'OY2' tels que 'OX2' et 'OY2'       */ \
                                        /* soient orthogonaux, ce que l'on traduit par la nullite du produit scalaire :              */ \
                                        /*                                                                                           */ \
                                        /*                  (l1,m1,n1).(l2,m2,n2) = (l1,m1,n1).(lp2,mp2,np2) = 0,                    */ \
                                        /*                                                                                           */ \
                                        /* ce qui donne 'lp2', 'mp2' et 'np2' etant tires au sort au prealable...                    */ \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Test(IZNE(ASD1(vecteur_unitaire_de_OX2,dy)))                                                              \
                                   Bblock                                                                                               \
                                   GENERATION_D_UNE_VALEUR(ASD1(vecteur_unitaire_de_OY2_non_normalise,dz),FZERO,FU);                    \
                                   GENERATION_D_UNE_VALEUR(ASD1(vecteur_unitaire_de_OY2_non_normalise,dx),FZERO,FU);                    \
                                                                                                                                        \
                                   EGAL(ASD1(vecteur_unitaire_de_OY2_non_normalise,dy)                                                  \
                                       ,DIVI(NEGA(ADD2(MUL2(ASD1(vecteur_unitaire_de_OX2,dz)                                            \
                                                           ,ASD1(vecteur_unitaire_de_OY2_non_normalise,dz)                              \
                                                            )                                                                           \
                                                      ,MUL2(ASD1(vecteur_unitaire_de_OX2,dx)                                            \
                                                           ,ASD1(vecteur_unitaire_de_OY2_non_normalise,dx)                              \
                                                            )                                                                           \
                                                       )                                                                                \
                                                  )                                                                                     \
                                            ,ASD1(vecteur_unitaire_de_OX2,dy)                                                           \
                                             )                                                                                          \
                                        );                                                                                              \
                                        /* Calcul des cosinus directeurs non normalises de l'axe 'OY2' tels que 'OX2' et 'OY2'       */ \
                                        /* soient orthogonaux, ce que l'on traduit par la nullite du produit scalaire :              */ \
                                        /*                                                                                           */ \
                                        /*                  (l1,m1,n1).(l2,m2,n2) = (l1,m1,n1).(lp2,mp2,np2) = 0,                    */ \
                                        /*                                                                                           */ \
                                        /* ce qui donne 'mp2', 'lp2' et 'np2' etant tires au sort au prealable...                    */ \
                                   Eblock                                                                                               \
                              ATes                                                                                                      \
                                   Bblock                                                                                               \
                                   Test(IZNE(ASD1(vecteur_unitaire_de_OX2,dz)))                                                         \
                                        Bblock                                                                                          \
                                        GENERATION_D_UNE_VALEUR(ASD1(vecteur_unitaire_de_OY2_non_normalise,dx),FZERO,FU);               \
                                        GENERATION_D_UNE_VALEUR(ASD1(vecteur_unitaire_de_OY2_non_normalise,dy),FZERO,FU);               \
                                                                                                                                        \
                                        EGAL(ASD1(vecteur_unitaire_de_OY2_non_normalise,dz)                                             \
                                            ,DIVI(NEGA(ADD2(MUL2(ASD1(vecteur_unitaire_de_OX2,dx)                                       \
                                                                ,ASD1(vecteur_unitaire_de_OY2_non_normalise,dx)                         \
                                                                 )                                                                      \
                                                           ,MUL2(ASD1(vecteur_unitaire_de_OX2,dy)                                       \
                                                                ,ASD1(vecteur_unitaire_de_OY2_non_normalise,dy)                         \
                                                                 )                                                                      \
                                                            )                                                                           \
                                                       )                                                                                \
                                                 ,ASD1(vecteur_unitaire_de_OX2,dz)                                                      \
                                                  )                                                                                     \
                                             );                                                                                         \
                                        /* Calcul des cosinus directeurs non normalises de l'axe 'OY2' tels que 'OX2' et 'OY2'       */ \
                                        /* soient orthogonaux, ce que l'on traduit par la nullite du produit scalaire :              */ \
                                        /*                                                                                           */ \
                                        /*                  (l1,m1,n1).(l2,m2,n2) = (l1,m1,n1).(lp2,mp2,np2) = 0,                    */ \
                                        /*                                                                                           */ \
                                        /* ce qui donne 'np2', 'lp2' et 'mp2' etant tires au sort au prealable...                    */ \
                                        Eblock                                                                                          \
                                   ATes                                                                                                 \
                                        Bblock                                                                                          \
                                        PRINT_ERREUR("les cosinus directeurs (l1,m1,n1) sont tous nuls");                               \
                                        Eblock                                                                                          \
                                   ETes                                                                                                 \
                                   Eblock                                                                                               \
                              ETes                                                                                                      \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                                                                                                                                        \
                         EGAL(module_du_vecteur_unitaire_de_OY2_non_normalise,longF3D(vecteur_unitaire_de_OY2_non_normalise));          \
                                                                                                                                        \
                         Test(IZNE(module_du_vecteur_unitaire_de_OY2_non_normalise))                                                    \
                              Bblock                                                                                                    \
                              INITIALISATION_ACCROISSEMENT_3D(vecteur_unitaire_de_OY2                                                   \
                                                             ,DIVI(ASD1(vecteur_unitaire_de_OY2_non_normalise,dx)                       \
                                                                  ,module_du_vecteur_unitaire_de_OY2_non_normalise                      \
                                                                   )                                                                    \
                                                             ,DIVI(ASD1(vecteur_unitaire_de_OY2_non_normalise,dy)                       \
                                                                  ,module_du_vecteur_unitaire_de_OY2_non_normalise                      \
                                                                   )                                                                    \
                                                             ,DIVI(ASD1(vecteur_unitaire_de_OY2_non_normalise,dz)                       \
                                                                  ,module_du_vecteur_unitaire_de_OY2_non_normalise                      \
                                                                   )                                                                    \
                                                              );                                                                        \
                                        /* Calcul des cosinus directeurs (l2,m2,n2) de l'axe 'OY2' qui est donc orthogonal a         */ \
                                        /* l'axe 'OX2', mais avec un degre d'aleatoire...                                            */ \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              PRINT_ERREUR("le module du vecteur unitaire de 'OY2' est nul");                                           \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                                                                                                                                        \
                         INITIALISATION_ACCROISSEMENT_3D(vecteur_unitaire_de_OZ2                                                        \
                                                                                                                                        \
                                                        ,PvectX(ASD1(vecteur_unitaire_de_OX2,dx)                                        \
                                                               ,ASD1(vecteur_unitaire_de_OX2,dy)                                        \
                                                               ,ASD1(vecteur_unitaire_de_OX2,dz)                                        \
                                                                                                                                        \
                                                               ,ASD1(vecteur_unitaire_de_OY2,dx)                                        \
                                                               ,ASD1(vecteur_unitaire_de_OY2,dy)                                        \
                                                               ,ASD1(vecteur_unitaire_de_OY2,dz)                                        \
                                                                )                                                                       \
                                                                                                                                        \
                                                        ,PvectY(ASD1(vecteur_unitaire_de_OX2,dx)                                        \
                                                               ,ASD1(vecteur_unitaire_de_OX2,dy)                                        \
                                                               ,ASD1(vecteur_unitaire_de_OX2,dz)                                        \
                                                                                                                                        \
                                                               ,ASD1(vecteur_unitaire_de_OY2,dx)                                        \
                                                               ,ASD1(vecteur_unitaire_de_OY2,dy)                                        \
                                                               ,ASD1(vecteur_unitaire_de_OY2,dz)                                        \
                                                                )                                                                       \
                                                                                                                                        \
                                                        ,PvectZ(ASD1(vecteur_unitaire_de_OX2,dx)                                        \
                                                               ,ASD1(vecteur_unitaire_de_OX2,dy)                                        \
                                                               ,ASD1(vecteur_unitaire_de_OX2,dz)                                        \
                                                                                                                                        \
                                                               ,ASD1(vecteur_unitaire_de_OY2,dx)                                        \
                                                               ,ASD1(vecteur_unitaire_de_OY2,dy)                                        \
                                                               ,ASD1(vecteur_unitaire_de_OY2,dz)                                        \
                                                                )                                                                       \
                                                                                                                                        \
                                                         );                                                                             \
                                        /* Calcul des cosinus directeurs (l3,m3,n3) de l'axe 'OZ2' tel qu'il soit orthogonal aux     */ \
                                        /* deux axes 'OX2' et 'OY2'. On a donc '/\' representant le produit vectoriel :              */ \
                                        /*                                                                                           */ \
                                        /*                  (l3,m3,n3) = (l1,m1,n1) /\ (l2,m2,n2).                                   */ \
                                        /*                                                                                           */ \
                                                                                                                                        \
                         INITIALISATION_MATRICE_3D(matrice_de_rotation                                                                  \
                                                                                                                                        \
                                                  ,ASD1(vecteur_unitaire_de_OX2,dx)                                                     \
                                                  ,ASD1(vecteur_unitaire_de_OY2,dx)                                                     \
                                                  ,ASD1(vecteur_unitaire_de_OZ2,dx)                                                     \
                                                                                                                                        \
                                                  ,ASD1(vecteur_unitaire_de_OX2,dy)                                                     \
                                                  ,ASD1(vecteur_unitaire_de_OY2,dy)                                                     \
                                                  ,ASD1(vecteur_unitaire_de_OZ2,dy)                                                     \
                                                                                                                                        \
                                                  ,ASD1(vecteur_unitaire_de_OX2,dz)                                                     \
                                                  ,ASD1(vecteur_unitaire_de_OY2,dz)                                                     \
                                                  ,ASD1(vecteur_unitaire_de_OZ2,dz)                                                     \
                                                                                                                                        \
                                                   );                                                                                   \
                                        /* Calcul de la matrice de rotation de l'espace physique permettant de passer de l'espace    */ \
                                        /* aligne (OX2,OY2,OZ2) a l'espace physique (OX1,OY1,OZ1).                                   */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                                        /* Cas, par exemple, du vecteur vitesse d'une particule immobile :                           */ \
                         DEBUT_DE_ROTATION_ALEATOIRE_DE_L_ESPACE_PHYSIQUE;                                                              \
                         FIN_DE_ROTATION_ALEATOIRE_DE_L_ESPACE_PHYSIQUE;                                                                \
                                        /* Dans ce cas-la, la rotation est completement aleatoire. En fait, il serait surement       */ \
                                        /* preferable de faire :                                                                     */ \
                                        /*                                                                                           */ \
                                        /*   DEBUT_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_VERS_LE_QUARK_REEL_DOMINANT(...);   */ \
                                        /*   FIN_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_VERS_LE_QUARK_REEL_DOMINANT;          */ \
                                        /*                                                                                           */ \
                                        /* mais malheureusement, la premiere de ces procedures reference la procedure courante       */ \
                                        /* 'DEBUT_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_DANS_UNE_DIRECTION(...)', d'ou       */ \
                                        /* une boucle infernale...                                                                   */ \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                                        /* Debut de la sequence de rotation d'alignement dans l'espace physique.                     */
#define   DEBUT_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_DANS_UNE_DIRECTION                                           \
                                        /* ATTENTION : on n'utilise pas ici le couple ('BblockV','EblockV') car en effet sur         */ \
                                        /* certains systemes, il est vide ; or ici, dans la mesure ou l'on redefinit des variables   */ \
                                        /* locales, il est absoluement necessaire que ce couple soit equivalent au couple            */ \
                                        /* ('Bblock','Eblock')...                                                                    */ \
                    Bblock                                                                                                              \
                    DEFV(Float,INIT(theta_polaire,FZERO));                                                                              \
                                        /* Direction polaire de la particule sur laquelle on s'aligne. Cet angle est donc nul,       */ \
                                        /* puisque l'on a fait coincider l'axe 'OX2' avec la direction...                            */ \
                                        /*                                                                                           */ \
                                        /* debut de la sequence de choix d'une direction d'alignement dans l'espace physique.        */

#define   FIN_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_DANS_UNE_DIRECTION                                             \
                                        /* ATTENTION : on n'utilise pas ici le couple ('BblockV','EblockV') car en effet sur         */ \
                                        /* certains systemes, il est vide ; or ici, dans la mesure ou l'on redefinit des variables   */ \
                                        /* locales, il est absoluement necessaire que ce couple soit equivalent au couple            */ \
                                        /* ('Bblock','Eblock')...                                                                    */ \
                    Eblock                                                                                                              \
                                        /* Fin de la sequence de choix d'une direction d'alignement dans l'espace physique.          */
#define   FIN_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_DANS_UNE_DIRECTION                                                          \
                                        /* ATTENTION : on n'utilise pas ici le couple ('BblockV','EblockV') car en effet sur         */ \
                                        /* certains systemes, il est vide ; or ici, dans la mesure ou l'on redefinit des variables   */ \
                                        /* locales, il est absoluement necessaire que ce couple soit equivalent au couple            */ \
                                        /* ('Bblock','Eblock')...                                                                    */ \
                    Eblock                                                                                                              \
                                        /* Fin de la sequence de rotation d'alignement dans l'espace physique.                       */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R O T A T I O N   D ' A L I G N E M E N T   D E   L ' A X E   ' O X 2 '   D E   L ' E S P A C E   P H Y S I Q U E          */
/*        S U R   U N E   D I R E C T I O N   D O N N E E ,   E N   C O N S E R V A N T   L E   P L A N   ( OX , OY )                */
/*        E T   L ' A X E   ' OZ '   E T   P A S S A N T   D E   L ' E S P A C E   P H Y S I Q U E                                   */
/*        ( O X 1 , O Y 1 , O Z 1 )   A   L ' E S P A C E   ( O X 2 , O Y 2 , O Z 2 )   E T   I N V E R S E M E N T  :               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   DEBUT_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ(direction,sens_de_OZ)                                    \
                                        /* ATTENTION : on n'utilise pas ici le couple ('BblockV','EblockV') car en effet sur         */ \
                                        /* certains systemes, il est vide ; or ici, dans la mesure ou l'on redefinit des variables   */ \
                                        /* locales, il est absoluement necessaire que ce couple soit equivalent au couple            */ \
                                        /* ('Bblock','Eblock')...                                                                    */ \
                    Bblock                                                                                                              \
                    DEFV(deltaF_3D,direction_perturbee);                                                                                \
                                        /* Definition d'une version perturbee aleatoirement de la 'direction' argument...            */ \
                    DEFV(Float,INIT(module_du_vecteur_direction,FLOT__UNDEF));                                                          \
                                        /* Definition du module du vecteur direction ; on notera que ce module peut etre nul dans    */ \
                                        /* le cas exceptionnel du vecteur vitesse d'une particule immobile (cas des quarks REELs     */ \
                                        /* par exemple de temps en temps)...                                                         */ \
                    DEFV(deltaF_3D,vecteur_unitaire_de_OX2);                                                                            \
                                        /* Definition des cosinus directeurs (l1,m1,n1) de l'axe 'OX2'.                              */ \
                    DEFV(deltaF_3D,vecteur_unitaire_de_OY2);                                                                            \
                                        /* Definition des cosinus directeurs (l2,m2,n2) de l'axe 'OY2'.                              */ \
                    DEFV(deltaF_3D,vecteur_unitaire_de_OZ2);                                                                            \
                                        /* Definition des cosinus directeurs (l3,m3,n3) de l'axe 'OZ2'.                              */ \
                                                                                                                                        \
                    TRANSFERT_ACCROISSEMENT_3D(direction_perturbee,direction);                                                          \
                                        /* Transfert de la direction argument afin de pouvoir eventuellement la perturber...         */ \
                    FLUCTUATION_ALEATOIRE_D_UNE_DIRECTION(direction_perturbee                                                           \
                                                         ,PERTURBER_LA_DIRECTION_THETA                                                  \
                                                         ,NE_PAS_PERTURBER_LA_DIRECTION_PHI                                             \
                                                          );                                                                            \
                                        /* Perturbation aleatoire de la 'direction' argument, mais uniquement suivant 'theta'...     */ \
                                                                                                                                        \
                    Test(IZNE(ASD1(direction_perturbee,dz)))                                                                            \
                         Bblock                                                                                                         \
                         PRINT_ERREUR("la conservation de la Direction de 'OZ' est impossible");                                        \
                         CAL1(Prer3(" direction initiale=(%g,%g,%g)"                                                                    \
                                   ,ASD1(direction,dx),ASD1(direction,dy),ASD1(direction,dz)                                            \
                                    )                                                                                                   \
                              );                                                                                                        \
                         CAL1(Prer3(" --> direction perturbee=(%g,%g,%g)\n"                                                             \
                                   ,ASD1(direction_perturbee,dx),ASD1(direction_perturbee,dy),ASD1(direction_perturbee,dz)              \
                                    )                                                                                                   \
                              );                                                                                                        \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                                                                                                                                        \
                    EGAL(module_du_vecteur_direction,longF3D(direction_perturbee));                                                     \
                                        /* Calcul du module du vecteur direction ; on notera que ce module peut etre nul dans        */ \
                                        /* le cas exceptionnel du vecteur vitesse d'une particule immobile (cas des quarks REELs     */ \
                                        /* par exemple de temps en temps)...                                                         */ \
                                                                                                                                        \
                    Test(IZNE(module_du_vecteur_direction))                                                                             \
                         Bblock                                                                                                         \
                                        /* Cas, par exemple, du vecteur vitesse d'une particule en mouvement :                       */ \
                         INITIALISATION_ACCROISSEMENT_3D(vecteur_unitaire_de_OX2                                                        \
                                                        ,DIVI(ASD1(direction_perturbee,dx),module_du_vecteur_direction)                 \
                                                        ,DIVI(ASD1(direction_perturbee,dy),module_du_vecteur_direction)                 \
                                                        ,DIVI(ASD1(direction_perturbee,dz),module_du_vecteur_direction)                 \
                                                         );                                                                             \
                                        /* Calcul des cosinus (l1,m1,n1) directeurs de l'axe 'OX2' que l'on aligne sur le vecteur    */ \
                                        /* direction...                                                                              */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                                        /* Cas, par exemple, du vecteur vitesse d'une particule immobile :                           */ \
                         PRINT_ERREUR("un vecteur direction est nul, une direction arbitraire dans (OX,OY) est fixee");                 \
                         INITIALISATION_ACCROISSEMENT_3D(vecteur_unitaire_de_OX2                                                        \
                                                        ,NEUT(FU)                                                                       \
                                                        ,NEUT(FZERO)                                                                    \
                                                        ,NEUT(FZERO)                                                                    \
                                                         );                                                                             \
                                        /* Calcul des cosinus (l1,m1,n1) directeurs de l'axe 'OX2' que l'on aligne sur l'axe         */ \
                                        /* 'OX1' ; la rotation sera donc la transformation unite ou une rotation de pi...            */ \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                                                                                                                                        \
                    INITIALISATION_ACCROISSEMENT_3D(vecteur_unitaire_de_OZ2                                                             \
                                                   ,NEUT(FZERO)                                                                         \
                                                   ,NEUT(FZERO)                                                                         \
                                                   ,MUL2(sens_de_OZ,FU)                                                                 \
                                                    );                                                                                  \
                                        /* Calcul des cosinus (l3,m3,n3) directeurs de l'axe 'OZ2' que l'on aligne avec l'axe        */ \
                                        /* 'OZ2', mais en changeant eventuellement de sens...                                        */ \
                                                                                                                                        \
                    INITIALISATION_ACCROISSEMENT_3D(vecteur_unitaire_de_OY2                                                             \
                                                                                                                                        \
                                                   ,PvectX(ASD1(vecteur_unitaire_de_OZ2,dx)                                             \
                                                          ,ASD1(vecteur_unitaire_de_OZ2,dy)                                             \
                                                          ,ASD1(vecteur_unitaire_de_OZ2,dz)                                             \
                                                                                                                                        \
                                                          ,ASD1(vecteur_unitaire_de_OX2,dx)                                             \
                                                          ,ASD1(vecteur_unitaire_de_OX2,dy)                                             \
                                                          ,ASD1(vecteur_unitaire_de_OX2,dz)                                             \
                                                           )                                                                            \
                                                                                                                                        \
                                                   ,PvectY(ASD1(vecteur_unitaire_de_OZ2,dx)                                             \
                                                          ,ASD1(vecteur_unitaire_de_OZ2,dy)                                             \
                                                          ,ASD1(vecteur_unitaire_de_OZ2,dz)                                             \
                                                                                                                                        \
                                                          ,ASD1(vecteur_unitaire_de_OX2,dx)                                             \
                                                          ,ASD1(vecteur_unitaire_de_OX2,dy)                                             \
                                                          ,ASD1(vecteur_unitaire_de_OX2,dz)                                             \
                                                           )                                                                            \
                                                                                                                                        \
                                                   ,PvectZ(ASD1(vecteur_unitaire_de_OZ2,dx)                                             \
                                                          ,ASD1(vecteur_unitaire_de_OZ2,dy)                                             \
                                                          ,ASD1(vecteur_unitaire_de_OZ2,dz)                                             \
                                                                                                                                        \
                                                          ,ASD1(vecteur_unitaire_de_OX2,dx)                                             \
                                                          ,ASD1(vecteur_unitaire_de_OX2,dy)                                             \
                                                          ,ASD1(vecteur_unitaire_de_OX2,dz)                                             \
                                                           )                                                                            \
                                                                                                                                        \
                                                    );                                                                                  \
                                        /* Calcul des cosinus directeurs (l3,m3,n3) de l'axe 'OY2' tel qu'il soit orthogonal aux     */ \
                                        /* deux axes 'OZ2' et 'OX2'. On a donc '/\' representant le produit vectoriel :              */ \
                                        /*                                                                                           */ \
                                        /*                  (l2,m2,n2) = (l3,m3,n3) /\ (l1,m1,n1).                                   */ \
                                        /*                                                                                           */ \
                                                                                                                                        \
                    INITIALISATION_MATRICE_3D(matrice_de_rotation                                                                       \
                                                                                                                                        \
                                             ,ASD1(vecteur_unitaire_de_OX2,dx)                                                          \
                                             ,ASD1(vecteur_unitaire_de_OY2,dx)                                                          \
                                             ,ASD1(vecteur_unitaire_de_OZ2,dx)                                                          \
                                                                                                                                        \
                                             ,ASD1(vecteur_unitaire_de_OX2,dy)                                                          \
                                             ,ASD1(vecteur_unitaire_de_OY2,dy)                                                          \
                                             ,ASD1(vecteur_unitaire_de_OZ2,dy)                                                          \
                                                                                                                                        \
                                             ,ASD1(vecteur_unitaire_de_OX2,dz)                                                          \
                                             ,ASD1(vecteur_unitaire_de_OY2,dz)                                                          \
                                             ,ASD1(vecteur_unitaire_de_OZ2,dz)                                                          \
                                                                                                                                        \
                                              );                                                                                        \
                                        /* Calcul de la matrice de rotation de l'espace physique permettant de passer de l'espace    */ \
                                        /* aligne (OX2,OY2,OZ2) a l'espace physique (OX1,OY1,OZ1).                                   */ \
                                                                                                                                        \
                                        /* Debut de la sequence de rotation d'alignement dans l'espace physique.                     */
#define   DEBUT_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ                                             \
                                        /* ATTENTION : on n'utilise pas ici le couple ('BblockV','EblockV') car en effet sur         */ \
                                        /* certains systemes, il est vide ; or ici, dans la mesure ou l'on redefinit des variables   */ \
                                        /* locales, il est absoluement necessaire que ce couple soit equivalent au couple            */ \
                                        /* ('Bblock','Eblock')...                                                                    */ \
                    Bblock                                                                                                              \
                    DEFV(Float,INIT(theta_polaire,FZERO));                                                                              \
                                        /* Direction polaire de la particule sur laquelle on s'aligne. Cet angle est donc nul,       */ \
                                        /* puisque l'on a fait coincider l'axe 'OX2' avec la direction...                            */ \
                                        /*                                                                                           */ \
                                        /* Debut de la sequence de choix d'une direction d'alignement dans l'espace physique.        */

#define   FIN_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ                                               \
                                        /* ATTENTION : on n'utilise pas ici le couple ('BblockV','EblockV') car en effet sur         */ \
                                        /* certains systemes, il est vide ; or ici, dans la mesure ou l'on redefinit des variables   */ \
                                        /* locales, il est absoluement necessaire que ce couple soit equivalent au couple            */ \
                                        /* ('Bblock','Eblock')...                                                                    */ \
                    Eblock                                                                                                              \
                                        /* Fin de la sequence de choix d'une direction d'alignement dans l'espace physique.          */
#define   FIN_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ                                                            \
                                        /* ATTENTION : on n'utilise pas ici le couple ('BblockV','EblockV') car en effet sur         */ \
                                        /* certains systemes, il est vide ; or ici, dans la mesure ou l'on redefinit des variables   */ \
                                        /* locales, il est absoluement necessaire que ce couple soit equivalent au couple            */ \
                                        /* ('Bblock','Eblock')...                                                                    */ \
                    Eblock                                                                                                              \
                                        /* Fin de la sequence de rotation d'alignement dans l'espace physique.                       */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R O T A T I O N   D ' A L I G N E M E N T   D E   L ' A X E   ' O X 2 '   D E   L ' E S P A C E   P H Y S I Q U E          */
/*        S U R   L E   V E C T E U R   V I T E S S E   D ' U N E   P A R T I C U L E ,   L E S   A X E S   ' O Y 2 '   E T          */
/*        ' O Z 2 '   E T A N T   P O S I T I O N N E S   A L E A T O I R E M E N T E   E T                                          */
/*        P A S S A N T   D E   L ' E S P A C E   P H Y S I Q U E   ( O X 1 , O Y 1 , O Z 1 )                                        */
/*        A   L ' E S P A C E   ( O X 2 , O Y 2 , O Z 2 )   E T   I N V E R S E M E N T  :                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   DEBUT_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_SUR_UNE_PARTICULE(particule)                                              \
                    BblockV                                                                                                             \
                    DEBUT_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_DANS_UNE_DIRECTION(ASI2(particule,espace_temps,vitesse)         \
                                                                                          ,PERTURBER_UNE_DIRECTION                      \
                                                                                           );                                           \
                                        /* Debut de la sequence de rotation d'alignement sur une particule dans l'espace physique.   */
#define   DEBUT_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_SUR_UNE_PARTICULE                                            \
                    BblockV                                                                                                             \
                    DEBUT_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_DANS_UNE_DIRECTION;                                \
                                        /* Direction polaire de la particule sur laquelle on s'aligne. Cet angle est donc nul,       */ \
                                        /* puisque l'on a fait coincider l'axe 'OX2' avec son vecteur vitesse...                     */ \
                                        /*                                                                                           */ \
                                        /* Debut de la sequence de choix d'une direction d'alignement sur une particule dans         */ \
                                        /* l'espace physique.                                                                        */

#define   FIN_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_SUR_UNE_PARTICULE                                              \
                    FIN_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_DANS_UNE_DIRECTION;                                  \
                    EblockV                                                                                                             \
                                        /* Fin de la sequence de choix d'une direction d'alignement sur une particule dans           */ \
                                        /* l'espace physique.                                                                        */
#define   FIN_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_SUR_UNE_PARTICULE                                                           \
                    FIN_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_DANS_UNE_DIRECTION;                                               \
                    EblockV                                                                                                             \
                                        /* Fin de la sequence de rotation d'alignement sur une particule dans l'espace physique.     */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R O T A T I O N   D ' A L I G N E M E N T   D E   L ' A X E   ' O X 2 '   D E   L ' E S P A C E   P H Y S I Q U E          */
/*        V E R S   U N E   P A R T I C U L E   D O N N E E   ( P A R   E X E M P L E   L E   Q U A R K   R E E L                    */
/*        D O M I N A N T ) ,   L E S   A X E S   ' O Y 2 '   E T   ' O Z 2 '   E T A N T   P O S I T I O N N E S                    */
/*        A L E A T O I R E M E N T   E T   P A S S A N T   D E   L ' E S P A C E   P H Y S I Q U E                                  */
/*        ( O X 1 , O Y 1 , O Z 1 )   A   L ' E S P A C E   ( O X 2 , O Y 2 , O Z 2 )   E T   I N V E R S E M E N T  :               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   DEBUT_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_VERS_UNE_PARTICULE(position,particule)                                    \
                                        /* ATTENTION : on n'utilise pas ici le couple ('BblockV','EblockV') car en effet sur         */ \
                                        /* certains systemes, il est vide ; or ici, dans la mesure ou l'on redefinit des variables   */ \
                                        /* locales, il est absoluement necessaire que ce couple soit equivalent au couple            */ \
                                        /* ('Bblock','Eblock')...                                                                    */ \
                    Bblock                                                                                                              \
                    DEFV(deltaF_3D,direction_vers_la_particule);                                                                        \
                                        /* Definition de la direction allant de la position (courante) a la particule...             */ \
                                                                                                                                        \
                    Test(IFNE(particule,PARTICULE_NON_DEFINIE))                                                                         \
                         Bblock                                                                                                         \
                         INITIALISATION_ACCROISSEMENT_3D(direction_vers_la_particule                                                    \
                                                        ,SOUS(COORDONNEES(particule,x)                                                  \
                                                             ,ASD1(position,x)                                                          \
                                                              )                                                                         \
                                                        ,SOUS(COORDONNEES(particule,y)                                                  \
                                                             ,ASD1(position,y)                                                          \
                                                              )                                                                         \
                                                        ,SOUS(COORDONNEES(particule,z)                                                  \
                                                             ,ASD1(position,z)                                                          \
                                                              )                                                                         \
                                                         );                                                                             \
                                        /* Determination de la direction allant de la position (courante) a la particule...          */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         GENERATION_D_UNE_VALEUR(ASD1(direction_vers_la_particule,dx),NEGA(FU),NEUT(FU));                               \
                         GENERATION_D_UNE_VALEUR(ASD1(direction_vers_la_particule,dy),NEGA(FU),NEUT(FU));                               \
                         GENERATION_D_UNE_VALEUR(ASD1(direction_vers_la_particule,dz),NEGA(FU),NEUT(FU));                               \
                                        /* Determination d'une direction aleatoire dans le cas d'une particule indefinie.            */ \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                                                                                                                                        \
                    DEBUT_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_DANS_UNE_DIRECTION(direction_vers_la_particule                  \
                                                                                          ,PERTURBER_UNE_DIRECTION                      \
                                                                                           );                                           \
                                        /* Debut de la sequence de rotation d'alignement vers une particule dans l'espace physique.  */
#define   DEBUT_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_VERS_UNE_PARTICULE                                           \
                    BblockV                                                                                                             \
                    DEBUT_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_DANS_UNE_DIRECTION;                                \
                                        /* Direction polaire de la particule sur laquelle on s'aligne. Cet angle est donc nul,       */ \
                                        /* puisque l'on a fait coincider l'axe 'OX2' avec son vecteur vitesse...                     */ \
                                        /*                                                                                           */ \
                                        /* Debut de la sequence de choix d'une direction d'alignement vers une particule dans        */ \
                                        /* l'espace physique.                                                                        */

#define   FIN_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_VERS_UNE_PARTICULE                                             \
                    FIN_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_DANS_UNE_DIRECTION;                                  \
                    EblockV                                                                                                             \
                                        /* Fin de la sequence de choix d'une direction d'alignement vers une particule dans          */ \
                                        /* l'espace physique.                                                                        */
#define   FIN_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_VERS_UNE_PARTICULE                                                          \
                                        /* ATTENTION : on n'utilise pas ici le couple ('BblockV','EblockV') car en effet sur         */ \
                                        /* certains systemes, il est vide ; or ici, dans la mesure ou l'on redefinit des variables   */ \
                                        /* locales, il est absoluement necessaire que ce couple soit equivalent au couple            */ \
                                        /* ('Bblock','Eblock')...                                                                    */ \
                    FIN_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_DANS_UNE_DIRECTION;                                               \
                    Eblock                                                                                                              \
                                        /* Fin de la sequence de rotation d'alignement vers une particule dans l'espace physique.    */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R O T A T I O N   D ' A L I G N E M E N T   D E   L ' A X E   ' O X 2 '   D E   L ' E S P A C E   P H Y S I Q U E          */
/*        V E R S   L E   Q U A R K   R E E L   D O M I N A N T ,   L E S   A X E S   ' O Y 2 '   E T   ' O Z 2 '   E T A N T        */
/*        P O S I T I O N N E S   A L E A T O I R E M E N T   E T   P A S S A N T   D E   L ' E S P A C E   P H Y S I Q U E          */
/*        ( O X 1 , O Y 1 , O Z 1 )   A   L ' E S P A C E   ( O X 2 , O Y 2 , O Z 2 )   E T   I N V E R S E M E N T  :               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   DEBUT_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_VERS_LE_QUARK_REEL_DOMINANT(position)                                     \
                    BblockV                                                                                                             \
                    DEBUT_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_VERS_UNE_PARTICULE(position,particule_REELLE_dominante);        \
                                        /* Debut de la sequence de rotation d'alignement vers le quark REEL dominant dans l'espace   */ \
                                        /* physique.                                                                                 */
#define   DEBUT_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_VERS_LE_QUARK_REEL_DOMINANT                                  \
                    BblockV                                                                                                             \
                    DEBUT_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_VERS_UNE_PARTICULE;                                \
                                        /* Debut de la sequence de choix d'une direction d'alignement vers le quark REEL dominant    */ \
                                        /* dans l'espace physique.                                                                   */

#define   FIN_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_VERS_LE_QUARK_REEL_DOMINANT                                    \
                    FIN_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_VERS_UNE_PARTICULE;                                  \
                    EblockV                                                                                                             \
                                        /* Fin de la sequence de choix d'une direction d'alignement vers le quark REEL dominant      */ \
                                        /* dans l'espace physique.                                                                   */
#define   FIN_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_VERS_LE_QUARK_REEL_DOMINANT                                                 \
                    FIN_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_VERS_UNE_PARTICULE;                                               \
                    EblockV                                                                                                             \
                                        /* Fin de la sequence de rotation d'alignement vers le quark REEL dominant dans l'espace     */ \
                                        /* physique.                                                                                 */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R O T A T I O N   D ' A L I G N E M E N T   D E   L ' A X E   ' O X 2 '   D E   L ' E S P A C E   P H Y S I Q U E          */
/*        E N   F O N C T I O N   D ' U N   M O M E N T   A N G U L A I R E   ( P A R   E X E M P L E   C E L U I   D U              */
/*        Q U A R K   R E E L   D O M I N A N T ) ,   L E S   A X E S   ' O Y 2 '   E T   ' O Z 2 '   E T A N T                      */
/*        P O S I T I O N N E S    A L E A T O I R E M E N T   E T   P A S S A N T   D E   L ' E S P A C E   P H Y S I Q U E         */
/*        ( O X 1 , O Y 1 , O Z 1 )   A   L ' E S P A C E   ( O X 2 , O Y 2 , O Z 2 )   E T   I N V E R S E M E N T  :               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   DEBUT_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_SUR_UN_MOMENT_ANGULAIRE(position,particule)                               \
                                        /* ATTENTION : on n'utilise pas ici le couple ('BblockV','EblockV') car en effet sur         */ \
                                        /* certains systemes, il est vide ; or ici, dans la mesure ou l'on redefinit des variables   */ \
                                        /* locales, il est absoluement necessaire que ce couple soit equivalent au couple            */ \
                                        /* ('Bblock','Eblock')...                                                                    */ \
                    Bblock                                                                                                              \
                    DEFV(deltaF_3D,direction_orthogonale_au_moment_angulaire);                                                          \
                                        /* Definition de la direction orthogonale au plan forme par le moment angulaire et le        */ \
                                        /* vecteur joignant la position a la particule...                                            */ \
                                                                                                                                        \
                    Test(IFNE(particule,PARTICULE_NON_DEFINIE))                                                                         \
                         Bblock                                                                                                         \
                         INITIALISATION_ACCROISSEMENT_3D(direction_orthogonale_au_moment_angulaire                                      \
                                                                                                                                        \
                                                        ,PvectX(ASI3(particule,espace_temps,moment_angulaire,dx)                        \
                                                               ,ASI3(particule,espace_temps,moment_angulaire,dy)                        \
                                                               ,ASI3(particule,espace_temps,moment_angulaire,dz)                        \
                                                                                                                                        \
                                                               ,SOUS(ASD1(position,x),COORDONNEES(particule,x))                         \
                                                               ,SOUS(ASD1(position,y),COORDONNEES(particule,y))                         \
                                                               ,SOUS(ASD1(position,z),COORDONNEES(particule,z))                         \
                                                                )                                                                       \
                                                                                                                                        \
                                                        ,PvectY(ASI3(particule,espace_temps,moment_angulaire,dx)                        \
                                                               ,ASI3(particule,espace_temps,moment_angulaire,dy)                        \
                                                               ,ASI3(particule,espace_temps,moment_angulaire,dz)                        \
                                                                                                                                        \
                                                               ,SOUS(ASD1(position,x),COORDONNEES(particule,x))                         \
                                                               ,SOUS(ASD1(position,y),COORDONNEES(particule,y))                         \
                                                               ,SOUS(ASD1(position,z),COORDONNEES(particule,z))                         \
                                                                )                                                                       \
                                                                                                                                        \
                                                        ,PvectZ(ASI3(particule,espace_temps,moment_angulaire,dx)                        \
                                                               ,ASI3(particule,espace_temps,moment_angulaire,dy)                        \
                                                               ,ASI3(particule,espace_temps,moment_angulaire,dz)                        \
                                                                                                                                        \
                                                               ,SOUS(ASD1(position,x),COORDONNEES(particule,x))                         \
                                                               ,SOUS(ASD1(position,y),COORDONNEES(particule,y))                         \
                                                               ,SOUS(ASD1(position,z),COORDONNEES(particule,z))                         \
                                                                )                                                                       \
                                                                                                                                        \
                                                         );                                                                             \
                                        /* Determination de la direction orthogonale au plan forme par le moment angulaire et le     */ \
                                        /* vecteur joignant la position a la particule...                                            */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         GENERATION_D_UNE_VALEUR(ASD1(direction_orthogonale_au_moment_angulaire,dx),NEGA(FU),NEUT(FU));                 \
                         GENERATION_D_UNE_VALEUR(ASD1(direction_orthogonale_au_moment_angulaire,dy),NEGA(FU),NEUT(FU));                 \
                         GENERATION_D_UNE_VALEUR(ASD1(direction_orthogonale_au_moment_angulaire,dz),NEGA(FU),NEUT(FU));                 \
                                        /* Determination d'une direction aleatoire dans le cas d'une particule indefinie.            */ \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                                                                                                                                        \
                    DEBUT_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_DANS_UNE_DIRECTION(direction_orthogonale_au_moment_angulaire    \
                                                                                          ,PERTURBER_UNE_DIRECTION                      \
                                                                                           );                                           \
                                        /* Debut de la sequence de rotation d'alignement orthogonalement a un moment angulaire.      */
#define   DEBUT_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_SUR_UN_MOMENT_ANGULAIRE                                      \
                    BblockV                                                                                                             \
                    DEBUT_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_DANS_UNE_DIRECTION;                                \
                                        /* Direction polaire de la particule sur laquelle on s'aligne. Cet angle est donc nul,       */ \
                                        /* puisque l'on a fait coincider l'axe 'OX2' avec son vecteur vitesse...                     */ \
                                        /*                                                                                           */ \
                                        /* Debut de la sequence de choix d'une direction d'alignement orthogonalement au moment      */ \
                                        /* angulaire de l'espace physique.                                                           */

#define   FIN_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_SUR_UN_MOMENT_ANGULAIRE                                        \
                    FIN_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_DANS_UNE_DIRECTION;                                  \
                    EblockV                                                                                                             \
                                        /* Fin de la sequence de choix d'une direction d'alignement orthogonalement au moment        */ \
                                        /* angulaire de l'espace physique.                                                           */
#define   FIN_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_SUR_UN_MOMENT_ANGULAIRE                                                     \
                                        /* ATTENTION : on n'utilise pas ici le couple ('BblockV','EblockV') car en effet sur         */ \
                                        /* certains systemes, il est vide ; or ici, dans la mesure ou l'on redefinit des variables   */ \
                                        /* locales, il est absoluement necessaire que ce couple soit equivalent au couple            */ \
                                        /* ('Bblock','Eblock')...                                                                    */ \
                    FIN_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_DANS_UNE_DIRECTION;                                               \
                    Eblock                                                                                                              \
                                        /* Fin de la sequence de rotation d'alignement orthogonalement au moment angulaire de        */ \
                                        /* l'espace physique.                                                                        */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R O T A T I O N   D ' A L I G N E M E N T   D E   L ' A X E   ' O X 2 '   D E   L ' E S P A C E   P H Y S I Q U E          */
/*        P A R   R A P P O R T   A U   M O M E N T   A N G U L A I R E   D U   Q U A R K   R E E L   D O M I N A N T ,              */
/*        L E S   A X E S   ' O Y 2 '   E T   ' O Z 2 '   E T A N T   P O S I T I O N N E S   A L E A T O I R E M E N T   E T        */
/*        P A S S A N T   D E   L ' E S P A C E   P H Y S I Q U E   ( O X 1 , O Y 1 , O Z 1 )   A   L ' E S P A C E                  */
/*        ( O X 2 , O Y 2 , O Z 2 )   E T   I N V E R S E M E N T  :                                                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   DEBUT_DE_ROTATION_D_ALIGNEMENT_SUR_LE_MOMENT_ANGULAIRE_DU_QUARK_REEL_DOMINANT(position)                                       \
                    BblockV                                                                                                             \
                    DEBUT_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_SUR_UN_MOMENT_ANGULAIRE(position,particule_REELLE_dominante);   \
                                        /* Debut de la sequence de rotation d'alignement par rapport au moment angulaire             */ \
                                        /* du quark REEL dominant dans l'espace physique.                                            */
#define   DEBUT_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_SUR_LE_MOMENT_ANGULAIRE_DU_QUARK_REEL_DOMINANT                                    \
                    BblockV                                                                                                             \
                    DEBUT_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_SUR_UN_MOMENT_ANGULAIRE;                           \
                                        /* Debut de la sequence de choix d'une direction d'alignement par rapport au moment          */ \
                                        /* angulaire du quark REEL dominant dans l'espace physique.                                  */

#define   FIN_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_SUR_LE_MOMENT_ANGULAIRE_DU_QUARK_REEL_DOMINANT                                      \
                    FIN_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_SUR_UN_MOMENT_ANGULAIRE;                             \
                    EblockV                                                                                                             \
                                        /* Fin de la sequence de choix d'une direction d'alignement par rapport au moment angulaire  */ \
                                        /* du quark REEL dominant dans l'espace physique.                                            */
#define   FIN_DE_ROTATION_D_ALIGNEMENT_SUR_LE_MOMENT_ANGULAIRE_DU_QUARK_REEL_DOMINANT                                                   \
                    FIN_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_SUR_UN_MOMENT_ANGULAIRE;                                          \
                    EblockV                                                                                                             \
                                        /* Fin de la sequence de rotation d'alignement par rapport au moment angulaire               */ \
                                        /* du quark REEL dominant dans l'espace physique.                                            */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P A S S A G E   D ' U N E   V I T E S S E   P O L A I R E   D E F I N I E   D A N S   U N                                  */
/*        P L A N   P R I V I L E G I E   A   U N E   V I T E S S E   C A R T E S I E N N E                                          */
/*        D A N S   L ' E S P A C E   P H Y S I Q U E   A   T R O I S   D I M E N S I O N S  :                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   PAS_DE_DEPHASAGE                                                                                                              \
                    FZERO                                                                                                               \
                                        /* Valeur d'un dephasage nul...                                                              */
#define   OPPOSITION_DE_PHASE(angle)                                                                                                    \
                    ADD2(angle,MOIT(CERCLE_TRIGONOMETRIQUE))                                                                            \
                                        /* Pour passer d'un angle a cet angle dephase de PI.                                         */

#define   VITESSE_CARTESIENNE_POLAIRE(vitesse_de_la_particule,Rho_de_la_vitesse,Theta_polaire,dephasage_polaire)                        \
                                        /* Voir 'DEBUT_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_DANS_UNE_DIRECTION(...)' pour   */ \
                                        /* avoir une definition precise des plans utilises et des angles de rotation...              */ \
                    Bblock                                                                                                              \
                    DEFV(deltaF_2D,vitesse_polaire_2D);                                                                                 \
                    DEFV(deltaF_3D,vitesse_polaire_3D);                                                                                 \
                                        /* Vitesse de la particule dans le plan (OX2,OY2) apres rotation de l'espace physique        */ \
                                        /* avec une version tridimensionnelle pour pouvoir utiliser la procedure de produit          */ \
                                        /* matriciel 'PRODUIT_MATRICE_ACCROISSEMENT_3D(...)'.                                        */ \
                    Test(IFGT(Rho_de_la_vitesse,VITESSE_DE_LA_LUMIERE))                                                                 \
                         Bblock                                                                                                         \
                         PRINT_ERREUR("une vitesse supra-lumineuse est rencontree");                                                    \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                                                                                                                                        \
                    INITIALISATION_ACCROISSEMENT_2D(vitesse_polaire_2D                                                                  \
                                                   ,Xcartesienne_2D(Rho_de_la_vitesse,ADD2(Theta_polaire,dephasage_polaire))            \
                                                   ,Ycartesienne_2D(Rho_de_la_vitesse,ADD2(Theta_polaire,dephasage_polaire))            \
                                                    );                                                                                  \
                    INITIALISATION_ACCROISSEMENT_3D(vitesse_polaire_3D                                                                  \
                                                   ,ASD1(vitesse_polaire_2D,dx)                                                         \
                                                   ,ASD1(vitesse_polaire_2D,dy)                                                         \
                                                   ,FZERO                                                                               \
                                                    );                                                                                  \
                                        /* Calcul des composantes cartesiennes de la vitesse de la particule dans le plan (OX2,OY2), */ \
                                        /* avec prise en compte d'un dephasage 'dephasage_polaire' de 'Theta_polaire' dans ce plan,  */ \
                                        /* et ce afin de generer eventuellement plusieurs particules coplanaires (voir par exemple   */ \
                                        /* a ce propos 'STRONG_CREATION_V___GxGxG' ou 'STRONG_CREATION_V___GxGxGxG').                */ \
                                                                                                                                        \
                    PRODUIT_MATRICE_ACCROISSEMENT_3D(vitesse_de_la_particule                                                            \
                                                    ,matrice_de_rotation                                                                \
                                                    ,vitesse_polaire_3D                                                                 \
                                                     );                                                                                 \
                                        /* Calcul des composantes cartesiennes de la vitesse de la particule dans l'espace           */ \
                                        /* physique (OX1,OY1,OZ1) par rotation des axes a l'aide de la matrice                       */ \
                                        /* 'matrice_de_rotation'. On notera avec interet que les elements '(cx,cz)', '(cy,cz)'       */ \
                                        /* et '(cz,cz)' n'interviennent pas (puisque multiplies par 0) mais sont quand meme          */ \
                                        /* calcules par raison de symetrie...                                                        */ \
                    Eblock                                                                                                              \
                                        /* Conversion d'une vitesse exprimee en coordonnees polaires {rho,theta} dans le plan        */ \
                                        /* (OX2,OY2) en une vitesse exprimee en coordonnees cartesiennes {dx,dy,dz} dans l'espace    */ \
                                        /* physique (OX1,OY1,OZ1).                                                                   */

#define   VITESSE_CARTESIENNE_SPHERIQUE(vitesse_de_la_particule,Rho_de_la_vitesse,Theta_spherique,Phi_spherique)                        \
                                        /* Voir 'DEBUT_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_DANS_UNE_DIRECTION(...)' pour   */ \
                                        /* avoir une definition precise des plans utilises et des angles de rotation...              */ \
                    Bblock                                                                                                              \
                    Test(IFGT(Rho_de_la_vitesse,VITESSE_DE_LA_LUMIERE))                                                                 \
                         Bblock                                                                                                         \
                         PRINT_ERREUR("une vitesse supra-lumineuse est rencontree");                                                    \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    INITIALISATION_ACCROISSEMENT_3D(vitesse_de_la_particule                                                             \
                                                   ,Xcartesienne_3D(Rho_de_la_vitesse,Theta_spherique,Phi_spherique)                    \
                                                   ,Ycartesienne_3D(Rho_de_la_vitesse,Theta_spherique,Phi_spherique)                    \
                                                   ,Zcartesienne_3D(Rho_de_la_vitesse,Theta_spherique,Phi_spherique)                    \
                                                    );                                                                                  \
                    Eblock                                                                                                              \
                                        /* Conversion d'une vitesse exprimee en coordonnees spheriques {rho,theta,phi} en une        */ \
                                        /* vitesse exprimee en coordonnees cartesiennes {dx,dy,dz}.                                  */



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