/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D E S   F O N C T I O N S   P R O P R E S   D E   L ' A T O M E   D ' H Y D R O G E N E              */
/*        E T   V I S U A L I S A T I O N   S O U S   F O R M E   D E   S E R I E S   D E   C O U P E S                              */
/*        E F F E C T U E E S   D A N S   D E S   P L A N S   P A R A L L E L E S   A U   P L A N   ( OX , OY )  :                   */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                        .        .                                                                 .                               */
/*                                                                                                                                   */
/*                     .        .                                                                 .                                  */
/*                                                                                                                                   */
/*                  Z3        -----------------------------------------------------------------                                      */
/*                           |                                                                 |                                     */
/*               Z2        ----------------------------------------------------------------    |                                     */
/*                        |                                                                |   |                                     */
/*            Z1        ---------------------------------------------------------------    |   |                                     */
/*                     |                                                               |   |   |                                     */
/*         Z0        --------------------------------------------------------------    |   |   |                                     */
/*                  |                  ...........................                 |   |   |   |                                     */
/*                  |                 .............................                |   |   |   |                                     */
/*                  |                 .............................                |   |   |   |                                     */
/*                  |        ....      ...........................      ....       |   |   |   |                                     */
/*                  |    ............   .........................   ............   |   |   |   |                                     */
/*                  |  ...............   .......................  ................ |   |   |   |                                     */
/*                  |...................       ...........       ..................|   |   |   |                                     */
/*                  |...................     ...............     ..................|   |   |   |                                     */
/*                  |........::::::....  .   ...............   .  ....::::::.......|   |   |   |                                     */
/*                  |......::-----:... .....    .........    ..... ...:-----::.....|   |   |   |                                     */
/*                  |.....:-++oo+-:.........    .........    .........:-+oo+--:....|   |   |   |                                     */
/*                  |....:-+o**o+-.....:.. ....  ......   .......:.....-+**oo+-:...|   |   |   |                                     */
/*                  |...::-o*##*+:. .:-:. .... ..   .   .. ......:-.. .:+*#**o-:...|   |   |   |                                     */
/*                  |...:-+o*##*+:...--:...:.... ..   ..... .:...:-:...:+*##*o+-:..|   |   |   |                                     */
/*                  |...:-+*###*+....--:..::..:..... . ......::..:--...:+*###o+-:..|   |   |   |                                     */
/*                  |...:-+o###*+:...--:...:.... .. . .. .. .:...:--...:+*##*o+-:..|   |   |   |                                     */
/*                  |...::+o*##*+:. .:-:. .......  ...  .. ......:-.. .:+*##*o-:...|   |   |   |                                     */
/*                  |....:-+o**o+-.....:.. ....  ......   .... ..:.....-+***o+-:...|   |   |   |                                     */
/*                  |.....:-++oo+-..........    .........    .........:-+oo++-:....|   |   |   |                                     */
/*                  |......::--+--:... .....    .........    ..... ...:--+--::.....|   |   |   |                                     */
/*                  |........::::::....  ..  ...............  ..  ....::::::.......|   |   |   |     .                               */
/*                  |...................     ...............     ..................|   |   |   |                                     */
/*                  |...................       ...........       ..................|   |   |   |  .                                  */
/*                  |  ................  .......................  ................ |   |   |   |                                     */
/*                  |    ............   .........................   ............   |   |   |---                                      */
/*                  |        .....     ...........................     .....       |   |   |                                         */
/*                  |                 .............................                |   |---                                          */
/*                  |                 .............................                |   |                                             */
/*                  |                  ...........................                 |---                                              */
/*                  |                    .......................                   |                                                 */
/*                   --------------------------------------------------------------                                                  */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                                              (n=8,l=2)                                                                            */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xrq/hydrogene.41$K' :                                                                                          */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 1993??????????).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I N T E R F A C E   ' listG '  :                                                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        :Debut_listG:                                                                                                              */
/*        :Fin_listG:                                                                                                                */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D I R E C T I V E S   S P E C I F I Q U E S   D E   C O M P I L A T I O N  :                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
@define   PRAGMA_CPP_____MODULE_NON_DERIVABLE

@define   PRAGMA_CL_____MODULE_NON_OPTIMISABLE

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F I C H I E R S   D ' I N C L U D E S  :                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  INCLUDES_BASE

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D E S   F O N C T I O N S   U T I L E S   ( C O M P A T I B I L I T E )  :                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xrk/attractor.11.I"
#include  xrv/particule.41.I"

#include  xrs/sphere.18.I"
#include  xrs/sphere.19.I"
                                        /* Inutile, mais pour la compatibilite (introduit le 20030130110509 a cause de               */
                                        /* 'v $xcc/cpp$Z INCLUDES_1.sed').                                                           */

#include  xrk/attractor.12.I"

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D E   L ' A T O M E   D ' H Y D R O G E N E  :                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xrs/sphere.12.I"
#include  xrq/Hspherik.14.I"
                                        /* Introduit le 20060611085003 suite a 'v $xrs/surfaces.12$I 20060602134331'.                */
#include  xrs/sphere.14.I"
#include  xrq/Laguerre.31.I"
#include  xrq/Legendre.31.I"
#include  xrq/Hspherik.21.I"
#include  xrq/hydrogene.21.I"
#include  xrq/Hspherik.12.I"
#include  xrq/hydrogene.23.I"
#include  xrq/hydrogene.24.I"
#include  xrq/hydrogene.25.I"

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D E S   C O O R D O N N E E S  :                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   caXf                                                                                                                          \
                    MUL2(ASD1(echelle_courante,cx)                                                                                      \
                        ,CARRE_OX_PAR_RAPPORT_A_OY(_____cNORMALISE_OX(SOUS(X,_lDENORMALISE_OX(ASD1(translation,dx)))))                  \
                         )
