/*************************************************************************************************************************************/
/* */
/* 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' : */
/* */
/* 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 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 \ */
/* 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 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
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_FICHIER("PARAMETRE_TEMPS="
,fichier_PARAMETRE_TEMPS
,liste_PARAMETRE_TEMPS
,PARAMETRE_TEMPS_IMPLICITE
,gTRANSFORMAT_31
);
PROCESS_ARGUMENT_FICHIER("PARAMETRE_Z="
,fichier_PARAMETRE_Z
,liste_PARAMETRE_Z
,PARAMETRE_Z_IMPLICITE
,gTRANSFORMAT_31
);
PROCESS_ARGUMENT_FICHIER("COEFFICIENT_A="
,fichier_COEFFICIENT_A
,liste_COEFFICIENT_A
,COEFFICIENT_A_IMPLICITE
,gTRANSFORMAT_31
);
PROCESS_ARGUMENT_FICHIER("COEFFICIENT_B="
,fichier_COEFFICIENT_B
,liste_COEFFICIENT_B
,COEFFICIENT_B_IMPLICITE
,gTRANSFORMAT_31
);
PROCESS_ARGUMENT_FICHIER("COEFFICIENT_C="
,fichier_COEFFICIENT_C
,liste_COEFFICIENT_C
,COEFFICIENT_C_IMPLICITE
,gTRANSFORMAT_31
);
PROCESS_ARGUMENT_FICHIER("COEFFICIENT_D="
,fichier_COEFFICIENT_D
,liste_COEFFICIENT_D
,COEFFICIENT_D_IMPLICITE
,gTRANSFORMAT_31
);
PROCESS_ARGUMENT_FICHIER("COEFFICIENT_E="
,fichier_COEFFICIENT_E
,liste_COEFFICIENT_E
,COEFFICIENT_E_IMPLICITE
,gTRANSFORMAT_31
);
PROCESS_ARGUMENT_FICHIER("COEFFICIENT_F="
,fichier_COEFFICIENT_F
,liste_COEFFICIENT_F
,COEFFICIENT_F_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_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,cTHETA);
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_FreCC(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_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