/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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   C O U P E S   D A N S   L E   P L A N   ( OX , OY )  :       */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                                       .......................                                                                     */
/*                                     ...........................                                                                   */
/*                                    .............................                                                                  */
/*                                    .............................                                                                  */
/*                           ....      ...........................      ....                                                         */
/*                       ............   .........................   ............                                                     */
/*                     ...............   .......................  ................                                                   */
/*                   ...................       ...........       ...................                                                 */
/*                  ....................     ...............     ...................                                                 */
/*                  .........::::::....  .   ...............   .  ....::::::........                                                 */
/*                  .......::-----:... .....    .........    ..... ...:-----::......                                                 */
/*                  ......:-++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.31$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

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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   E T                                                        */
/*        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 20060611084941 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"

#define   ORDRE_n                                                                                                                       \
                    ORDRE_n_01
DEFV(Local,DEFV(Int,INIT(ordre_n,ORDRE_n)));
                                        /* Definition de l'ordre 'n'.                                                                */
#define   ORDRE_l                                                                                                                       \
                    ORDRE_l_00
DEFV(Local,DEFV(Int,INIT(ordre_l,ORDRE_l)));
                                        /* Definition de l'ordre 'l'.                                                                */
#define   ORDRE_m                                                                                                                       \
                    ORDRE_m_00
DEFV(Local,DEFV(Int,INIT(ordre_m,ORDRE_m)));
                                        /* Definition de l'ordre 'm'.                                                                */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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   cXf                                                                                                                           \
                    MUL2(ASD1(echelle,cx),SOUS(_____cNORMALISE_OX(X),ASD1(translation,dx)))
#define   cYf                                                                                                                           \
                    MUL2(ASD1(echelle,cy),SOUS(_____cNORMALISE_OY(Y),ASD1(translation,dy)))
                                        /* Definition des coordonnees cartesiennes. On notera que l'on utilise (cXf,cYf) afin de     */
                                        /* ne pas rentrer en conflit avec une eventuelle utilisation de la procedure de definition   */
                                        /* de coordonnees 'coordonnees_flottantes_X_et_Y_et_Z' qui definit {Xf,Yf,Zf}.               */

#define   cRHO                                                                                                                          \
                    Rho_2D(cXf,cYf)                                                                                                     \
                                        /* Definition du rayon polaire.                                                              */
#define   cPHI                                                                                                                          \
                    phi
#define   PHI0                                                                                                                          \
                    FZERO
DEFV(Local,DEFV(Float,INIT(phi,PHI0)));
                                        /* Definition de la coordonnee 'phi'. ATTENTION, on ne trouve pas :                          */
                                        /*                                                                                           */
                                        /*                  GET_ARGUMENT_F("phi=",phi);                                              */
                                        /*                                                                                           */
                                        /* car en effet, le "champ" possede une symetrie de revolution par rapport a 'phi', ce qui   */
                                        /* implique l'independance des figures obtenues vis a vis de 'phi' ; donc pouvoir changer    */
                                        /* sa valeur ne presente aucun interet...                                                    */
#define   cTHETA                                                                                                                        \
                    Theta_2D(cXf,cYf)                                                                                                   \
                                        /* Definition de la coordonnee 'theta'.                                                      */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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   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   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 ?      */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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   C O U P E S   D A N S   L E   P L A N   ( OX , OY )  :       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(CHAR,INIC(POINTERc(nom_imageR),NOM_PIPE));
     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_2D,echelle);
                                        /* Echelle du champ a generer.                                                               */
     DEFV(deltaF_2D,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(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 ?      */
     /*..............................................................................................................................*/
     INITIALISATION_COEFFICIENT_2D(echelle,X_ECHELLE,Y_ECHELLE);
                                        /* Initialisation de l'echelle du champ a generer.                                           */
     INITIALISATION_ACCROISSEMENT_2D(translation,X_TRANSLATION,Y_TRANSLATION);
                                        /* Initialisation de la translation du champ a generer.                                      */
     GET_ARGUMENTSi(nombre_d_arguments
                   ,BLOC(GET_ARGUMENT_C("imageR=""R=",nom_imageR);

                         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("Tx=",ASD1(translation,dx));
                         GET_ARGUMENT_F("Ty=",ASD1(translation,dy));

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

                         GET_ARGUMENT_L("spheriques=",calculer_la_probabilite_en_coordonnees_spheriques);

                         GET_ARGUMENT_L("imaginaire=",calculer_aussi_la_partie_Imaginaire);

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

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

          VALIDATION_DES_ORDRES_lmn;
                                        /* Validation des ordres demandes.                                                           */

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

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

          begin_image
               Bblock
               EGAL(parametre_r,cRHO);
               EGAL(u,cTHETA);
               EGAL(v,cPHI);
                                        /* Definition des coordonnees polaires...                                                    */

               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
          CALS(Ifloat_std_avec_renormalisation(ImageR,champ_des_fonctions_propres));
                                        /* Renormalisation des fonctions propres...                                                  */

          CALi(Iupdate_image(nom_imageR,ImageR));

          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.