#define   caYf                                                                                                                          \
                    MUL2(ASD1(echelle_courante,cy)                                                                                      \
                        ,CARRE_OY_PAR_RAPPORT_A_OY(_____cNORMALISE_OY(SOUS(Y,_lDENORMALISE_OY(ASD1(translation,dy)))))                  \
                         )
#define   caZf                                                                                                                          \
                    MUL2(ASD1(echelle_courante,cz)                                                                                      \
                        ,SOUS(profondeur,ASD1(translation,dz))                                                                          \
                         )
                                        /* Definition des coordonnees cartesiennes. On notera que l'on utilise (cXf,cYf,cZf) afin    */
                                        /* de ne pas rentrer en conflit avec la procedure 'coordonnees_flottantes_X_et_Y_et_Z' qui   */
                                        /* definit {Xf,Yf,Zf} et qui est appelee dans '$xrv/champs_5.12$I' via '$xrs/surfaces.11$I'  */
                                        /* et '$xrk/attractor.17$I', et tout cela pour des raisons de compatibilite...               */

#define   PERMUTATION_XY                                                                                                                \
                    FAUX
DEFV(Local,DEFV(Logical,INIT(permutation_XY,PERMUTATION_XY)));
                                        /* Faut-il permuter 'X' et 'Y' ?                                                             */
#define   PERMUTATION_YZ                                                                                                                \
                    FAUX
DEFV(Local,DEFV(Logical,INIT(permutation_YZ,PERMUTATION_YZ)));
                                        /* Faut-il permuter 'Y' et 'Z' ?                                                             */
#define   PERMUTATION_ZX                                                                                                                \
                    FAUX
DEFV(Local,DEFV(Logical,INIT(permutation_ZX,PERMUTATION_ZX)));
                                        /* Faut-il permuter 'Z' et 'X' ?                                                             */

DEFV(Local,DEFV(Float,INIT(cXf,FLOT__UNDEF)));
DEFV(Local,DEFV(Float,INIT(cYf,FLOT__UNDEF)));
DEFV(Local,DEFV(Float,INIT(cZf,FLOT__UNDEF)));
                                        /* Definition des coordonnees cartesiennes apres permutation eventuelle des axes...          */

#define   PROFONDEUR                                                                                                                    \
                    FZERO
DEFV(Local,DEFV(Float,INIT(profondeur,PROFONDEUR)));
                                        /* Definition de la profondeur de la coupe a effectuer...                                    */

#include  xrs/surfaces.11.I"

dfTRANSFORMAT_31(liste_PARAMETRE_Z,fichier_PARAMETRE_Z,PARAMETRE_Z_IMPLICITE,PROFONDEUR)
                                        /* Definition du fichier du parametre 'z'.                                                   */
#define   sPARAMETRE_Z(numero_de_la_periode)                                                                                            \
                    FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_PARAMETRE_Z))
                                        /* Formule generale definissant les variations de 'z' au cours du temps.                     */

                                        /* ATTENTION, il y a eu pendant longtemps :                                                  */
                                        /*                                                                                           */
                                        /*                  #define   cRHO                                                        \  */
                                        /*                                      Rho_3D(cXf,cYf,cZf)                                  */
                                        /*                  #define   cPHI                                                        \  */
                                        /*                                      Theta_3D(cXf,cYf,cZf)                                */
                                        /*                  #define   cTHETA                                                      \  */
                                        /*                                      Phi_3D(cXf,cYf,cZf)                                  */
                                        /*                                                                                           */
                                        /* mais en fait cela etait faux car nous ne sommes pas en coordonnees spheriques relatives   */
                                        /* aux axes (OX,OY,OZ), mais par rapport aux axes (OY,OZ,OX). Il faut donc permuter les      */
                                        /* trois axes ainsi que les fonction 'Theta_3D(...)' et 'Phi_3D(...)'...                     */

#define   cRHO                                                                                                                          \
                    Rho_3D(cYf,cZf,cXf)                                                                                                 \
                                        /* Definition du rayon polaire.                                                              */
#define   cPHI                                                                                                                          \
                    Phi_3D(cYf,cZf,cXf)                                                                                                 \
                                        /* Definition de la coordonnee 'phi'.                                                        */
