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