/*************************************************************************************************************************************/
/* */
/* S I M U L A T I O N D ' U N F L U I D E I N S T A T I O N N A I R E I D E A L : */
/* */
/* */
/* .:---++--.. */
/* .. :-: o-. */
/* .-#. .**. .-. ...:.:-:..+. */
/* -. :*-o-*oo*: -: --. -: .+- -+. */
/* o :o -+# .-. +: o: +. *. */
/* .: .o .+* .:. o. *. o. .: */
/* - - o* # * #. : -. */
/* .. :. .+o *. *: *. .:. */
/* .o :. .+o #. o- +. *. */
/* .o -+. .++ oo .*+#*-. o. */
/* .+ .--:....:+*+ +*: .*: */
/* .+. .-:. -#o .-oo+-:o: */
/* .-o. .--:. .o##*+-+o*#+:. */
/* .... */
/* */
/* */
/* Author of '$xrk/fluide_2D.11$K' : */
/* */
/* Jean-Francois COLONNA (LACTAMME, 1992??????????). */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* 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_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 S D E B A S E E T U N I V E R S E L L E S : */
/* */
/*************************************************************************************************************************************/
#include xrk/attractor.11.I"
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* 3 */
/* D E F I N I T I O N D E L ' E S P A C E P H Y S I Q U E D A N S R ( D E B U T ) : */
/* */
/* */
/* Nota : */
/* */
/* Les extrema des coordonnees {x,y,z} */
/* ainsi que ceux de leurs differentielles */
/* {dx,dy,dz} sont fixees un peu arbitrairement */
/* et sans etre parametrees. */
/* */
/* */
/*************************************************************************************************************************************/
#define hXmin_ESPACE \
PARE(-2.0)
#define hYmin_ESPACE \
PARE(-2.0)
#define hZmin_ESPACE \
PARE(-2.0)
/* Definition du "coin" inferieur-gauche-arriere de l'espace physique. */
#define hXmax_ESPACE \
PARE(2.0)
#define hYmax_ESPACE \
PARE(2.0)
#define hZmax_ESPACE \
PARE(2.0)
/* Definition du "coin" superieur-droite-avant de l'espace physique. */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* 3 */
/* D E F I N I T I O N D E L ' E S P A C E P H Y S I Q U E D A N S R ( D E B U T ) : */
/* */
/*************************************************************************************************************************************/
#include xrk/attractor.12.I"
#define dXmin_ESPACE \
PARE(-0.30)
#define dYmin_ESPACE \
PARE(-0.34)
#define dZmin_ESPACE \
PARE(0.00)
/* Definition des minima des differentielles {dx,dy,dz}. */
#define dXmax_ESPACE \
PARE(0.30)
#define dYmax_ESPACE \
PARE(0.34)
#define dZmax_ESPACE \
PARE(1.00)
/* Definition des maxima des differentielles {dx,dy,dz}. */
#include xrk/attractor.1D.I"
/* Formules de renormalisation des differentielles dans [0,1] ; elles sont utilisees lorsque */
/* la production d'images en couleurs est demandee (voir 'visualiser_en_RVB'). */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D E S D I F F E R E N T S E S P A C E S E T D E L ' E F F E T D E B R U M E : */
/* */
/*************************************************************************************************************************************/
#include xrk/attractor.13.I"
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* A I D E A U C A D R A G E D E S I M A G E S : */
/* */
/*************************************************************************************************************************************/
#include xrk/attractor.1C.I"
DONNEES_DE_RECHERCHE_DES_EXTREMA_DES_COORDONNEES_ET_DES_DERIVEES
/* Definition des extrema des coordonnees et des derivees. On notera bien l'absence de */
/* point-virgule apres 'DONNEES_DE_RECHERCHE_DES_EXTREMA_DES_COORDONNEES_ET_DES_DERIVEES'. */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* G E N E R A T I O N D E S I M A G E S : */
/* */
/*************************************************************************************************************************************/
#define VISUALISER_LES_DEUX_TOURBILLONS \
FAUX
DEFV(Local,DEFV(Logical,INIT(visualiser_les_deux_tourbillons,VISUALISER_LES_DEUX_TOURBILLONS)));
/* Indique si l'on visualise les deux tourbillons ('VRAI') en plus de la particule, ou */
/* uniquement la particule ('FAUX'). */
#define COMPOSANTE_ROUGE_FORCEE_DES_ITERATIONS \
FU
#define COMPOSANTE_VERTE_FORCEE_DES_ITERATIONS \
FU
#define COMPOSANTE_BLEUE_FORCEE_DES_ITERATIONS \
FZERO
DEFV(Local,DEFV(Float,INIT(composante_ROUGE_forcee_des_iterations,COMPOSANTE_ROUGE_FORCEE_DES_ITERATIONS)));
DEFV(Local,DEFV(Float,INIT(composante_VERTE_forcee_des_iterations,COMPOSANTE_VERTE_FORCEE_DES_ITERATIONS)));
DEFV(Local,DEFV(Float,INIT(composante_BLEUE_forcee_des_iterations,COMPOSANTE_BLEUE_FORCEE_DES_ITERATIONS)));
/* Definition du coloriage des iterations lorsque les deux tourbillons sont aussi a */
/* visualiser ; en effet, il est alors impossible d'utiliser {dcx,dcy,dcz} pour ce faire, */
/* car quel niveau alors attribuer aux tourbillons puisqu'on ne connait pas les intervalles */
/* de variation des trois differentielles. La solution est donc alors de forcer la couleur. */
#define COMPOSANTE_ROUGE_FORCEE_DES_DEUX_TOURBILLONS \
FU
#define COMPOSANTE_VERTE_FORCEE_DES_DEUX_TOURBILLONS \
FU
#define COMPOSANTE_BLEUE_FORCEE_DES_DEUX_TOURBILLONS \
FU
DEFV(Local,DEFV(Float,INIT(composante_ROUGE_forcee_des_deux_tourbillons,COMPOSANTE_ROUGE_FORCEE_DES_DEUX_TOURBILLONS)));
DEFV(Local,DEFV(Float,INIT(composante_VERTE_forcee_des_deux_tourbillons,COMPOSANTE_VERTE_FORCEE_DES_DEUX_TOURBILLONS)));
DEFV(Local,DEFV(Float,INIT(composante_BLEUE_forcee_des_deux_tourbillons,COMPOSANTE_BLEUE_FORCEE_DES_DEUX_TOURBILLONS)));
/* Definition du coloriage des deux tourbillons lorsqu'ils sont visualises... */
#define COMPOSANTE_ROUGE_DES_ITERATIONS \
COND(IL_NE_FAUT_PAS(visualiser_les_deux_tourbillons),dcx,composante_ROUGE_forcee_des_iterations)
#define COMPOSANTE_VERTE_DES_ITERATIONS \
COND(IL_NE_FAUT_PAS(visualiser_les_deux_tourbillons),dcy,composante_VERTE_forcee_des_iterations)
#define COMPOSANTE_BLEUE_DES_ITERATIONS \
COND(IL_NE_FAUT_PAS(visualiser_les_deux_tourbillons),dcz,composante_BLEUE_forcee_des_iterations)
/* Definition du coloriage effectif des iterations. */
#include xrv/champs_5.14.I"
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N S G E N E R A L E S R E L A T I V E S A L A V I S U A L I S A T I O N : */
/* */
/*************************************************************************************************************************************/
#define DCT \
FRA1(FRA2(FU))
DEFV(Local,DEFV(Float,INIT(dct,DCT)));
/* Definition de 'dt'. */
#include xrk/attractor.14.I"
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* F O N C T I O N D E M E M O R I S A T I O N D U P O I N T C O U R A N T : */
/* */
/*************************************************************************************************************************************/
#include xrk/attractor.16.I"
#define RAYON_DE_VISUALISATION \
FRA2(FRA10(FU))
DEFV(Local,DEFV(Float,INIT(rayon_de_visualisation,RAYON_DE_VISUALISATION)));
/* Rayon du disque materialisant une iteration. */
BFonctionI
DEFV(Local,DEFV(FonctionI,memorisation_1_point_07(AXf,AYf,AZf,AdXf,AdYf,AdZf,numero_de_l_iteration_courante)))
DEFV(Argument,DEFV(Float,AXf));
DEFV(Argument,DEFV(Float,AYf));
DEFV(Argument,DEFV(Float,AZf));
/* Definition de la position {x,y,z} de l'iteration courante. */
DEFV(Argument,DEFV(Float,AdXf));
DEFV(Argument,DEFV(Float,AdYf));
DEFV(Argument,DEFV(Float,AdZf));
/* Definition des differentielles {dx,dy,dz} de la position de l'iteration courante. */
DEFV(Argument,DEFV(Int,numero_de_l_iteration_courante));
/* Numero de l'iteration courante afin d'attenuer eventuellement la luminance des points */
/* materialisant chaque iteration en fonction de leur numero (les premieres iterations etant */
/* plus sombres, et les dernieres etant plus lumineuses). */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
#include xrk/attractor.15.I"
INIT_ERROR;
/*..............................................................................................................................*/
MEMORISATION_DU_POINT_COURANT(X_DERIVEE_DANS_01(AdXf)
,Y_DERIVEE_DANS_01(AdYf)
,Z_DERIVEE_DANS_01(AdZf)
);
/* Memorisation du point courant en Noir et Blanc ou en Couleurs, mais uniquement s'il est */
/* visible en fonction des conditions de visualisation... */
RETU_ERROR;
Eblock
EFonctionI
/*===================================================================================================================================*/
/* :Debut_listMN_FLUIDE_INSTATIONNAIRE_BIDIMENSIONNEL_IDEAL_11: */
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D E L A S I M U L A T I O N */
/* D ' U N F L U I D E I N S T A T I O N N A I R E B I D I M E N S I O N N E L I D E A L : */
/* */
/* */
/* Definition : */
/* */
/* Il est classiquement defini par le */
/* systeme d'equations differentielles (ou */
/* 'd' denote les derivees ordinaires, et */
/* 'D', les derivees partielles) : */
/* */
/* dx DH */
/* ---- = + ---- */
/* dt Dy */
/* */
/* dy DH */
/* ---- = - ---- */
/* dt Dx */
/* */
/* z = 0 */
/* */
/* avec : */
/* */
/* 1 | 2 2| */
/* H = ------.Log(|z - w |) */
/* 2.pi | | */
/* */
/* ou 'z' et 'w' sont les deux nombres complexes suivants : */
/* */
/* z = x + i.y = [x,y] */
/* w = a + i.b = [a,b] = [1 + epsilon.cos(omega.t),0] */
/* */
/* d'ou : */
/* */
/* 1 | 2 2 2 2 | */
/* H = ------.Log[|(x - y + 2.i.x.y) - (a - b + 2.i.a.b)|] */
/* 2.pi | | */
/* */
/* 1 | 2 2 2 2 | */
/* H = ------.Log[|(x - y ) - (a - b ) + 2.i.(x.y - a.b)|] */
/* 2.pi | | */
/* __________________________________________ */
/* / 2 */
/* 1 / ( 2 2 2 2 ) 2 */
/* H = ------.Log\ / ((x - y ) - (a - b )) + 4.(x.y - a.b) */
/* 2.pi \/ ( ) */
/* */
/* 2 */
/* 1 [{ 2 2 2 2 } 2] */
/* H = ------.Log[{(x - y ) - (a - b )} + 4.(x.y - a.b) ] */
/* 4.pi [{ } ] */
/* */
/* 2 2 */
/* 1 [{ 2 2 } { 2 2 } 2 2 2 2 2] */
/* H = ------.Log[{(x - y )} + {(a - b )} - 2.(x - y ).(a - b ) + 4.(x.y - a.b) ] */
/* 4.pi [{ } { } ] */
/* */
/* 2 2 */
/* 1 [{ 2 2 } 2 2 2 2 2 { 2 2 } ] */
/* H = ------.Log[{(x - y )} - 2.(x - y ).(a - b ) + 4.(x.y - a.b) + {(a - b )} ] */
/* 4.pi [{ } { } ] */
/* */
/* 3 2 2 2 2 */
/* DH 1 4.x - 4.x.y - 4.x.(a - b ) + 8.x.y - 8.y.a.b */
/* ---- = ------.---------------------------------------------------------------------- */
/* Dx 4.pi 2 2 */
/* { 2 2 } 2 2 2 2 2 { 2 2 } */
/* {(x - y )} - 2.(x - y ).(a - b ) + 4.(x.y - a.b) + {(a - b )} */
/* { } { } */
/* */
/* 3 2 2 2 2 */
/* DH 1 4.y - 4.x .y + 4.y.(a - b ) + 8.x .y - 8.x.a.b */
/* ---- = ------.---------------------------------------------------------------------- */
/* Dy 4.pi 2 2 */
/* { 2 2 } 2 2 2 2 2 { 2 2 } */
/* {(x - y )} - 2.(x - y ).(a - b ) + 4.(x.y - a.b) + {(a - b )} */
/* { } { } */
/* */
/* ou en simplifiant : */
/* */
/* 3 { 2 2 2 } */
/* DH 1 4.x + 4.x.{y - (a - b )} - 8.y.a.b */
/* ---- = ------.---------------------------------------------------------------------- */
/* Dx 4.pi 2 2 */
/* { 2 2 } 2 2 2 2 2 { 2 2 } */
/* {(x - y )} - 2.(x - y ).(a - b ) + 4.(x.y - a.b) + {(a - b )} */
/* { } { } */
/* */
/* 3 { 2 2 2 } */
/* DH 1 4.y + 4.y.{x + (a - b )} - 8.x.a.b */
/* ---- = ------.---------------------------------------------------------------------- */
/* Dy 4.pi 2 2 */
/* { 2 2 } 2 2 2 2 2 { 2 2 } */
/* {(x - y )} - 2.(x - y ).(a - b ) + 4.(x.y - a.b) + {(a - b )} */
/* { } { } */
/* */
/* d'ou : */
/* */
/* dx DH */
/* ---- = F (x,y,z,t) = + ---- */
/* dt x Dy */
/* */
/* dy DH */
/* ---- = F (x,y,z,t) = - ---- */
/* dt y Dx */
/* */
/* z = 0 */
/* */
/* */
/* On va generaliser le nombre complexe 'w' par : */
/* */
/* w = [R + R .cos(R .t),I + I .sin(I .t)] */
/* 1 2 3 1 2 3 */
/* */
/* */
/*************************************************************************************************************************************/
/* :Fin_listMN_FLUIDE_INSTATIONNAIRE_BIDIMENSIONNEL_IDEAL_11: */
#include xrk/attractor.17.I"
dfTRANSFORMAT_31(liste_NOMBRE_D_ITERATIONS,fichier_NOMBRE_D_ITERATIONS,NOMBRE_D_ITERATIONS_IMPLICITE,NOMBRE_D_ITERATIONS)
/* Definition du fichier des nombres d'iterations. */
#define sNOMBRE_D_ITERATIONS(numero_de_la_periode) \
INTE(sTRANSFORMAT_31(numero_de_la_periode,liste_NOMBRE_D_ITERATIONS)) \
/* Formule generale definissant les variations du nombre d'iterations. */
#define WR1 \
FU
#define WR2 \
FRA10(FU)
#define WR3 \
FRA1(FU)
#define WI1 \
FZERO
#define WI2 \
FZERO
#define WI3 \
FZERO
DEFV(Local,DEFV(Float,INIT(R1,WR1)));
DEFV(Local,DEFV(Float,INIT(R2,WR2)));
DEFV(Local,DEFV(Float,INIT(R3,WR3)));
DEFV(Local,DEFV(Float,INIT(I1,WI1)));
DEFV(Local,DEFV(Float,INIT(I2,WI2)));
DEFV(Local,DEFV(Float,INIT(I3,WI3)));
/* Definition du nombre complexe 'w'. */
#define CX0 \
FRA1(FRA1(FU))
#define CY0 \
FRA1(FRA2(FU))
#define CZ0 \
FZERO
/* Definition des conditions initiales. */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* F O N C T I O N S D E V I S U A L I S A T I O N E T D ' I N T E R P O L A T I O N : */
/* */
/*************************************************************************************************************************************/
#include xrv/particule.31.I"
dfTRANSFORMAT_31(liste_COEFFICIENT_W_R1,fichier_COEFFICIENT_W_R1,COEFFICIENT_W_R1_IMPLICITE,WR1)
dfTRANSFORMAT_31(liste_COEFFICIENT_W_R2,fichier_COEFFICIENT_W_R2,COEFFICIENT_W_R2_IMPLICITE,WR2)
dfTRANSFORMAT_31(liste_COEFFICIENT_W_R3,fichier_COEFFICIENT_W_R3,COEFFICIENT_W_R3_IMPLICITE,WR3)
dfTRANSFORMAT_31(liste_COEFFICIENT_W_I1,fichier_COEFFICIENT_W_I1,COEFFICIENT_W_I1_IMPLICITE,WI1)
dfTRANSFORMAT_31(liste_COEFFICIENT_W_I2,fichier_COEFFICIENT_W_I2,COEFFICIENT_W_I2_IMPLICITE,WI2)
dfTRANSFORMAT_31(liste_COEFFICIENT_W_I3,fichier_COEFFICIENT_W_I3,COEFFICIENT_W_I3_IMPLICITE,WI3)
/* Definition des fichiers de definition du nombre complexe 'w'. */
#define sCOEFFICIENT_W_R1(numero_de_la_periode) \
FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_COEFFICIENT_W_R1))
#define sCOEFFICIENT_W_R2(numero_de_la_periode) \
FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_COEFFICIENT_W_R2))
#define sCOEFFICIENT_W_R3(numero_de_la_periode) \
FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_COEFFICIENT_W_R3))
#define sCOEFFICIENT_W_I1(numero_de_la_periode) \
FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_COEFFICIENT_W_I1))
#define sCOEFFICIENT_W_I2(numero_de_la_periode) \
FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_COEFFICIENT_W_I2))
#define sCOEFFICIENT_W_I3(numero_de_la_periode) \
FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_COEFFICIENT_W_I3))
/* Formule generale definissant les variations du nombre complexe 'w' au cours du temps. */
dfTRANSFORMAT_31(liste_VARIABLE_cx0,fichier_VARIABLE_cx0,VARIABLE_cx0_IMPLICITE,CX0)
dfTRANSFORMAT_31(liste_VARIABLE_cy0,fichier_VARIABLE_cy0,VARIABLE_cy0_IMPLICITE,CY0)
dfTRANSFORMAT_31(liste_VARIABLE_cz0,fichier_VARIABLE_cz0,VARIABLE_cz0_IMPLICITE,CZ0)
/* Definition des fichiers des valeurs initiales des trois variables (x0,y0,z0). */
#define sVARIABLE_cx0(numero_de_la_periode) \
FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_VARIABLE_cx0))
#define sVARIABLE_cy0(numero_de_la_periode) \
FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_VARIABLE_cy0))
#define sVARIABLE_cz0(numero_de_la_periode) \
FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_VARIABLE_cz0))
/* Formule generale definissant les variations des valeurs initiales des trois variables. */
dfTRANSFORMAT_31(liste_PAS_DE_TEMPS_dct,fichier_PAS_DE_TEMPS_dct,PAS_DE_TEMPS_dct_IMPLICITE,DCT)
/* Definition du fichier des pas de temps. */
#define sPAS_DE_TEMPS_dct(numero_de_la_periode) \
FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_PAS_DE_TEMPS_dct))
/* Formule generale definissant les variations du pas de temps. */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D E S T R O I S F O N C T I O N S ' F ' : */
/* */
/*************************************************************************************************************************************/
#define WR(t) \
AXPB(R2,COSX(MUL2(R3,t)),R1)
#define WI(t) \
AXPB(I2,SINX(MUL2(I3,t)),I1)
#define Wz(t) \
Zcentre_ESPACE
/* Definition du nombre complexe 'w' : */
/* */
/* w = [WR(t),WI(t)] */
/* */
/* On notera l'introduction d'une pseudo troisieme composante destinee a definir 'Fz(...)'. */
#define FACTEUR_DU_DENOMINATEUR_DES_DERIVEES_PARTIELLES_DE_L_HAMILTONIEN \
MUL2(DEUX,CERCLE_TRIGONOMETRIQUE)
#define DENOMINATEUR_DES_DERIVEES_PARTIELLES_DE_L_HAMILTONIEN(cx,cy,cz,t) \
MUL2(FACTEUR_DU_DENOMINATEUR_DES_DERIVEES_PARTIELLES_DE_L_HAMILTONIEN \
,ADD4(EXP2(SOUS(EXP2(cx),EXP2(cy))) \
,NEGA(GRO2(MUL2(SOUS(EXP2(cx),EXP2(cy)) \
,SOUS(EXP2(WR(t)),EXP2(WI(t))) \
) \
) \
) \
,GRO4(EXP2(SOUS(MUL2(cx,cy),MUL2(WR(t),WI(t))))) \
,EXP2(SOUS(EXP2(WR(t)),EXP2(WI(t)))) \
) \
) \
/* Definition du denominateur des derivees partielles de l'Hamiltonien. */
#define gFx(cx,cy,cz,t) \
NEUT(DIVZ(ADD3(GRO4(EXP3(cy)) \
,GRO4(MUL2(cy,ADD2(EXP2(cx),SOUS(EXP2(WR(t)),EXP2(WI(t)))))) \
,NEGA(GRO8(MUL3(cx,WR(t),WI(t)))) \
) \
,DENOMINATEUR_DES_DERIVEES_PARTIELLES_DE_L_HAMILTONIEN(cx,cy,cz,t) \
) \
) \
/* Definition de la fonction F (x,y,z,t). */ \
/* x */
#define gFy(cx,cy,cz,t) \
NEGA(DIVZ(ADD3(GRO4(EXP3(cx)) \
,GRO4(MUL2(cx,SOUS(EXP2(cy),SOUS(EXP2(WR(t)),EXP2(WI(t)))))) \
,NEGA(GRO8(MUL3(cy,WR(t),WI(t)))) \
) \
,DENOMINATEUR_DES_DERIVEES_PARTIELLES_DE_L_HAMILTONIEN(cx,cy,cz,t) \
) \
) \
/* Definition de la fonction F (x,y,z,t). */ \
/* y */
#define gFz(cx,cy,cz,t) \
Wz(t) \
/* Definition de la fonction F (x,y,z,t). */ \
/* z */
BFonctionF
DEFV(Local,DEFV(FonctionF,Fonction_Fx(cx,cy,cz,t)))
/* Fonction introduite le 19970404085324 pour alleger le travail de '$Cc' sur '$LACT29'... */
DEFV(Argument,DEFV(Float,cx));
DEFV(Argument,DEFV(Float,cy));
DEFV(Argument,DEFV(Float,cz));
DEFV(Argument,DEFV(Float,t));
/* Definition des coordonnees spatio-temporelles. */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
/*..............................................................................................................................*/
RETU(gFx(cx,cy,cz,t));
Eblock
EFonctionF
BFonctionF
DEFV(Local,DEFV(FonctionF,Fonction_Fy(cx,cy,cz,t)))
/* Fonction introduite le 19970404085324 pour alleger le travail de '$Cc' sur '$LACT29'... */
DEFV(Argument,DEFV(Float,cx));
DEFV(Argument,DEFV(Float,cy));
DEFV(Argument,DEFV(Float,cz));
DEFV(Argument,DEFV(Float,t));
/* Definition des coordonnees spatio-temporelles. */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
/*..............................................................................................................................*/
RETU(gFy(cx,cy,cz,t));
Eblock
EFonctionF
BFonctionF
DEFV(Local,DEFV(FonctionF,Fonction_Fz(cx,cy,cz,t)))
/* Fonction introduite le 19970404085324 pour alleger le travail de '$Cc' sur '$LACT29'... */
DEFV(Argument,DEFV(Float,cx));
DEFV(Argument,DEFV(Float,cy));
DEFV(Argument,DEFV(Float,cz));
DEFV(Argument,DEFV(Float,t));
/* Definition des coordonnees spatio-temporelles. */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
/*..............................................................................................................................*/
RETU(gFz(cx,cy,cz,t));
Eblock
EFonctionF
#define Fx(cx,cy,cz,t) \
Fonction_Fx(cx,cy,cz,t) \
/* Definition de la fonction F (x,y,z,t). */ \
/* x */
#define Fy(cx,cy,cz,t) \
Fonction_Fy(cx,cy,cz,t) \
/* Definition de la fonction F (x,y,z,t). */ \
/* y */
#define Fz(cx,cy,cz,t) \
Fonction_Fz(cx,cy,cz,t) \
/* Definition de la fonction F (x,y,z,t). */ \
/* z */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D E L ' I N T E G R A T I O N D U S Y S T E M E */
/* D ' E Q U A T I O N S D I F F E R E N T I E L L E S : */
/* */
/*************************************************************************************************************************************/
#define ORDRE_DE_LA_METHODE_D_INTEGRATION \
METHODE_DE_RUNGE_KUTTA_D_ORDRE_4
/* Mis avant 'xrk/integr.1B$vv$I' le 20070814110908... */
#include xrk/integr.1B.vv.I"
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D O N N E E S D E V I S U A L I S A T I O N " T O R I Q U E " : */
/* */
/*************************************************************************************************************************************/
#include xrk/fluide_2D.11.I"
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D E S I N I T I A L I S A T I O N S : */
/* */
/*************************************************************************************************************************************/
#include xrk/attractor.18.I"
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* S I M U L A T I O N D ' U N F L U I D E I N S T A T I O N N A I R E I D E A L : */
/* */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
/*..............................................................................................................................*/
INITIALISATIONS_GENERALES;
/* Initialisations generales faites au tout debut... */
iTRANSFORMAT_31(liste_COEFFICIENT_W_R1,COEFFICIENT_W_R1_IMPLICITE);
iTRANSFORMAT_31(liste_COEFFICIENT_W_R2,COEFFICIENT_W_R2_IMPLICITE);
iTRANSFORMAT_31(liste_COEFFICIENT_W_R3,COEFFICIENT_W_R3_IMPLICITE);
iTRANSFORMAT_31(liste_COEFFICIENT_W_I1,COEFFICIENT_W_I1_IMPLICITE);
iTRANSFORMAT_31(liste_COEFFICIENT_W_I2,COEFFICIENT_W_I2_IMPLICITE);
iTRANSFORMAT_31(liste_COEFFICIENT_W_I3,COEFFICIENT_W_I3_IMPLICITE);
/* Initialisation du nombre complexe 'w'. */
iTRANSFORMAT_31(liste_VARIABLE_cx0,VARIABLE_cx0_IMPLICITE);
iTRANSFORMAT_31(liste_VARIABLE_cy0,VARIABLE_cy0_IMPLICITE);
iTRANSFORMAT_31(liste_VARIABLE_cz0,VARIABLE_cz0_IMPLICITE);
/* Initialisation des valeurs initiales des trois variables (x0,y0,z0). */
iTRANSFORMAT_31(liste_PAS_DE_TEMPS_dct,PAS_DE_TEMPS_dct_IMPLICITE);
/* Initialisation du pas de temps. */
iTRANSFORMAT_31(liste_NOMBRE_D_ITERATIONS,NOMBRE_D_ITERATIONS_IMPLICITE);
/* Initialisation du nombre d'iterations. */
#include xrv/champs_5.1A.I"
GET_ARGUMENTSv(nombre_d_arguments
,BLOC(PROCESS_ARGUMENTS_GEOMETRIQUES;
PROCESS_ARGUMENT_FICHIER("COEFFICIENT_W_R1="
,fichier_COEFFICIENT_W_R1
,liste_COEFFICIENT_W_R1
,COEFFICIENT_W_R1_IMPLICITE
,gTRANSFORMAT_31
);
PROCESS_ARGUMENT_FICHIER("COEFFICIENT_W_R2="
,fichier_COEFFICIENT_W_R2
,liste_COEFFICIENT_W_R2
,COEFFICIENT_W_R2_IMPLICITE
,gTRANSFORMAT_31
);
PROCESS_ARGUMENT_FICHIER("COEFFICIENT_W_R3="
,fichier_COEFFICIENT_W_R3
,liste_COEFFICIENT_W_R3
,COEFFICIENT_W_R3_IMPLICITE
,gTRANSFORMAT_31
);
PROCESS_ARGUMENT_FICHIER("COEFFICIENT_W_I1="
,fichier_COEFFICIENT_W_I1
,liste_COEFFICIENT_W_I1
,COEFFICIENT_W_I1_IMPLICITE
,gTRANSFORMAT_31
);
PROCESS_ARGUMENT_FICHIER("COEFFICIENT_W_I2="
,fichier_COEFFICIENT_W_I2
,liste_COEFFICIENT_W_I2
,COEFFICIENT_W_I2_IMPLICITE
,gTRANSFORMAT_31
);
PROCESS_ARGUMENT_FICHIER("COEFFICIENT_W_I3="
,fichier_COEFFICIENT_W_I3
,liste_COEFFICIENT_W_I3
,COEFFICIENT_W_I3_IMPLICITE
,gTRANSFORMAT_31
);
PROCESS_ARGUMENT_FICHIER("VARIABLE_cx0="
,fichier_VARIABLE_cx0
,liste_VARIABLE_cx0
,VARIABLE_cx0_IMPLICITE
,gTRANSFORMAT_31
);
PROCESS_ARGUMENT_FICHIER("VARIABLE_cy0="
,fichier_VARIABLE_cy0
,liste_VARIABLE_cy0
,VARIABLE_cy0_IMPLICITE
,gTRANSFORMAT_31
);
PROCESS_ARGUMENT_FICHIER("VARIABLE_cz0="
,fichier_VARIABLE_cz0
,liste_VARIABLE_cz0
,VARIABLE_cz0_IMPLICITE
,gTRANSFORMAT_31
);
PROCESS_ARGUMENT_FICHIER("PAS_DE_TEMPS_dct="
,fichier_PAS_DE_TEMPS_dct
,liste_PAS_DE_TEMPS_dct
,PAS_DE_TEMPS_dct_IMPLICITE
,gTRANSFORMAT_31
);
PROCESS_ARGUMENT_FICHIER("NOMBRE_D_ITERATIONS="
,fichier_NOMBRE_D_ITERATIONS
,liste_NOMBRE_D_ITERATIONS
,NOMBRE_D_ITERATIONS_IMPLICITE
,gTRANSFORMAT_31
);
PROCESS_ARGUMENTS_DE_VISUALISATION;
PROCESS_ARGUMENTS_DE_VISUALISATION_DES_AXES_DE_COORDONNEES;
GET_ARGUMENT_I("n=""iterations=",nombre_d_iterations);
GET_ARGUMENT_F("dt=""dct=",dct);
GET_ARGUMENT_I("ordre=""methode=""integration=",ordre_de_la_methode_d_integration);
/* Les synonymes de "ordre=", ont ete introduits le 20060608151426... */
GET_ARGUMENT_L("tourbillons=",visualiser_les_deux_tourbillons);
GET_ARGUMENT_F("ROUGE_iterations=",composante_ROUGE_forcee_des_iterations);
GET_ARGUMENT_F("VERTE_iterations=",composante_VERTE_forcee_des_iterations);
GET_ARGUMENT_F("BLEUE_iterations=",composante_BLEUE_forcee_des_iterations);
GET_ARGUMENT_F("ROUGE_tourbillons=",composante_ROUGE_forcee_des_deux_tourbillons);
GET_ARGUMENT_F("VERTE_tourbillons=",composante_VERTE_forcee_des_deux_tourbillons);
GET_ARGUMENT_F("BLEUE_tourbillons=",composante_BLEUE_forcee_des_deux_tourbillons);
GET_ARGUMENT_L("tore=",visualiser_sur_un_tore);
GET_ARGUMENT_F("gR=",facteur_du_rayon_gR);
GET_ARGUMENT_F("pR=",facteur_du_rayon_pR);
)
);
#include xrv/champs_5.19.I"
/* Pour eviter le message : */
/* */
/* Static function is not referenced. */
/* */
/* sur 'SYSTEME_ES9000_AIX_CC'... */
#include xrk/attractor.19.I"
/* Validations et definition de l'espace physique. */
Komp(numero_de_la_periode_courante_de_la_simulation,nombre_de_periodes_de_la_simulation)
Bblock
RE_INITIALISATION_DE_L_HORLOGE;
INITIALISATIONS_RELATIVES_A_CHAQUE_NOUVELLE_IMAGE(numero_de_la_periode_courante);
/* Initialisations necessaires avant le calcul et la generation de chaque nouvelle image. */
EGAL(R1,sCOEFFICIENT_W_R1(numero_de_la_periode_courante));
EGAL(R2,sCOEFFICIENT_W_R2(numero_de_la_periode_courante));
EGAL(R3,sCOEFFICIENT_W_R3(numero_de_la_periode_courante));
EGAL(I1,sCOEFFICIENT_W_I1(numero_de_la_periode_courante));
EGAL(I2,sCOEFFICIENT_W_I2(numero_de_la_periode_courante));
EGAL(I3,sCOEFFICIENT_W_I3(numero_de_la_periode_courante));
/* Calcul de la valeur initiale du nombre complexe 'w'. */
EGAL(cx,sVARIABLE_cx0(numero_de_la_periode_courante));
EGAL(cy,sVARIABLE_cy0(numero_de_la_periode_courante));
EGAL(cz,sVARIABLE_cz0(numero_de_la_periode_courante));
/* Calcul des valeurs initiales des trois variables (x0,y0,z0). */
EGAL(dcx,FZERO);
EGAL(dcy,FZERO);
EGAL(dcz,FZERO);
/* Initialisation des differentielles pour la premiere visualisation si celle-ci a lieu */
/* en couleurs. On notera que 'FZERO' est la valeur la plus "logique"... */
vTRANSFORMAT_31(nombre_d_iterations,sNOMBRE_D_ITERATIONS,numero_de_la_periode_courante,fichier_NOMBRE_D_ITERATIONS);
/* Calcul du nombre d'iterations lorsqu'il est variable. */
vTRANSFORMAT_31(dct,sPAS_DE_TEMPS_dct,numero_de_la_periode_courante,fichier_PAS_DE_TEMPS_dct);
/* Calcul du pas de temps lorsqu'il est variable. */
Komp(numero_de_l_iteration_courante,nombre_d_iterations)
Bblock
RECHERCHE_DES_EXTREMA_DES_COORDONNEES_ET_DES_DERIVEES;
/* On notera que cette recherche n'est pas conditionnee par 'editer_les_extrema', car les */
/* extrema pourraient etre utilises pour la visualisation... */
Test(IFOU(IL_FAUT(visualiser_le_fantome)
,IFGE(numero_de_l_iteration_courante,PREMIERE_ITERATION_VISUALISEE)
)
)
Bblock
Test(IL_FAUT(visualiser_sur_un_tore))
Bblock
CALS(memorisation_1_point_07(X_DU_TORE(cx,cy,cz,temps_courant)
,Y_DU_TORE(cx,cy,cz,temps_courant)
,Z_DU_TORE(cx,cy,cz,temps_courant)
,COMPOSANTE_ROUGE_DES_ITERATIONS
,COMPOSANTE_VERTE_DES_ITERATIONS
,COMPOSANTE_BLEUE_DES_ITERATIONS
,numero_de_l_iteration_courante
)
);
/* Memorisation de l'iteration courante sur un tore.... */
Test(IL_FAUT(visualiser_les_deux_tourbillons))
Bblock
CALS(memorisation_1_point_07(X_DU_TORE(NEGA(WR(temps_courant))
,NEGA(WI(temps_courant))
,Wz(temps_courant)
,temps_courant
)
,Y_DU_TORE(NEGA(WR(temps_courant))
,NEGA(WI(temps_courant))
,Wz(temps_courant)
,temps_courant
)
,Z_DU_TORE(NEGA(WR(temps_courant))
,NEGA(WI(temps_courant))
,Wz(temps_courant)
,temps_courant
)
,composante_ROUGE_forcee_des_deux_tourbillons
,composante_VERTE_forcee_des_deux_tourbillons
,composante_BLEUE_forcee_des_deux_tourbillons
,numero_de_l_iteration_courante
)
);
CALS(memorisation_1_point_07(X_DU_TORE(NEUT(WR(temps_courant))
,NEUT(WI(temps_courant))
,Wz(temps_courant)
,temps_courant
)
,Y_DU_TORE(NEUT(WR(temps_courant))
,NEUT(WI(temps_courant))
,Wz(temps_courant)
,temps_courant
)
,Z_DU_TORE(NEUT(WR(temps_courant))
,NEUT(WI(temps_courant))
,Wz(temps_courant)
,temps_courant
)
,composante_ROUGE_forcee_des_deux_tourbillons
,composante_VERTE_forcee_des_deux_tourbillons
,composante_BLEUE_forcee_des_deux_tourbillons
,numero_de_l_iteration_courante
)
);
/* Memorisation des deux tourbillons lorsqu'ils sont visualises... */
Eblock
ATes
Bblock
Eblock
ETes
Eblock
ATes
Bblock
CALS(memorisation_1_point_07(SOUS(cx,Xcentre_ESPACE)
,SOUS(cy,Ycentre_ESPACE)
,SOUS(cz,Zcentre_ESPACE)
,COMPOSANTE_ROUGE_DES_ITERATIONS
,COMPOSANTE_VERTE_DES_ITERATIONS
,COMPOSANTE_BLEUE_DES_ITERATIONS
,numero_de_l_iteration_courante
)
);
/* Memorisation de l'iteration courante dans l'espace "normal"... */
Test(IL_FAUT(visualiser_les_deux_tourbillons))
Bblock
CALS(memorisation_1_point_07(SOUS(NEGA(WR(temps_courant)),Xcentre_ESPACE)
,SOUS(NEGA(WI(temps_courant)),Ycentre_ESPACE)
,SOUS(Wz(temps_courant),Zcentre_ESPACE)
,composante_ROUGE_forcee_des_deux_tourbillons
,composante_VERTE_forcee_des_deux_tourbillons
,composante_BLEUE_forcee_des_deux_tourbillons
,numero_de_l_iteration_courante
)
);
CALS(memorisation_1_point_07(SOUS(NEUT(WR(temps_courant)),Xcentre_ESPACE)
,SOUS(NEUT(WI(temps_courant)),Ycentre_ESPACE)
,SOUS(Wz(temps_courant),Zcentre_ESPACE)
,composante_ROUGE_forcee_des_deux_tourbillons
,composante_VERTE_forcee_des_deux_tourbillons
,composante_BLEUE_forcee_des_deux_tourbillons
,numero_de_l_iteration_courante
)
);
/* Memorisation des deux tourbillons lorsqu'ils sont visualises... */
Eblock
ATes
Bblock
Eblock
ETes
Eblock
ETes
Eblock
ATes
Bblock
Eblock
ETes
INTEGRATION_D_UN_SYSTEME_D_EQUATIONS_DIFFERENTIELLES_O1(temps_courant,dct);
/* Integration du systeme d'equations differentielles suivant la methode choisie... */
INCREMENTATION_DE_L_HORLOGE(dct);
/* Simulation du temps de la simulation... */
Eblock
EKom
#include xrk/attractor.1A.I"
VISUALISATION_DES_AXES_DE_COORDONNEES;
/* Visualisation si necessaire des trois axes de coordonnees. */
GENERATION_D_UNE_IMAGE_ET_PASSAGE_A_LA_SUIVANTE(BLOC(VIDE;));
/* Generation de l'image courante... */
Eblock
EKom
EDITION_DES_EXTREMA_DES_COORDONNEES_ET_DES_DERIVEES;
/* Edition facultative des extrema des coordonnees et des derivees. */
RETU_Commande;
Eblock
ECommande