#define   cTHETA                                                                                                                        \
                    Theta_3D(cYf,cZf,cXf)                                                                                               \
                                        /* Definition de la coordonnee 'theta'.                                                      */

                                        /*                                                               ,,   ,,   ,,                */
                                        /* Definition des coordonnees spheriques par rapport aux axes (OX  ,OY  ,OZ  ), alors que    */
                                        /* les axes du modele sont (OX,OY,OZ). On notera que l'angle 'phi' mesure une rotation par   */
                                        /* rapport a l'axe 'OX'.                                                                     */
                                        /*                                                                                           */
                                        /*                                             ,,                                            */
                                        /*                                    Y * ==> X                                              */
                                        /*                                      *                                                    */
                                        /*                   ,                  *                                                    */
                                        /*                  Y +                 C - - - - - - - - B                                  */
                                        /*                     +              . *               .                                    */
                                        /*                      +           .   * \           .   |                                  */
                                        /*                       +        .     *           .                                        */
                                        /*                        +     .       *   \     .       |                                  */
                                        /*                         +  .         *       .                                            */
                                        /*                          E - - - - - - - - P(X,Y,Z)    |                                  */
                                        /*                           +          *                                                    */
                                        /*                          | +         *    +|           |                                  */
                                        /*                             +        *                                                    */
                                        /*                          |   +--phi--*   + |           |                                  */
                                        /*                               +      *   |                                                */
                                        /*                          |     +     *  +t |           |                                  */
                                        /*                                 +    *   e                                                */
                                        /*                          |       +   * + t |           |                                  */
                                        /*                                   +  *   a                                                */
                                        /*                          |         + *+  | |           |                                  */
                                        /*                                     +*   |                                     ,     ,,   */
                                        /*                          |           O* * *|* * * * * *A* * * * * * * * * * X=X ==> Z     */
                                        /*                                    *                 .                                    */
                                        /*                          |       *  .  \   |       .                                      */
                                        /*                                *                 .                                        */
                                        /*                          |   *     .     \ |   .                                          */
                                        /*                            *                 .                                            */
                                        /*                          F - - - -.- - - - D                                              */
                                        /*                        *                                                                  */
                                        /*                      *           .                                                        */
                                        /*                    *                                                                      */
                                        /*                  *              .                                                         */
                                        /*                *                                                                          */
                                        /*              *                 .                                                          */
                                        /*            *                                                                              */
                                        /*          *    ,,              .                                                           */
                                        /*      Z * ==> Y                                                                            */
                                        /*                              .                                                            */
                                        /*                            ,                                                              */
                                        /*                           Z .                                                             */
                                        /*                                                                                           */
                                        /*                                                                                           */
                                        /* On a les proprietes suivantes :                                                           */
                                        /*                         ,   ,                                                             */
                                        /*                  P E (OX ,OY ), car 'OP' est la diagonale du quadrilatere plan OAPE.      */
                                        /*                                                                                           */
                                        /*                   ^     ^     pi                                                          */
                                        /*                  OCE = OEP = ----                                                         */
                                        /*                               2                                                           */
                                        /*                                                                                           */
                                        /*                   ^                                                                       */
                                        /*                  COE = phi                                                                */
                                        /*                                                                                           */
                                        /*                   ^     ^                                                                 */
                                        /*                  OPE = POA = theta                                                        */
                                        /*                                                                                           */
                                        /*                  OP = rho                                                                 */
                                        /*                                                                                           */
                                        /* d'ou :                                                                                    */
                                        /*                                                                                           */
                                        /*                                  ^      CE     Z                                          */
                                        /*                  tan(phi) = tan(COE) = ---- = ---                                         */
                                        /*                                         OC     Y                                          */
                                        /*                                                                                           */
                                        /*                              Z                                                            */
                                        /*                  phi = atan(---) = Theta_2D(Y,Z) = Phi_3D(Y,Z,X)                          */
                                        /*                              Y                                                            */
                                        /*                                                     ________                              */
                                        /*                                                    / 2    2                               */
                                        /*                                   ^      EO      \/ Y  + Z                                */
                                        /*                  tan(theta) = tan(OPE) = ---- = -------------                             */
                                        /*                                          PE           X                                   */
                                        /*                                                                                           */
                                        /*                                   ________                                                */
                                        /*                                  / 2    2                                                 */
                                        /*                                \/ Y  + Z                                                  */
                                        /*                  theta = atan(-------------) = Theta_3D(Y,Z,X)                            */
                                        /*                                    X                                                      */
                                        /*                                                                                           */
                                        /*                           -------------                                                   */
                                        /*                          / 2    2    2                                                    */
                                        /*                  rho = \/ X  + Y  + Z   = Rho_3D(Y,Z,X)                                   */
                                        /*                                                                                           */
                                        /* Enfin, on voit ainsi qu'il suffit de permuter les axes de la facon suivante :             */
                                        /*                                                                                           */
                                        /*                  {X,Y,Z} --> (Y,Z,X)                                                      */
                                        /*                                                                                           */
                                        /* soit :                                                                                    */
                                        /*                                                                                           */
                                        /*                  X --> Z                                                                  */
                                        /*                  Y --> X                                                                  */
                                        /*                  Z --> Y                                                                  */
                                        /*                                                                                           */

                                        /* ATTENTION, il y a eu pendant longtemps :                                                  */
                                        /*                                                                                           */
                                        /*                  #define   cRHO                                                        \  */
                                        /*                                      Rho_3D(cXf,cYf,cZf)                                  */
                                        /*                  #define   cPHI                                                        \  */
                                        /*                                      Theta_3D(cXf,cYf,cZf)                                */
                                        /*                  #define   cTHETA                                                       \ */
                                        /*                                      Phi_3D(cXf,cYf,cZf)                                  */
                                        /*                                                                                           */
                                        /* mais en fait cela etait faux car nous ne sommes pas en coordonnees spheriques relatives   */
                                        /* aux axes (OX,OY,OZ), mais par rapport aux axes (OY,OZ,OX). Il faut donc permuter les      */
                                        /* trois axes ainsi que les fonction 'Theta_3D(...)' et 'Phi_3D(...)'...                     */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D E S   N O M B R E S   Q U A N T I Q U E S  :                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   ORDRE_n                                                                                                                       \
                    ORDRE_n_01
dfTRANSFORMAT_31(liste_PARAMETRE_n,fichier_PARAMETRE_n,PARAMETRE_n_IMPLICITE,ORDRE_n)
#define   sPARAMETRE_n(numero_de_la_periode)                                                                                            \
                    INTE(sTRANSFORMAT_31(numero_de_la_periode,liste_PARAMETRE_n))
DEFV(Local,DEFV(Int,INIT(ordre_n,ORDRE_n)));
                                        /* Definition de l'ordre 'n'.                                                                */

#define   ORDRE_m                                                                                                                       \
                    ORDRE_m_00
dfTRANSFORMAT_31(liste_PARAMETRE_m,fichier_PARAMETRE_m,PARAMETRE_m_IMPLICITE,ORDRE_m)
#define   sPARAMETRE_m(numero_de_la_periode)                                                                                            \
                    INTE(sTRANSFORMAT_31(numero_de_la_periode,liste_PARAMETRE_m))
