/*************************************************************************************************************************************/ /* */ /* S U P E R P O S I T I O N D Y N A M I Q U E D ' E T A T 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 : */ /* */ /* */ /* Exemple de realisation : */ /* */ /* */ /* ................................................................ */ /* ................................................................ */ /* ................................................................ */ /* ..---------...........................................---------. */ /* --------------.....................................------------- */ /* -----------------...............................---------------- */ /* -------------------.......-------------.......------------------ */ /* --::::::::---------------------:::---------------------::::::::- */ /* ::::::::::::-------------:::::::o:::::::-------------::::::::::: */ /* :::::::::::::----------:::ooooOOOOOoooo:::----------:::::::::::: */ /* ::::::::::::::-------:::oooOO%%%%%%OOOooo:::-------::::::::::::: */ /* ::ooooo:::::::-------::ooOO%%%#####%%%OOoo::-------:::::::ooooo: */ /* ooooooooo:::::------:::ooO%%########%%%Ooo::-------:::::oooooooo */ /* oooooooooo::::-------::ooO%%%%%%%%%%%%%Ooo::-------::::ooooooooo */ /* oooooooooo::::--------:ooOOOOOo:-:oOOOOOo::--------::::ooooooooo */ /* ooooooooooo:::---------:oooOo:-. .-:oOoo::---------:::oooooooooo */ /* ooooooooooo:::----....--::ooo::---::ooo::--....----:::oooooooooo */ /* oooooooooooo:::--.......---:::::::::::---......---:::ooooooooooo */ /* oooooooooooo:::---..........---------..........---::oooooooooooo */ /* ooooooooooooo:::--............................---:::oooooooooooo */ /* :ooooooooooooo:::---.........................---:::ooooooooooooo */ /* ::ooooooooooooo::::--.......................--:::oooooooooooooo: */ /* :::oooooooooooooo:::----.................---::::oooooooooooooo:: */ /* :::::oooooooooooooo::::-----.........-----::::oooooooooooooo:::: */ /* -::::::oooooooooooooo::::::----------:::::::oooooooooooooo:::::- */ /* ----::::::oooooooooooooo::::::::::::::::ooooooooooooooo::::::--- */ /* ------::::::::ooooooooooooooooo:::ooooooooooooooooo::::::::----- */ /* ..--------:::::::::ooooooooooooooooooooooooooo:::::::::--------. */ /* ......--------:::::::::::::::::::::::::::::::::::::--------..... */ /* ..........-----------:::::::::::::::::::::::-----------......... */ /* ................---------------------------------............... */ /* ...........................-----------.......................... */ /* */ /* */ /* (A=1,B=1,C=1,D=1,E=1,F=1) */ /* (t=0) */ /* */ /* */ /* ...... ......................................---.-...... .....-- */ /* ....... .....------...........-----........--:::::::-........-:: */ /* ::--........----::::--:oo-....--oo:-....-::::ooooOOo::-... ..:oo */ /* ooo:-... ..--:--OOo:::o:.:....--OOo:. ...-::ooooO%%%Oo:. ...-oOO */ /* OOOOo:-..--:::--O%Oo:-.......---O%%O:....-::oOooO%##%O:-...-oOOO */ /* %%%%%%Oooooo::-.O%%%Oo:-...----.O%%%%Oo::ooOOo:-O%%###%OOOOO%OOo */ /* O%%%%%%%OOo:--..OO%%OOOoo:::-...oOO%%%%OOOoo:--.:ooO%%%%%%OOo:-- */ /* OOO%%OOOo::-....oooooooo::-.....::::ooo:::-.....----::::::--.... */ /* ................ .................. .............. .......... */ /* .. ..... .................................................. */ /* .......---............................................-:::-..... */ /* ......--.--............. .......-------.........:--...-:.:-..... */ /* ................--..............::::----........oo:-............ */ /* ---...........--::::----------..ooooo:--........OOOo:-.......... */ /* ::::::-----:::::oOOoooooo::::::-OOOOOOoo::----..O%%OOoo:::---... */ /* OOOOOOOOOOOOOOOOO%%%%%%OOOOOoooo%%%%%%OOOoo:::--O%%%%OOOoo::--.. */ /* .......... ................................ .................. */ /* .---...... .................................................. .. */ /* .----.........--......-:o:-................................. ... */ /* .--:--.. ...-:oo......-:.:-...--..........------................ */ /* .--:::--..-:oOOO.............-::.........---::::...............- */ /* ..-::oooooOO%%%%...........-:ooO........--::oooo..------...---:: */ /* ...--:oOOO%%%%%%....---:::ooOO%%..----:::ooOOOOO-:::::::::oooooo */ /* ....--:ooOOO%%%O..---::ooOOO%%%%--:::oooOO%%%%%%oooooOOOOO%%%%%O */ /* --............-----..... .......----............................ */ /* :::-.........-:::::-........-:::-::---........-----...........-- */ /* oo:---:O%O:--::oooo:-......-:oOO:::::::o:-...-::---....-:o::-::: */ /* oOo:..:o.o:.-:oOoOOo-... .-:O%%%:ooo::o:.-...:oO---.. .-.:o::ooO */ /* oOOo-.......-oOOoOOOo:-..-oO%##%::ooo:--....:oO%.---.....--:oO%% */ /* :oOOo:-...-:oOOo:oOO%%OOO%%###%%--:ooo:::::oO%%%..--------:oO%%% */ /* --:ooooooooooo:-.-::oOO%%%%%%Ooo..--:ooOOOO%%OOO...--::oooOO%%%O */ /* ....---------........--::::::--- ....--:::oooo::.....--::ooooOoo */ /* */ /* */ /* (A=1,B=1,C=1,D=1,E=1,F=1) */ /* (pour t E [0,8]) */ /* */ /* */ /* oOOOOO%OOOoOOoOO%%############## */ /* oOooOooOOOOoo:oO%############### */ /* %OOOOoOOOoo:-:OOOO%############% % */ /* oOOOOOOOoo-.-oOOooo#############%%%%%%%# oOoo# %OO%%%% */ /* OOOOO%OOo-..:o%Oo::%#####%%####%oO%##########-%Oo:o#OOOOOOOOOO%% */ /* %OO%%OOO-..-:O%O:.-%#####%%%%%%%oO%#########.:%O-.:##OOooooooO%% */ /* %%%%O%%%:..-:o#%-.-%%###%%%%%#%%:OO%#####%O..:#%-.:###%OOo::o%%# */ /* %%%%%%%%O---:o#:-.o%%#%%%%%%%%%%ooOO%##O:-...-O:-.%%####O--o%### */ /* %%%%%%%%%o:-:ooO%O%%%%%%%%OOO%%%:ooOO%##::...-:oOO%%###O-o%%#### */ /* %%%#%#%%%Oo:ooooOOO%%%%%%%OOO%O%:ooooOO%##-..-:ooOO%%#%O%%###### */ /* %%%%%%##%%OoooooOOO%%%%%OOOOO%%%ooO:ooOOOOO%%%%ooO%%%%%%%%%%#%## */ /* %%%%%#####%%OooO%%%%%%%OOOOOOO%%O:oOOOoooO%O%OO%%%%%%%%%%%%%%### */ /* %%%%%%##%##%%%%O%%%%%%%oO%O%O%%%Oo:OOooooOoOOO%%%%%%%%%%%%%%%%%# */ /* %%%%%%%%#%%%%%%%%%%%OO%%OOOO%%%OoOOOoooOoOoOOOOO%OO%%%%%%%%%%%%# */ /* %%%%#%%%%%%##%%%%%%%%O%%O%%%O%%OOOOOOooOOOO...........%%%%%%%%#% */ /* %%%%%#%%%%%%%%%%%%%%%%OOO%%O%%%%OOOO........................:##% */ /* */ /* (A=1,B=0,C=1,D=0,E=0,F=1) (A=1,B=1.50,C=1,D=1,E=1,F=1) */ /* */ /* oO%## */ /* OO%O%%%%%%%#%o::%%%%O%%#%%# OOO-:OOOo%##%%% */ /* OOO%%%%%%%#%%.O%-.##OOOO%O%%%%## %OOOOOOOo-.-o%Oo:o%##########%# */ /* OO%%######%%%.-oo%%#%OOOOOOOO%##%OOOOooo:..-:O%Oo-:%############ */ /* %%%#######%%...:oO%%#OOOooOOO%%%%ooOOOo--..-:%%O-..O############ */ /* %%########%%...:oOO%#OooOoooOO%%OOoOoOOo:--::O#o-.-%%########### */ /* %%#########....:oOO%%#oOoooooO%O%OOooO%OOO:::o%:-.O%%#%%%####### */ /* %%#::::%##%...-:oOO%%#%OoooooOO%:Oo%%%%%OOoo:ooOOOOO%%%%%%%%%### */ /* %%#%:::::-....-ooOO%%###Oo::oo%%OoOO%%%#%%%ooooOOOOO%%%%OOO%##%# */ /* %%###::::.....:ooOO%%###%OoooOO#O%%%%#####%%OoooOOOO%%OOOOO%%%## */ /* %%O%%##::-...-:ooO%%%###%ooOO%%#oOOOO%%#####%OOOOOO%%OOoOO%%%### */ /* O%%OO%%##:--:oooOO%%###%oOO%#%%#OOOO%%%##%#####OOOOOOooOOO%%%### */ /* o%OOOO%%%%%%%OO%%%%#%OO%%#%#####O%oOO%OO%%%%%%#%%%OOO%%%%%###### */ /* OOOOOOOO%OO::.......::%#%%%%%%%#%OOO%OOO%%%%%%%%%%%%%%%%%%#%%### */ /* O...............................O%OO%OOO%o.............%%%%###%# */ /* */ /* (A=1,B=1.50,C=0,D=0,E=0,F=0) (A=1,B=0,C=1,D=0,E=0,F=0) */ /* */ /* (t=8) */ /* */ /* */ /* voir aussi 'v $xiaq/HYDR.6G$M$R16' et 'v $xiaq/HYDR.6d$R16$DROITE p=$xiP/trou_noir.14'. */ /* */ /* */ /* Author of '$xrq/hydrogene.61$K' : */ /* */ /* John F. Colonna (LACTAMME, 19930000000000). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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_____MODULE_NON_OPTIMISABLE @define PRAGMA_____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 ( 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 20030130112733 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 20060611085053 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" /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C A L C U L L O C A L D ' U N E F O N C T I O N P R O P R E : */ /* */ /*************************************************************************************************************************************/ #define CALCUL_EVENTUEL_D_UNE_FONCTION_PROPRE(fonction_propre,ordre_n,ordre_l,ordre_m,coefficient) \ Bblock \ Test(IZNE(coefficient)) \ Bblock \ CALCUL_D_UNE_FONCTION_PROPRE_DE_NOM_QUELCONQUE(fonction_propre,ordre_n,ordre_l,ordre_m); \ /* Calcul de la fonction propre locale pour un couple (n,l,m) de nom 'fonction_propre' */ \ /* quand sa ponderation ulterieure n'est pas nulle... */ \ Eblock \ ATes \ Bblock \ Cinitialisation(fonction_propre,FZERO,FZERO); \ /* Lorsque la ponderation ulterieure d'une fonction propre locale pour un couple (n,l,m) */ \ /* est nulle, on met cette derniere a zero par pure proprete (et peut-etre aussi pour */ \ /* eviter des problemes avec les nombres flottants. on ne sait jamais...). */ \ Eblock \ ETes \ Eblock \ /* Calcul de la fonction propre locale pour un couple (n,l,m) de nom 'fonction_propre' */ \ /* lorsque sa ponderation ulterieure n'est pas nulle... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N D U T E M P S : */ /* */ /*************************************************************************************************************************************/ #include xrq/hydrogene.61.I" /* Forcage de la definition de 'ZOOM_IMPLICITE' afin d'assurer la compatibilite avec les */ /* sequences deja generees... */ #include xrs/surfaces.11.I" #define TEMPS \ FZERO DEFV(Local,DEFV(Float,INIT(temps,TEMPS))); /* Definition du temps. */ dfTRANSFORMAT_31(liste_PARAMETRE_TEMPS,fichier_PARAMETRE_TEMPS,PARAMETRE_TEMPS_IMPLICITE,TEMPS) /* Definition du fichier du parametre 't'. */ #define sPARAMETRE_TEMPS(numero_de_la_periode) \ FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_PARAMETRE_TEMPS)) /* Formule generale definissant les variations de 't' au cours du temps. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 (du type [0,1] ou [-0.5,+0.5]). */ 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 \ */ /* Teta_3D(cXf,cYf,cZf) */ /* #define cTETA \ */ /* 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 'Teta_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 cTETA \ Teta_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(---) = Teta_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(-------------) = Teta_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 \ */ /* Teta_3D(cXf,cYf,cZf) */ /* #define cTETA \ */ /* 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 'Teta_3D(...)' et 'Phi_3D(...)'... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N D E S C O M B I N A I S O N S L I N E A I R E S : */ /* */ /* */ /* Definition : */ /* */ /* On etudie une combinaison lineaire */ /* de plusieurs fonctions propres 'PSI(n,l,m)' */ /* telle qu'elle evolue au cours du temps de */ /* la facon suivante : */ /* */ /* 2.i.pi.t */ /* ---------- */ /* 2 */ /* 1 */ /* = e .[A.PSI ] */ /* 100 */ /* */ /* 2.i.pi.t */ /* ---------- */ /* 2 */ /* 2 */ /* + e .[B.PSI + C.PSI ] */ /* 200 211 */ /* */ /* 2.i.pi.t */ /* ---------- */ /* 2 */ /* 3 */ /* + e .[D.PSI + E.PSI + F.PSI ] */ /* 300 311 322 */ /* /\ */ /* || . . . */ /* || /|\ /|\ /|\ */ /* || | | | */ /* || | | | */ /* | | | */ /* 2 */ /* T = n n n n */ /* */ /* */ /* On notera qu'en regle generale la periode */ /* 'T' des exponentielles est egale au carre du */ /* nombre quantique 'n' des fonctions propres */ /* associees. Cela peut etre outrepasse avec */ /* les arguments d'appels ; en effet, si l'on */ /* souhaite observer une periode complete du */ /* phenomene, il faut faire varier le temps 't' */ /* dans l'intervalle [0,36], ou '36' est en fait */ /* le 'PPCM' des nombres (1,4,9). Or cet intervalle */ /* est enorme par rapport au nombre d'images en */ /* general calculees (128...). Le mouvement obtenu */ /* sera tres saccade, et pire l'axe des 't' ne sera */ /* pas echantillonne regulierement. Ceci est tres */ /* visible sur la sequence : */ /* */ /* xivPdf 1 2 / 004677_004804 */ /* */ /* On sera donc amene a tricher un peu, en */ /* choisissant par exemple : */ /* */ /* T1=1 */ /* T2=4 */ /* T3=8 (au lieu de 9, mais en restant tres proche de cette valeur) */ /* */ /* La sequence : */ /* */ /* xivPdf 1 2 / 006597_006724 */ /* */ /* est ainsi generee dans [0,8]... */ /* */ /* */ /* Enfin, on notera que les ordres 'n', 'l' */ /* et 'm' reellement utilises sont en fait */ /* parametres ci-dessous... */ /* */ /* */ /*************************************************************************************************************************************/ #define ORDRE_n_A \ ORDRE_n_01 DEFV(Local,DEFV(Int,INIT(ordre_n_A,ORDRE_n_A))); #define ORDRE_l_A \ ORDRE_l_00 DEFV(Local,DEFV(Int,INIT(ordre_l_A,ORDRE_l_A))); #define ORDRE_m_A \ ORDRE_m_00 DEFV(Local,DEFV(Int,INIT(ordre_m_A,ORDRE_m_A))); #define COEFFICIENT_A \ FU DEFV(Local,DEFV(Float,INIT(coefficient_A,COEFFICIENT_A))); /* Fonction propre 'A'. */ dfTRANSFORMAT_31(liste_COEFFICIENT_A,fichier_COEFFICIENT_A,COEFFICIENT_A_IMPLICITE,COEFFICIENT_A) /* Definition du coefficient 'A'. */ #define sCOEFFICIENT_A(numero_de_la_periode) \ FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_COEFFICIENT_A)) /* Formule generale definissant les variations de 'A' au cours du temps. */ #define ORDRE_n_B \ ORDRE_n_02 DEFV(Local,DEFV(Int,INIT(ordre_n_B,ORDRE_n_B))); #define ORDRE_l_B \ ORDRE_l_00 DEFV(Local,DEFV(Int,INIT(ordre_l_B,ORDRE_l_B))); #define ORDRE_m_B \ ORDRE_m_00 DEFV(Local,DEFV(Int,INIT(ordre_m_B,ORDRE_m_B))); #define COEFFICIENT_B \ FU DEFV(Local,DEFV(Float,INIT(coefficient_B,COEFFICIENT_B))); /* Fonction propre 'B'. */ dfTRANSFORMAT_31(liste_COEFFICIENT_B,fichier_COEFFICIENT_B,COEFFICIENT_B_IMPLICITE,COEFFICIENT_B) /* Definition du coefficient 'B'. */ #define sCOEFFICIENT_B(numero_de_la_periode) \ FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_COEFFICIENT_B)) /* Formule generale definissant les variations de 'B' au cours du temps. */ #define ORDRE_n_C \ ORDRE_n_B DEFV(Local,DEFV(Int,INIT(ordre_n_C,ORDRE_n_C))); #define ORDRE_l_C \ ORDRE_l_01 DEFV(Local,DEFV(Int,INIT(ordre_l_C,ORDRE_l_C))); #define ORDRE_m_C \ ORDRE_m_01 DEFV(Local,DEFV(Int,INIT(ordre_m_C,ORDRE_m_C))); #define COEFFICIENT_C \ FU DEFV(Local,DEFV(Float,INIT(coefficient_C,COEFFICIENT_C))); /* Fonction propre 'C'. */ dfTRANSFORMAT_31(liste_COEFFICIENT_C,fichier_COEFFICIENT_C,COEFFICIENT_C_IMPLICITE,COEFFICIENT_C) /* Definition du coefficient 'B'. */ #define sCOEFFICIENT_C(numero_de_la_periode) \ FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_COEFFICIENT_C)) /* Formule generale definissant les variations de 'B' au cours du temps. */ #define ORDRE_n_D \ ORDRE_n_03 DEFV(Local,DEFV(Int,INIT(ordre_n_D,ORDRE_n_D))); #define ORDRE_l_D \ ORDRE_l_00 DEFV(Local,DEFV(Int,INIT(ordre_l_D,ORDRE_l_D))); #define ORDRE_m_D \ ORDRE_m_00 DEFV(Local,DEFV(Int,INIT(ordre_m_D,ORDRE_m_D))); #define COEFFICIENT_D \ FU DEFV(Local,DEFV(Float,INIT(coefficient_D,COEFFICIENT_D))); /* Fonction propre 'D'. */ dfTRANSFORMAT_31(liste_COEFFICIENT_D,fichier_COEFFICIENT_D,COEFFICIENT_D_IMPLICITE,COEFFICIENT_D) /* Definition du coefficient 'D'. */ #define sCOEFFICIENT_D(numero_de_la_periode) \ FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_COEFFICIENT_D)) /* Formule generale definissant les variations de 'D' au cours du temps. */ #define ORDRE_n_E \ ORDRE_n_D DEFV(Local,DEFV(Int,INIT(ordre_n_E,ORDRE_n_E))); #define ORDRE_l_E \ ORDRE_l_01 DEFV(Local,DEFV(Int,INIT(ordre_l_E,ORDRE_l_E))); #define ORDRE_m_E \ ORDRE_m_01 DEFV(Local,DEFV(Int,INIT(ordre_m_E,ORDRE_m_E))); #define COEFFICIENT_E \ FU DEFV(Local,DEFV(Float,INIT(coefficient_E,COEFFICIENT_E))); /* Fonction propre 'E'. */ dfTRANSFORMAT_31(liste_COEFFICIENT_E,fichier_COEFFICIENT_E,COEFFICIENT_E_IMPLICITE,COEFFICIENT_E) /* Definition du coefficient 'E'. */ #define sCOEFFICIENT_E(numero_de_la_periode) \ FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_COEFFICIENT_E)) /* Formule generale definissant les variations de 'E' au cours du temps. */ #define ORDRE_n_F \ ORDRE_n_D DEFV(Local,DEFV(Int,INIT(ordre_n_F,ORDRE_n_F))); #define ORDRE_l_F \ ORDRE_l_02 DEFV(Local,DEFV(Int,INIT(ordre_l_F,ORDRE_l_F))); #define ORDRE_m_F \ ORDRE_m_02 DEFV(Local,DEFV(Int,INIT(ordre_m_F,ORDRE_m_F))); #define COEFFICIENT_F \ FU DEFV(Local,DEFV(Float,INIT(coefficient_F,COEFFICIENT_F))); /* Fonction propre 'F'. */ dfTRANSFORMAT_31(liste_COEFFICIENT_F,fichier_COEFFICIENT_F,COEFFICIENT_F_IMPLICITE,COEFFICIENT_F) /* Definition du coefficient 'F'. */ #define sCOEFFICIENT_F(numero_de_la_periode) \ FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_COEFFICIENT_F)) /* Formule generale definissant les variations de 'F' au cours du temps. */ DEFV(Local,DEFV(Int,INIT(plus_grand_des_ordres_n,UNDEF))); /* Plus grand des 6 ordres 'n' relatifs aux 6 fonctions propres 'A', 'B', 'C', 'D, 'E' et */ /* 'F' lorsque l'ajustement automatique par 'CORRECTION_DE_L_ECHELLE(...)' est demande... */ #define PERIODE_1 \ FLOT(EXP2(ORDRE_n_A)) DEFV(Local,DEFV(Float,INIT(periode_1,PERIODE_1))); /* Premiere periode. */ #define PERIODE_2 \ FLOT(EXP2(ORDRE_n_B)) DEFV(Local,DEFV(Float,INIT(periode_2,PERIODE_2))); /* Seconde periode. */ #define PERIODE_3 \ FLOT(EXP2(ORDRE_n_D)) DEFV(Local,DEFV(Float,INIT(periode_3,PERIODE_3))); /* Troisieme periode. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 des ordres '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(DIVI(ADD3(MUL2(FLOT(NEUT(DEUX)),EXP2(plus_grand_des_ordres_n)) \ ,MUL2(FLOT(NEUT(SEPT)),EXP1(plus_grand_des_ordres_n)) \ ,MUL2(FLOT(NEGA(CINQ)),EXP0(plus_grand_des_ordres_n)) \ ) \ ,FLOT(CINQ) \ ) \ ,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 */ \ /* -------------------------- */ \ /* 5 */ \ /* */ \ /* (ou 'n' represente le plus grand des 6 ordres 'n' relatifs aux 6 fonctions propres 'A', */ \ /* 'B', 'C', 'D, 'E' et 'F') lorsque cet ajustement automatique est demande... On notera */ \ /* un facteur diviseur egal a 5 par rapport a la meme procedure de '$xrq/hydrogene.41$K'. */ \ /* Celui-ci est approximativement egal a : */ \ /* */ \ /* f(3) 034 */ \ /* ------ = ----- ~ 5 */ \ /* f(8) 179 */ \ /* */ \ /* ou 'f(...)' designe 'CORRECTION_DE_L_ECHELLE(...)' dans '$xrq/hydrogene.41$K'. En effet */ \ /* dans ce programme 'n' peut aller jusqu'a 8, alors qu'ici, on s'arrete a 3, d'ou ce */ \ /* rapport... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* S U P E R P O S I T I O N D Y N A M I Q U E D ' E T A T 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 : */ /* */ /*************************************************************************************************************************************/ BCommande(nombre_d_arguments,arguments) /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock INIT_ERROR; 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 des ordres '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') ? */ /*..............................................................................................................................*/ DEBUT_DE_L_INITIALISATION_DES_INTERPOLATIONS_GEOMETRIQUES; /* Et ceci afin de pouvoir tourner dans le champ de densite de probabilite de presence... */ iTRANSFORMAT_31(liste_PARAMETRE_TEMPS,PARAMETRE_TEMPS_IMPLICITE); /* Initialisation du parametre 't'. */ iTRANSFORMAT_31(liste_PARAMETRE_Z,PARAMETRE_Z_IMPLICITE); /* Initialisation du parametre 'z'. */ iTRANSFORMAT_31(liste_COEFFICIENT_A,COEFFICIENT_A_IMPLICITE); /* Initialisation du parametre 'A'. */ iTRANSFORMAT_31(liste_COEFFICIENT_B,COEFFICIENT_B_IMPLICITE); /* Initialisation du parametre 'B'. */ iTRANSFORMAT_31(liste_COEFFICIENT_C,COEFFICIENT_C_IMPLICITE); /* Initialisation du parametre 'C'. */ iTRANSFORMAT_31(liste_COEFFICIENT_D,COEFFICIENT_D_IMPLICITE); /* Initialisation du parametre 'D'. */ iTRANSFORMAT_31(liste_COEFFICIENT_E,COEFFICIENT_E_IMPLICITE); /* Initialisation du parametre 'E'. */ iTRANSFORMAT_31(liste_COEFFICIENT_F,COEFFICIENT_F_IMPLICITE); /* Initialisation du parametre 'F'. */ 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_C("PARAMETRE_TEMPS=",fichier_PARAMETRE_TEMPS ,BLOC(VIDE;) ,BLOC(gTRANSFORMAT_31(fichier_PARAMETRE_TEMPS ,liste_PARAMETRE_TEMPS ,PARAMETRE_TEMPS_IMPLICITE ); ) ); PROCESS_ARGUMENT_C("PARAMETRE_Z=",fichier_PARAMETRE_Z ,BLOC(VIDE;) ,BLOC(gTRANSFORMAT_31(fichier_PARAMETRE_Z ,liste_PARAMETRE_Z ,PARAMETRE_Z_IMPLICITE ); ) ); PROCESS_ARGUMENT_C("COEFFICIENT_A=",fichier_COEFFICIENT_A ,BLOC(VIDE;) ,BLOC(gTRANSFORMAT_31(fichier_COEFFICIENT_A ,liste_COEFFICIENT_A ,COEFFICIENT_A_IMPLICITE ); ) ); PROCESS_ARGUMENT_C("COEFFICIENT_B=",fichier_COEFFICIENT_B ,BLOC(VIDE;) ,BLOC(gTRANSFORMAT_31(fichier_COEFFICIENT_B ,liste_COEFFICIENT_B ,COEFFICIENT_B_IMPLICITE ); ) ); PROCESS_ARGUMENT_C("COEFFICIENT_C=",fichier_COEFFICIENT_C ,BLOC(VIDE;) ,BLOC(gTRANSFORMAT_31(fichier_COEFFICIENT_C ,liste_COEFFICIENT_C ,COEFFICIENT_C_IMPLICITE ); ) ); PROCESS_ARGUMENT_C("COEFFICIENT_D=",fichier_COEFFICIENT_D ,BLOC(VIDE;) ,BLOC(gTRANSFORMAT_31(fichier_COEFFICIENT_D ,liste_COEFFICIENT_D ,COEFFICIENT_D_IMPLICITE ); ) ); PROCESS_ARGUMENT_C("COEFFICIENT_E=",fichier_COEFFICIENT_E ,BLOC(VIDE;) ,BLOC(gTRANSFORMAT_31(fichier_COEFFICIENT_E ,liste_COEFFICIENT_E ,COEFFICIENT_E_IMPLICITE ); ) ); PROCESS_ARGUMENT_C("COEFFICIENT_F=",fichier_COEFFICIENT_F ,BLOC(VIDE;) ,BLOC(gTRANSFORMAT_31(fichier_COEFFICIENT_F ,liste_COEFFICIENT_F ,COEFFICIENT_F_IMPLICITE ); ) ); 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_F("temps=""t=""T=",temps); GET_ARGUMENT_F("T1=",periode_1); GET_ARGUMENT_F("T2=",periode_2); GET_ARGUMENT_F("T3=",periode_3); GET_ARGUMENT_I("ordre_n_A=""nA=",ordre_n_A); GET_ARGUMENT_I("ordre_m_A=""mA=",ordre_m_A); GET_ARGUMENT_I("ordre_l_A=""lA=",ordre_l_A); GET_ARGUMENT_F("A=",coefficient_A); GET_ARGUMENT_I("ordre_n_B=""nB=",ordre_n_B); GET_ARGUMENT_I("ordre_m_B=""mB=",ordre_m_B); GET_ARGUMENT_I("ordre_l_B=""lB=",ordre_l_B); GET_ARGUMENT_F("B=",coefficient_B); GET_ARGUMENT_I("ordre_n_C=""nC=",ordre_n_C); GET_ARGUMENT_I("ordre_m_C=""mC=",ordre_m_C); GET_ARGUMENT_I("ordre_l_C=""lC=",ordre_l_C); GET_ARGUMENT_F("C=",coefficient_C); GET_ARGUMENT_I("ordre_n_D=""nD=",ordre_n_D); GET_ARGUMENT_I("ordre_m_D=""mD=",ordre_m_D); GET_ARGUMENT_I("ordre_l_D=""lD=",ordre_l_D); GET_ARGUMENT_F("D=",coefficient_D); GET_ARGUMENT_I("ordre_n_E=""nE=",ordre_n_E); GET_ARGUMENT_I("ordre_m_E=""mE=",ordre_m_E); GET_ARGUMENT_I("ordre_l_E=""lE=",ordre_l_E); GET_ARGUMENT_F("E=",coefficient_E); GET_ARGUMENT_I("ordre_n_F=""nF=",ordre_n_F); GET_ARGUMENT_I("ordre_m_F=""mF=",ordre_m_F); GET_ARGUMENT_I("ordre_l_F=""lF=",ordre_l_F); GET_ARGUMENT_F("F=",coefficient_F); GET_ARGUMENT_L("spheriques=",calculer_la_probabilite_en_coordonnees_spheriques); GET_ARGUMENT_F("tr=""Tr=",translation_du_carre_du_rayon); 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); ) ); #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. */ EGAL(plus_grand_des_ordres_n ,MAX3(MAX1(ordre_n_A) ,MAX2(ordre_n_B,ordre_n_C) ,MAX3(ordre_n_D,ordre_n_E,ordre_n_F) ) ); /* Plus grand des 6 ordres 'n' relatifs aux 6 fonctions propres 'A', 'B', 'C', 'D, 'E' et */ /* 'F' lorsque l'ajustement automatique par 'CORRECTION_DE_L_ECHELLE(...)' est demande... */ 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... */ CHANGEMENT_DU_POINT_DE_VUE_GEOMETRIQUE; /* Et ceci afin de pouvoir tourner dans le champ de densite de probabilite de presence... */ 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 des ordres 'n'... */ vTRANSFORMAT_31(temps,sPARAMETRE_TEMPS,numero_de_la_periode_courante,fichier_PARAMETRE_TEMPS); /* Definition du temps courant... */ vTRANSFORMAT_31(profondeur,sPARAMETRE_Z,numero_de_la_periode_courante,fichier_PARAMETRE_Z); /* Definition de la profondeur courante... */ vTRANSFORMAT_31(coefficient_A,sCOEFFICIENT_A,numero_de_la_periode_courante,fichier_COEFFICIENT_A); vTRANSFORMAT_31(coefficient_B,sCOEFFICIENT_B,numero_de_la_periode_courante,fichier_COEFFICIENT_B); vTRANSFORMAT_31(coefficient_C,sCOEFFICIENT_C,numero_de_la_periode_courante,fichier_COEFFICIENT_C); vTRANSFORMAT_31(coefficient_D,sCOEFFICIENT_D,numero_de_la_periode_courante,fichier_COEFFICIENT_D); vTRANSFORMAT_31(coefficient_E,sCOEFFICIENT_E,numero_de_la_periode_courante,fichier_COEFFICIENT_E); vTRANSFORMAT_31(coefficient_F,sCOEFFICIENT_F,numero_de_la_periode_courante,fichier_COEFFICIENT_F); /* Definition des coefficients 'A, 'B', 'C', 'D', 'E' et 'F' courants. */ begin_image Bblock DEFV(complexe,fonction_propre_A); DEFV(complexe,fonction_propre_B); DEFV(complexe,fonction_propre_C); DEFV(complexe,fonction_propre_D); DEFV(complexe,fonction_propre_E); DEFV(complexe,fonction_propre_F); /* Definition des six fonctions propres que l'on va combiner... */ DEFV(complexe,exponentielle_1); DEFV(complexe,exponentielle_2); DEFV(complexe,exponentielle_3); /* Definition des trois exponentielles complexes... */ DEFV(complexe,intermediaire_eA); DEFV(complexe,intermediaire_BC); DEFV(complexe,intermediaire_eBC); DEFV(complexe,intermediaire_DE); DEFV(complexe,intermediaire_DEF); DEFV(complexe,intermediaire_eDEF); DEFV(complexe,intermediaire_eA_eBC); DEFV(complexe,intermediaire_eA_eBC_eDEF); /* Definition de nombres complexes intermediaires... */ EGAL(cXf ,TRANSFORMATION_GEOMETRIQUE_3D_Fx(caXf,caYf,caZf ,ASD1(translation_de_l_origine,dx) ) ); EGAL(cYf ,TRANSFORMATION_GEOMETRIQUE_3D_Fy(caXf,caYf,caZf ,ASD1(translation_de_l_origine,dy) ) ); EGAL(cZf ,TRANSFORMATION_GEOMETRIQUE_3D_Fz(caXf,caYf,caZf ,ASD1(translation_de_l_origine,dz) ) ); /* Calcul des coordonnees cartesiennes. On notera les 'TRANSFORMATION_GEOMETRIQUE_3D' qui */ /* ne sont pas des rotations de la scene a proprement parler, mais plutot des rotations */ /* dans le champ de densite de probabilite de presence... */ 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,cTETA); EGAL(v,cPHI); /* Definition des coordonnees spheriques apres avoir defini la profondeur... */ Cinitialisation(exponentielle_1 ,COSX(DIVI(MUL2(CERCLE_TRIGONOMETRIQUE,temps),periode_1)) ,SINX(DIVI(MUL2(CERCLE_TRIGONOMETRIQUE,temps),periode_1)) ); Cinitialisation(exponentielle_2 ,COSX(DIVI(MUL2(CERCLE_TRIGONOMETRIQUE,temps),periode_2)) ,SINX(DIVI(MUL2(CERCLE_TRIGONOMETRIQUE,temps),periode_2)) ); Cinitialisation(exponentielle_3 ,COSX(DIVI(MUL2(CERCLE_TRIGONOMETRIQUE,temps),periode_3)) ,SINX(DIVI(MUL2(CERCLE_TRIGONOMETRIQUE,temps),periode_3)) ); /* Calcul des trois exponentielles complexes : */ /* */ /* 2.i.pi.t */ /* ---------- */ /* 2 */ /* 1 */ /* e */ /* */ /* */ /* 2.i.pi.t */ /* ---------- */ /* 2 */ /* 2 */ /* e */ /* */ /* */ /* 2.i.pi.t */ /* ---------- */ /* 2 */ /* 3 */ /* e */ /* */ CALCUL_EVENTUEL_D_UNE_FONCTION_PROPRE(fonction_propre_A,ordre_n_A,ordre_l_A,ordre_m_A,coefficient_A); CALCUL_EVENTUEL_D_UNE_FONCTION_PROPRE(fonction_propre_B,ordre_n_B,ordre_l_B,ordre_m_B,coefficient_B); CALCUL_EVENTUEL_D_UNE_FONCTION_PROPRE(fonction_propre_C,ordre_n_C,ordre_l_C,ordre_m_C,coefficient_C); CALCUL_EVENTUEL_D_UNE_FONCTION_PROPRE(fonction_propre_D,ordre_n_D,ordre_l_D,ordre_m_D,coefficient_D); CALCUL_EVENTUEL_D_UNE_FONCTION_PROPRE(fonction_propre_E,ordre_n_E,ordre_l_E,ordre_m_E,coefficient_E); CALCUL_EVENTUEL_D_UNE_FONCTION_PROPRE(fonction_propre_F,ordre_n_F,ordre_l_F,ordre_m_F,coefficient_F); /* Calcul des six fonctions propres que l'on va combiner, lorsque cela est necessaire... */ Cforme_lineaire(fonction_propre_A,coefficient_A,fonction_propre_A,FZERO); Cforme_lineaire(fonction_propre_B,coefficient_B,fonction_propre_B,FZERO); Cforme_lineaire(fonction_propre_C,coefficient_C,fonction_propre_C,FZERO); Cforme_lineaire(fonction_propre_D,coefficient_D,fonction_propre_D,FZERO); Cforme_lineaire(fonction_propre_E,coefficient_E,fonction_propre_E,FZERO); Cforme_lineaire(fonction_propre_F,coefficient_F,fonction_propre_F,FZERO); /* Modulation des six fonctions propres que l'on va combiner... */ Cproduit(intermediaire_eA,exponentielle_1,fonction_propre_A); /* Calcul du premier terme : */ /* */ /* 2.i.pi.t */ /* ---------- */ /* 2 */ /* 1 */ /* e .[A.PSI ] */ /* 100 */ /* */ Csomme(intermediaire_BC,fonction_propre_B,fonction_propre_C); Cproduit(intermediaire_eBC,exponentielle_2,intermediaire_BC); /* Calcul du deuxieme terme : */ /* */ /* 2.i.pi.t */ /* ---------- */ /* 2 */ /* 2 */ /* e .[B.PSI + C.PSI ] */ /* 200 211 */ /* */ Csomme(intermediaire_DE,fonction_propre_D,fonction_propre_E); Csomme(intermediaire_DEF,intermediaire_DE,fonction_propre_F); Cproduit(intermediaire_eDEF,exponentielle_3,intermediaire_DEF); /* Calcul du troisieme terme : */ /* */ /* 2.i.pi.t */ /* ---------- */ /* 2 */ /* 3 */ /* e .[D.PSI + E.PSI + F.PSI ] */ /* 300 311 322 */ /* */ Csomme(intermediaire_eA_eBC,intermediaire_eA,intermediaire_eBC); Csomme(intermediaire_eA_eBC_eDEF,intermediaire_eA_eBC,intermediaire_eDEF); /* Enfin, calcul de la combinaison lineaire, */ CALCUL_D_UNE_DENSITE_DE_PROBABILITE_DE_PRESENCE_QUELCONQUE(intermediaire_eA_eBC_eDEF); /* Et du carre de son module... */ 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(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 20080602135139 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(FreC(nom_image)); 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 du carre du module de la combinaison lineaire : (min,max) = (%g,%g)\n\n" ,niveau_minimum_de_la_sequence ,niveau_maximum_de_la_sequence ) ); Eblock ATes Bblock Eblock ETes Test(EST_VRAI(les_images_sont_standards)) Bblock /* Cas ou l'on genere des images de type 'image' : */ 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... */ 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 20080602135139 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 PRINT_ERREUR("le fichier recupere n'existe pas, ou n'est pas de type 'image'"); Eblock ETes CALZ(FreC(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