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