DEFV(Local,DEFV(Int,INIT(ordre_m,ORDRE_m)));
                                        /* Definition de l'ordre 'm'.                                                                */

#define   ORDRE_l                                                                                                                       \
                    ORDRE_l_00
dfTRANSFORMAT_31(liste_PARAMETRE_l,fichier_PARAMETRE_l,PARAMETRE_l_IMPLICITE,ORDRE_l)
#define   sPARAMETRE_l(numero_de_la_periode)                                                                                            \
                    INTE(sTRANSFORMAT_31(numero_de_la_periode,liste_PARAMETRE_l))
DEFV(Local,DEFV(Int,INIT(ordre_l,ORDRE_l)));
                                        /* Definition de l'ordre 'l'.                                                                */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H O I X   D E   C E   Q U I   S E R A   V I S U A L I S E  :                                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   CALCULER_AUSSI_LA_PARTIE_IMAGINAIRE                                                                                           \
                    VRAI
DEFV(Local,DEFV(Logical,INIT(calculer_aussi_la_partie_Imaginaire,CALCULER_AUSSI_LA_PARTIE_IMAGINAIRE)));
                                        /* Faut-il calculer la partie Imaginaire :                                                   */
                                        /*                                                                                           */
                                        /* VRAI : c'est le module de la fonction propre qui sera visualise,                          */
                                        /* FAUX : c'est uniquement la partie Reelle de la fonction propre qui sera visualise.        */
                                        /*                                                                                           */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P A R A M E T R E S  :                                                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   X_ECHELLE                                                                                                                     \
                    FU                                                                                                                  \
                                        /* Echelle horizontale du champ,                                                             */
#define   Y_ECHELLE                                                                                                                     \
                    FU                                                                                                                  \
                                        /* Echelle verticale du champ,                                                               */
#define   Z_ECHELLE                                                                                                                     \
                    FU                                                                                                                  \
                                        /* Echelle de profondeur du champ.                                                           */

#define   AJUSTEMENT_AUTOMATIQUE_DES_ECHELLES                                                                                           \
                    VRAI                                                                                                                \
                                        /* Indique si les echelles horizontales et verticales doivent etre ajustees automatiquement  */ \
                                        /* en fonction de l'ordre 'n' ('VRAI') ou pas ('FAUX')...                                    */

#define   X_TRANSLATION                                                                                                                 \
                    FDU                                                                                                                 \
                                        /* Translation horizontale du champ,                                                         */
#define   Y_TRANSLATION                                                                                                                 \
                    FDU                                                                                                                 \
                                        /* Translation verticale du champ,                                                           */
#define   Z_TRANSLATION                                                                                                                 \
                    FZERO                                                                                                               \
                                        /* Translation de profondeur du champ.                                                       */

#define   RENORMALISER_CHAQUE_CHAMP_INDEPENDAMMENT                                                                                      \
                    FAUX                                                                                                                \
                                        /* Faut-il renormaliser chaque champ independamment des autres ('VRAI') ou bien faire une    */ \
                                        /* renormalisation globale de l'ensemble des champs ('FAUX') ?                               */

#define   PRENDRE_UNE_DYNAMIQUE_LOGARITHMIQUE                                                                                           \
                    FAUX                                                                                                                \
                                        /* Faut-il prendre une dynamique logarithmique ('VRAI') ou laisser le champ des fonctions    */ \
                                        /* propres tel qu'il a ete calcule ('FAUX') ?                                                */
#define   NOMBRE_D_ITERATIONS_DE_LA_DYNAMIQUE_LOGARITHMIQUE                                                                             \
                    UN                                                                                                                  \
                                        /* S'il faut prendre une dynamique logarithmique, combien de fois faut-il iterer cela ?      */

#define   EDITER_LES_EXTREMA_DE_LA_DENSITE_DE_PROBABILITE                                                                               \
                    FAUX                                                                                                                \
                                        /* Faut-il editer les extrema de la densite de probabilite ('VRAI') ou pas ('FAUX') ?        */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M A C R O S   U T I L E S  :                                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   CORRECTION_DE_L_ECHELLE(echelle)                                                                                              \
                    COND(IL_FAUT(ajustement_automatique_des_echelles)                                                                   \
                        ,MUL2(ADD3(MUL2(FLOT(NEUT(DEUX)),EXP2(ordre_n))                                                                 \
                                  ,MUL2(FLOT(NEUT(SEPT)),EXP1(ordre_n))                                                                 \
                                  ,MUL2(FLOT(NEGA(CINQ)),EXP0(ordre_n))                                                                 \
                                   )                                                                                                    \
                             ,echelle                                                                                                   \
                              )                                                                                                         \
                        ,echelle                                                                                                        \
                         )                                                                                                              \
                                        /* Correction de l'echelle du champ a generer en fonction de l'ordre 'n' a l'aide de la      */ \
                                        /* formule relativement arbitraire :                                                         */ \
                                        /*                                                                                           */ \
                                        /*                      2                                                                    */ \
                                        /*                  (2.n  + 7.n - 5).echelle                                                 */ \
                                        /*                                                                                           */ \
                                        /* lorsque cet ajustement automatique est demande...                                         */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D E S   F O N C T I O N S   P R O P R E S   D E   L ' A T O M E   D ' H Y D R O G E N E              */
