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