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