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