/*        E T   V I S U A L I S A T I O N   S O U S   F O R M E   D E   S E R I E S   D E   C O U P E S                              */
/*        E F F E C T U E E S   D A N S   D E S   P L A N S   P A R A L L E L E S   A U   P L A N   ( OX , OY )  :                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(CHAR,INIC(POINTERc(nom_imageR),NOM_PIPE));
                                        /* Nom de la sequence d'images a generer.                                                    */
     DEFV(CHAR,INIT(POINTERc(nom_image),NOM_UNDEF));
                                        /* Nom courant des images.                                                                   */
     DEFV(Logical,INIT(ajustement_automatique_des_echelles,AJUSTEMENT_AUTOMATIQUE_DES_ECHELLES));
                                        /* Indique si les echelles horizontales et verticales doivent etre ajustees automatiquement  */
                                        /* en fonction de l'ordre 'n' ('VRAI') ou pas ('FAUX')...                                    */
     DEFV(coeffF_3D,echelle);
     DEFV(coeffF_3D,echelle_courante);
                                        /* Echelle du champ a generer (valeur initiale et valeur courante).                          */
     DEFV(deltaF_3D,translation);
                                        /* Translation du champ a generer.                                                           */
     DEFV(Float,INIT(densite_de_probabilite_de_presence,FLOT__UNDEF));
                                        /* Definition de la densite de probabilite de presence...                                    */
     DEFV(Logical,INIT(renormaliser_chaque_champ_independamment,RENORMALISER_CHAQUE_CHAMP_INDEPENDAMMENT));
                                        /* Faut-il renormaliser chaque champ independamment des autres ('VRAI') ou bien faire une    */
                                        /* renormalisation globale de l'ensemble des champs ('FAUX') ?                               */
     DEFV(Logical,INIT(prendre_une_dynamique_logarithmique,PRENDRE_UNE_DYNAMIQUE_LOGARITHMIQUE));
                                        /* Faut-il prendre une dynamique logarithmique ('VRAI') ou laisser le champ des fonctions    */
                                        /* propres tel qu'il a ete calcule ('FAUX') ?                                                */
     DEFV(Positive,INIT(nombre_d_iterations_de_la_dynamique_logarithmique,NOMBRE_D_ITERATIONS_DE_LA_DYNAMIQUE_LOGARITHMIQUE));
                                        /* S'il faut prendre une dynamique logarithmique, combien de fois faut-il iterer cela ?      */
     DEFV(Logical,INIT(editer_les_extrema_de_la_densite_de_probabilite,EDITER_LES_EXTREMA_DE_LA_DENSITE_DE_PROBABILITE));
                                        /* Faut-il editer les extrema de la densite de probabilite ('VRAI') ou pas ('FAUX') ?        */
     /*..............................................................................................................................*/
     iTRANSFORMAT_31(liste_PARAMETRE_n,PARAMETRE_n_IMPLICITE);
     iTRANSFORMAT_31(liste_PARAMETRE_m,PARAMETRE_m_IMPLICITE);
     iTRANSFORMAT_31(liste_PARAMETRE_l,PARAMETRE_l_IMPLICITE);
                                        /* Initialisation des trois nombres quantiques (n,m,l).                                      */

     iTRANSFORMAT_31(liste_PARAMETRE_Z,PARAMETRE_Z_IMPLICITE);
                                        /* Initialisation du parametre 'z'.                                                          */

     INITIALISATION_COEFFICIENT_3D(echelle,X_ECHELLE,Y_ECHELLE,Z_ECHELLE);
                                        /* Initialisation de l'echelle du champ a generer.                                           */
     INITIALISATION_ACCROISSEMENT_3D(translation,X_TRANSLATION,Y_TRANSLATION,Z_TRANSLATION);
                                        /* Initialisation de la translation du champ a generer.                                      */

#include  xrv/champs_5.1A.I"

     GET_ARGUMENTSi(nombre_d_arguments
                   ,BLOC(PROCESS_ARGUMENTS_GEOMETRIQUES;

                         PROCESS_ARGUMENT_FICHIER("PARAMETRE_n="
                                                 ,fichier_PARAMETRE_n
                                                 ,liste_PARAMETRE_n
                                                 ,PARAMETRE_n_IMPLICITE
                                                 ,gTRANSFORMAT_31
                                                  );
                         PROCESS_ARGUMENT_FICHIER("PARAMETRE_m="
                                                 ,fichier_PARAMETRE_m
                                                 ,liste_PARAMETRE_m
                                                 ,PARAMETRE_m_IMPLICITE
                                                 ,gTRANSFORMAT_31
                                                  );
                         PROCESS_ARGUMENT_FICHIER("PARAMETRE_l="
                                                 ,fichier_PARAMETRE_l
                                                 ,liste_PARAMETRE_l
                                                 ,PARAMETRE_l_IMPLICITE
                                                 ,gTRANSFORMAT_31
                                                  );

                         PROCESS_ARGUMENT_FICHIER("PARAMETRE_Z="
                                                 ,fichier_PARAMETRE_Z
                                                 ,liste_PARAMETRE_Z
                                                 ,PARAMETRE_Z_IMPLICITE
                                                 ,gTRANSFORMAT_31
                                                  );

                         GET_ARGUMENT_C("imageR=""R=",nom_imageR);

                         GET_ARGUMENT_L("standard=",les_images_sont_standards);

                         GET_ARGUMENT_L("XY=",permutation_XY);
                         GET_ARGUMENT_L("YZ=",permutation_YZ);
                         GET_ARGUMENT_L("ZX=",permutation_ZX);

                         GET_ARGUMENT_L("automatique=""auto=",ajustement_automatique_des_echelles);
                         GET_ARGUMENT_F("Ex=",ASD1(echelle,cx));
                         GET_ARGUMENT_F("Ey=",ASD1(echelle,cy));
                         GET_ARGUMENT_F("Ez=",ASD1(echelle,cz));
                         GET_ARGUMENT_F("Tx=",ASD1(translation,dx));
                         GET_ARGUMENT_F("Ty=",ASD1(translation,dy));
                         GET_ARGUMENT_F("Tz=",ASD1(translation,dz));

                         GET_ARGUMENT_F("z=""profondeur=""coupe=""Z=",profondeur);

                         GET_ARGUMENT_I("ordre_n=""n=",ordre_n);
                         GET_ARGUMENT_I("ordre_m=""m=",ordre_m);
                         GET_ARGUMENT_I("ordre_l=""l=",ordre_l);

                         GET_ARGUMENT_L("spheriques=",calculer_la_probabilite_en_coordonnees_spheriques);

                         GET_ARGUMENT_L("imaginaire=",calculer_aussi_la_partie_Imaginaire);

                         GET_ARGUMENT_L("independant=",renormaliser_chaque_champ_independamment);

                         GET_ARGUMENT_L("logarithmique=""log=",prendre_une_dynamique_logarithmique);
                         GET_ARGUMENT_I("iterations=",nombre_d_iterations_de_la_dynamique_logarithmique);

                         GET_ARGUMENT_L("editer=",editer_les_extrema_de_la_densite_de_probabilite);
                         )
                    );

     Test(IFET(IL_NE_FAUT_PAS(calculer_la_probabilite_en_coordonnees_spheriques)
              ,IL_NE_FAUT_PAS(renormaliser_chaque_champ_independamment)
               )
          )
          Bblock
          PRINT_ATTENTION("le calcul en coordonnees non spheriques demande une renormalisation locale des champs");
          CAL1(Prer1("(il est donc recommande d'utiliser l'option 'independant=%s')\n"
                    ,C_VRAI____
                     )
               );
                                        /* En effet, en coordonnees non spheriques, on trouvera par exemple :                        */
                                        /*                                                                                           */
                                        /*                  (n,l,m) = (1,0,0) : (min,max) = (0.00011853  ,1.36822)        <--        */
                                        /*                                                                                           */
                                        /*                  (n,l,m) = (2,0,0) : (min,max) = (2.982e-08   ,0.133484)                  */
                                        /*                  (n,l,m) = (2,1,0) : (min,max) = (4.03161e-10 ,0.0247791)                 */
                                        /*                                                                                           */
                                        /*                  (n,l,m) = (3,0,0) : (min,max) = (1.18782e-09 ,0.0280957)                 */
                                        /*                  (n,l,m) = (3,1,0) : (min,max) = (6.97896e-11 ,0.00748559)                */
                                        /*                  (n,l,m) = (3,2,0) : (min,max) = (1.39384e-15 ,0.00353962)                */
                                        /*                                                                                           */
                                        /*                  (n,l,m) = (4,0,0) : (min,max) = (9.9518e-11  ,0.00751608)                */
                                        /*                  (n,l,m) = (4,1,0) : (min,max) = (2.60816e-11 ,0.00316542)                */
                                        /*                  (n,l,m) = (4,2,0) : (min,max) = (6.01272e-16 ,0.00153174)                */
                                        /*                  (n,l,m) = (4,3,0) : (min,max) = (7.69063e-18 ,0.000919402)               */
                                        /*                                                                                           */
                                        /*                  (n,l,m) = (5,0,0) : (min,max) = (2.98887e-12 ,0.00210323)                */
                                        /*                  (n,l,m) = (5,1,0) : (min,max) = (1.01824e-12 ,0.0015413)                 */
                                        /*                  (n,l,m) = (5,2,0) : (min,max) = (3.02397e-16 ,0.000794013)               */
                                        /*                  (n,l,m) = (5,3,0) : (min,max) = (7.11847e-18 ,0.000483251)               */
                                        /*                  (n,l,m) = (5,4,0) : (min,max) = (2.18702e-16 ,0.000326228)               */
                                        /*                                                                                           */
                                        /*                  (n,l,m) = (6,0,0) : (min,max) = (2.52593e-13 ,0.000533949)               */
                                        /*                  (n,l,m) = (6,1,0) : (min,max) = (8.2562e-12  ,0.000776722)               */
                                        /*                  (n,l,m) = (6,2,0) : (min,max) = (1.71883e-16 ,0.00044683)                */
                                        /*                  (n,l,m) = (6,3,0) : (min,max) = (5.67368e-18 ,0.000281944)               */
                                        /*                  (n,l,m) = (6,4,0) : (min,max) = (2.78333e-16 ,0.000191733)               */
                                        /*                  (n,l,m) = (6,5,0) : (min,max) = (4.18072e-17 ,0.000140662)               */
                                        /*                                                                                           */
                                        /*                  (n,l,m) = (7,0,0) : (min,max) = (1.59701e-13 ,0.0000986046)              */
                                        /*                  (n,l,m) = (7,1,0) : (min,max) = (1.97754e-15 ,0.000307749)               */
                                        /*                  (n,l,m) = (7,2,0) : (min,max) = (1.06371e-16 ,0.000271601)               */
                                        /*                  (n,l,m) = (7,3,0) : (min,max) = (4.42737e-18 ,0.000169914)               */
                                        /*                  (n,l,m) = (7,4,0) : (min,max) = (2.67781e-16 ,0.000121657)               */
                                        /*                  (n,l,m) = (7,5,0) : (min,max) = (8.026e-17   ,0.0000889364)              */
                                        /*                  (n,l,m) = (7,6,0) : (min,max) = (1.57127e-19 ,0.0000694696)              */
                                        /*                                                                                           */
                                        /*                  (n,l,m) = (8,0,0) : (min,max) = (2.01505e-12 ,0.0000464887)              */
                                        /*                  (n,l,m) = (8,1,0) : (min,max) = (6.04285e-15 ,0.000210769)               */
                                        /*                  (n,l,m) = (8,2,0) : (min,max) = (6.99782e-17 ,0.000142259)               */
                                        /*                  (n,l,m) = (8,3,0) : (min,max) = (3.47365e-18 ,0.00010978)                */
                                        /*                  (n,l,m) = (8,4,0) : (min,max) = (2.35318e-16 ,0.0000808463)              */
                                        /*                  (n,l,m) = (8,5,0) : (min,max) = (1.04225e-16 ,0.0000595529)              */
                                        /*                  (n,l,m) = (8,6,0) : (min,max) = (3.78697e-18 ,0.0000458519)              */
                                        /*                  (n,l,m) = (8,7,0) : (min,max) = (1.99439e-22 ,0.0000375997)   <--        */
                                        /*                                                                                           */
                                        /* Ainsi, le maximum du champ de densite de probabilite varie de 0.0000375997 pour (8,7,0) a */
                                        /* 1.36822 pour (1,0,0), ce qui fait une dynamique beaucoup trop vaste pour etre supportee   */
                                        /* par 'COULEURS'...                                                                         */
          Eblock
     ATes
          Bblock
          Eblock
     ETes

#include  xrq/synapse.11.I"

     begin_nouveau_block
          Bblock
          DONNEES_DE_RECHERCHE_DES_EXTREMA_GLOBAUX_D_UNE_SEQUENCE_D_IMAGES;
                                        /* Extrema globaux de l'ensemble de la sequence...                                           */

          BDEFV(imageF,champ_des_fonctions_propres);
                                        /* Image flottante dans laquelle on trouve les fonctions propres avant renormalisation.      */

          CALi(Inoir(ImageR));
                                        /* Initialisation de l'image Resultat.                                                       */

          Komp(numero_de_la_periode_courante_de_la_simulation,nombre_de_periodes_de_la_simulation)
               Bblock
               DONNEES_DE_RECHERCHE_DES_EXTREMA_LOCAUX_D_UNE_SEQUENCE_D_IMAGES;
                                        /* Extrema locaux de la sequence...                                                          */

               vTRANSFORMAT_31(ordre_n,sPARAMETRE_n,numero_de_la_periode_courante,fichier_PARAMETRE_n);
                                        /* Definition du nombre quantique 'n'...                                                     */
               vTRANSFORMAT_31(ordre_m,sPARAMETRE_m,numero_de_la_periode_courante,fichier_PARAMETRE_m);
                                        /* Definition du nombre quantique 'm'...                                                     */
               vTRANSFORMAT_31(ordre_l,sPARAMETRE_l,numero_de_la_periode_courante,fichier_PARAMETRE_l);
                                        /* Definition du nombre quantique 'l'...                                                     */

               Test(I3ET(IFLT(ordre_n,ORDRE_n_01)
                        ,IFLT(ordre_m,ORDRE_m_00)
                        ,IFLT(ordre_l,ORDRE_l_00)
                         )
                    )
                    Bblock
                                        /* Cas ou l'on souhaite sauter des numeros dans la sequence de facon a generer une           */
                                        /* representation "triangulaire" : dans ce cas, on ne genere pas d'image tout simplement,    */
                                        /* mais on incremente le numero d'image...                                                   */
                    Eblock
               ATes
                    Bblock

                    VALIDATION_DES_ORDRES_lmn;
                                        /* Validation des ordres demandes.                                                           */

                    INITIALISATION_COEFFICIENT_3D(echelle_courante
                                                 ,CORRECTION_DE_L_ECHELLE(ASD1(echelle,cx))
                                                 ,CORRECTION_DE_L_ECHELLE(ASD1(echelle,cy))
                                                 ,CORRECTION_DE_L_ECHELLE(ASD1(echelle,cz))
                                                  );
                                        /* Correction de l'echelle du champ a generer en fonction de l'ordre 'n'...                  */

                    vTRANSFORMAT_31(profondeur,sPARAMETRE_Z,numero_de_la_periode_courante,fichier_PARAMETRE_Z);
                                        /* Definition de la profondeur courante...                                                   */

                    begin_image
                         Bblock
                         EGAL(cXf,caXf);
                         EGAL(cYf,caYf);
                         EGAL(cZf,caZf);
                                        /* Calcul des coordonnees cartesiennes...                                                    */
                         Test(IL_FAUT(permutation_XY))
                              Bblock
                              fSWAP(cXf,cYf);
                                        /* Permutation eventuelle des coordonnees cartesiennes...                                    */
                              Eblock
                         ATes
                              Bblock
                              Eblock
                         ETes
                         Test(IL_FAUT(permutation_YZ))
                              Bblock
                              fSWAP(cYf,cZf);
                                        /* Permutation eventuelle des coordonnees cartesiennes...                                    */
                              Eblock
                         ATes
                              Bblock
                              Eblock
                         ETes
                         Test(IL_FAUT(permutation_ZX))
                              Bblock
                              fSWAP(cZf,cXf);
                                        /* Permutation eventuelle des coordonnees cartesiennes...                                    */
                              Eblock
                         ATes
                              Bblock
                              Eblock
                         ETes

                         EGAL(parametre_r,cRHO);
                         EGAL(u,cTHETA);
                         EGAL(v,cPHI);
                                        /* Definition des coordonnees spheriques apres avoir defini la profondeur...                 */

                         CALCUL_D_UNE_DENSITE_DE_PROBABILITE_DE_PRESENCE(ordre_n,ordre_l,ordre_m);
                                        /* Calcul de la densite de probabilite de presence...                                        */
                         storeF_point(densite_de_probabilite_de_presence
                                     ,champ_des_fonctions_propres
                                     ,X,Y
                                      );
                                        /* Et memorisation...                                                                        */
                         Eblock
                    end_image

                    Test(IL_FAUT(prendre_une_dynamique_logarithmique))
                         Bblock
                         Repe(nombre_d_iterations_de_la_dynamique_logarithmique)
                              Bblock
                              CALS(IFdynamique_logarithmique_avec_translation_dynamique(champ_des_fonctions_propres
                                                                                       ,champ_des_fonctions_propres
                                                                                        )
                                   );
                                        /* S'il le faut, la dynamique du champ des fonctions propres est reduite par application     */
                                        /* d'une fonction logarithme, et ce 'N' fois...                                              */
                              Eblock
                         ERep
                         Eblock
                    ATes
                         Bblock
                         Eblock
                    ETes

                    RECHERCHE_DES_EXTREMA_D_UNE_SEQUENCE_D_IMAGES(champ_des_fonctions_propres);
                                        /* Recherche des extrema locaux et globaux de l'ensemble de la sequence...                   */

                    Test(IL_FAUT(editer_les_extrema_de_la_densite_de_probabilite))
                         Bblock
                         CAL2(Prin3("nombres quantiques : (n,l,m) = (%d,%d,%d)\n",ordre_n,ordre_l,ordre_m));
                         CAL2(Prin2("extrema locaux de la densite de probabilite : (min,max) = (%g,%g)\n"
                                   ,niveau_minimum_de_l_image
                                   ,niveau_maximum_de_l_image
                                    )
                              );
                         Eblock
                    ATes
                         Bblock
                         Eblock
                    ETes

                    EGAL(nom_image
                        ,chain_Aconcaten2_sauf_nom_pipe(nom_imageR
                                                       ,ChaineNumero(numero_de_la_periode_courante
                                                                    ,NOMBRE_DE_CHIFFRES
                                                                     )
                                                        )
                         );
                                        /* Le 20080602135049 fut introduit 'ChaineNumero(...)' afin de pouvoir parametrer            */
                                        /* aisement le nombre de chiffres des numeros...                                             */
                    CALi(IupdateF_image(nom_image,champ_des_fonctions_propres));
                                        /* Sauvegarde du champ sans renormalisation...                                               */
                    CALZ_FreCC(nom_image);
                    Eblock
               ETes

               INCR(numero_de_la_periode_courante,I);
                                        /* Et passage a l'image suivante...                                                          */
               Eblock
          EKom

          Test(IL_FAUT(editer_les_extrema_de_la_densite_de_probabilite))
               Bblock
               CAL2(Prin2("\n extrema globaux de la densite de probabilite : (min,max) = (%g,%g)\n\n"
                         ,niveau_minimum_de_la_sequence
                         ,niveau_maximum_de_la_sequence
                          )
                    );
               Eblock
          ATes
               Bblock
               Eblock
          ETes

          EGAL(files_____editer_les_messages_d_erreur_de_lecture_des_fichiers,NE_PAS_EDITER_LES_MESSAGES_D_ERREUR_DES_FICHIERS);
                                        /* ATTENTION : ce n'est plus une erreur que l'image courante n'existe pas puisque            */
                                        /* dorenavant, il peut y avoir des trous dans la sequence, d'ou l'inhibition des messages    */
                                        /* d'erreur...                                                                               */

          EGAL(numero_de_la_periode_courante,NUMERO_DE_LA_PREMIERE_PERIODE_DE_LA_SIMULATION);
                                        /* Reinitialisation...                                                                       */

          Test(EST_VRAI(les_images_sont_standards))
               Bblock
                                        /* Cas ou l'on genere des images de type 'image' :                                           */

               Komp(numero_de_la_periode_courante_de_la_simulation,nombre_de_periodes_de_la_simulation)
                    Bblock
                    EGAL(nom_image
                        ,chain_Aconcaten2_sauf_nom_pipe(nom_imageR
                                                       ,ChaineNumero(numero_de_la_periode_courante
                                                                    ,NOMBRE_DE_CHIFFRES
                                                                     )
                                                        )
                         );
                                        /* Le 20080602135049 fut introduit 'ChaineNumero(...)' afin de pouvoir parametrer            */
                                        /* aisement le nombre de chiffres des numeros...                                             */
                    Test(PAS_D_ERREUR(CODE_ERROR(IloadF_image(champ_des_fonctions_propres,nom_image))))
                         Bblock
                         Test(IL_NE_FAUT_PAS(renormaliser_chaque_champ_independamment))
                              Bblock
                              CALS(Ifloat_std(ImageR
                                             ,champ_des_fonctions_propres
                                             ,niveau_minimum_de_la_sequence
                                             ,niveau_maximum_de_la_sequence
                                              )
                                   );
                                        /* Renormalisation globale des images de la sequence...                                      */
                              Eblock
                         ATes
                              Bblock
                              CALS(Ifloat_std_avec_renormalisation(ImageR
                                                                  ,champ_des_fonctions_propres
                                                                   )
                                   );
                                        /* Renormalisation locale des images de la sequence...                                       */
                              Eblock
                         ETes

                         CALi(Iupdate_image(nom_image,ImageR));
                         Eblock
                    ATes
                         Bblock
                                        /* ATTENTION : ce n'est plus une erreur que l'image courante n'existe pas puisque            */
                                        /* dorenavant, il peut y avoir des trous dans la sequence...                                 */
                         Eblock
                    ETes
                    CALZ_FreCC(nom_image);

                    INCR(numero_de_la_periode_courante,I);
                                        /* Et passage a l'image suivante...                                                          */
                    Eblock
               EKom
               Eblock
          ATes
               Bblock
                                        /* Cas ou l'on genere des images de type 'imageF' :                                          */
               Eblock
          ETes

          EDEFV(imageF,champ_des_fonctions_propres);
                                        /* Image flottante dans laquelle on trouve les fonctions propres avant renormalisation.      */
          Eblock
     end_nouveau_block

     RETU_Commande;
     Eblock
ECommande



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