/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*       D I F F U S I O N   B I D I M E N S I O N N E L L E  :                                                                      */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xci/diffus_2D.21$K' :                                                                                          */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 20070207142910).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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
#include  image_image_IMAGESF_EXT

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P A R A M E T R E S  :                                                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xci/sequence.01.I"

#define   MARQUER_LES_PARTICULES_LORS_DE_LA_DIFFUSION                                                                                   \
                    FAUX                                                                                                                \
                                        /* Doit-on marquer la diffusion ('VRAI') ou pas ('FAUX') ? Cela fut introduit le             */ \
                                        /* 20070308094727 afin de permettre le suivi quasi-individuel de chaque particule...         */

#define   GENERER_LES_CONDITIONS_INITIALES                                                                                              \
                    VRAI                                                                                                                \
                                        /* Doit-on generer les conditions initiales en tant que premiere image ('VRAI') ou bien      */ \
                                        /* le premier resultat du modele ('FAUX') ?                                                  */

#define   IMPOSER_LES_EXTREMA_DES_CONDITIONS_INITIALES                                                                                  \
                    FAUX                                                                                                                \
                                        /* Faut-il imposer ('VRAI') ou pas ('FAUX') les extrema des conditions initiales ?           */
#define   EDITER_LES_EXTREMA_DES_CONDITIONS_INITIALES                                                                                   \
                    FAUX                                                                                                                \
                                        /* Faut-il editer les extrema des des conditions initiales, ('VRAI') ou pas ('FAUX') ?       */

#define   NOMBRE_MINIMAL_D_ITERATIONS                                                                                                   \
                    ZERO                                                                                                                \
                                        /* Nombre minimal d'iterations utilise dans le cas ou c'est le temps ou le pas de temps      */ \
                                        /* qui est utilise pour stopper les iterations.                                              */
#define   NOMBRE_MAXIMAL_D_ITERATIONS                                                                                                   \
                    UN                                                                                                                  \
                                        /* Nombre maximal d'iterations.                                                              */

#define   CONSTANTE_DE_BOLTZMANN_ETCHE______COTES_2D                                                                                    \
                    FU                                                                                                                  \
                                        /* Afin de simplifier l'utilisation et eviter les echelles physiques.                        */
#define   TEMPERATURE_GLOBALE                                                                                                           \
                    FU                                                                                                                  \
                                        /* Temperature globale.                                                                      */

#define   GRAINE_INITIALE_DE_SELECTION_DES_POINTS_A_DIFFUSER                                                                            \
                    TROIS                                                                                                               \
                                        /* Pour choisir les points a diffuser.                                                       */
#define   GRAINE_INITIALE_DE_SELECTION_DES_DIRECTIONS_DE_DIFFUSION                                                                      \
                    SEPT                                                                                                                \
                                        /* Pour choisir les points a diffuser.                                                       */

#define   EDITER_QUELQUES_NOMBRES_UTILES                                                                                                \
                    FAUX                                                                                                                \
                                        /* Faut-il editer le nombre des points de la mer, de la terre et ayant diffuses ('VRAI')     */ \
                                        /* ou pas ('FAUX') ? Ceci fut introduit le 20070208140326...                                 */
#define   NOMBRE_DE_CHIFFRES_A_EDITER                                                                                                   \
                    NOMBRE_DE_CHIFFRES                                                                                                  \
                                        /* Nombre de chiffres a editer pour les numeros d'image (introduit le 20070208140326).       */

#define   EDITER_L_EVENTUELLE_GRAINE_INITIALE_SUIVANTE                                                                                  \
                    FAUX                                                                                                                \
                                        /* Doit-on editer ('VRAI') ou pas ('FAUX') la graine a re-injecter dans le modele pour       */ \
                                        /* poursuivre de facon coherente la generation ?                                             */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M A C R O S   U T I L E S  :                                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xci/Verhulst.01.I"

#define   INCREMENT_DES_GRAINES                                                                                                         \
                    CENT_MILLE                                                                                                          \
                                        /* Pour incrementer les graines du generateur aleatoire apres chaque iteration.              */

#define   TITRE_graine_initiale_de_selection_des_points_a_diffuser                                                                      \
                    "Pgraine="
#define   TITRE_graine_initiale_de_selection_des_directions_de_diffusion                                                                \
                    "Dgraine="
#define   TITRE_graine_initiale_de_shuffling_de_X                                                                                       \
                    "Xgraine="
#define   TITRE_graine_initiale_de_shuffling_de_Y                                                                                       \
                    "Ygraine="
                                        /* Titres utiles.                                                                            */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*       D I F F U S I O N   B I D I M E N S I O N N E L L E  :                                                                      */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(CHAR,INIC(POINTERc(nom_imageR),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_imageRM),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_imageA),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_imageAM),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_imageS),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_imageSM),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_imageT),NOM_PIPE));

     DEFV(Int,INIT(premiere_image,PREMIERE_IMAGE));
                                        /* Numero de la premiere image,                                                              */
     DEFV(Int,INIT(derniere_image,DERNIERE_IMAGE));
                                        /* Numero de la derniere image.                                                              */
     DEFV(Int,INIT(pas_des_images,PAS_DES_IMAGES));
                                        /* Pas de passage d'un numero d'image a une autre.                                           */
     DEFV(Int,INIT(nombre_de_chiffres,NOMBRE_DE_CHIFFRES));
                                        /* Nombre de chiffres codant le numero des images de la serie...                             */
     DEFV(Int,INIT(numero_d_image,UNDEF));
                                        /* Numero de l'image courante.                                                               */

     DEFV(Logical,INIT(marquer_les_particules_lors_de_la_diffusion,MARQUER_LES_PARTICULES_LORS_DE_LA_DIFFUSION));
                                        /* Doit-on marquer la diffusion ('VRAI') ou pas ('FAUX') ? Cela fut introduit le             */
                                        /* 20070308094727 afin de permettre le suivi quasi-individuel de chaque particule...         */

     DEFV(Logical,INIT(generer_les_conditions_initiales,GENERER_LES_CONDITIONS_INITIALES));
                                        /* Doit-on generer les conditions initiales en tant que premiere image ('VRAI') ou bien      */
                                        /* le premier resultat du modele ('FAUX') ?                                                  */

     DEFV(Logical,INIT(imposer_les_extrema_des_conditions_initiales,IMPOSER_LES_EXTREMA_DES_CONDITIONS_INITIALES));
                                        /* Faut-il imposer ('VRAI') ou pas ('FAUX') les extrema des conditions initiales ?           */
     DEFV(Logical,INIT(editer_les_extrema_des_conditions_initiales,EDITER_LES_EXTREMA_DES_CONDITIONS_INITIALES));
                                        /* Faut-il editer les extrema des des conditions initiales, ('VRAI') ou pas ('FAUX') ?       */

     DEFV(Positive,INIT(nombre_minimal_d_iterations,NOMBRE_MINIMAL_D_ITERATIONS));
                                        /* Nombre minimal d'iterations utilise dans le cas ou c'est le temps ou le pas de temps      */
                                        /* qui est utilise pour stopper les iterations.                                              */
     DEFV(Positive,INIT(nombre_maximal_d_iterations,NOMBRE_MAXIMAL_D_ITERATIONS));
                                        /* Nombre maximal d'iterations.                                                              */

     DEFV(Int,INIT(graine_initiale_de_selection_des_points_a_diffuser,GRAINE_INITIALE_DE_SELECTION_DES_POINTS_A_DIFFUSER));
                                        /* Pour choisir les points a diffuser.                                                       */
     DEFV(Int,INIT(graine_initiale_de_selection_des_directions_de_diffusion,GRAINE_INITIALE_DE_SELECTION_DES_DIRECTIONS_DE_DIFFUSION));
                                        /* Pour choisir les points a diffuser.                                                       */

     DEFV(Float,INIT(temperature_globale,TEMPERATURE_GLOBALE));
                                        /* Temperature globale.                                                                      */

     DEFV(Logical,INIT(editer_quelques_nombres_utiles,EDITER_QUELQUES_NOMBRES_UTILES));
                                        /* Faut-il editer le nombre des points de la mer, de la terre et ayant diffuses ('VRAI')     */
                                        /* ou pas ('FAUX') ? Ceci fut introduit le 20070208140326...                                 */
     DEFV(Int,INIT(nombre_de_chiffres_a_editer,NOMBRE_DE_CHIFFRES_A_EDITER));
                                        /* Nombre de chiffres a editer pour les numeros (introduit le 20070208140326).               */

     DEFV(Logical,INIT(editer_l_eventuelle_graine_initiale_suivante,EDITER_L_EVENTUELLE_GRAINE_INITIALE_SUIVANTE));
                                        /* Doit-on editer ('VRAI') ou pas ('FAUX') la graine a re-injecter dans le modele pour       */
                                        /* poursuivre de facon coherente la generation ?                                             */
     /*..............................................................................................................................*/
     EGAL(Idiffusion_2D_a_temperatures_locales_____constante_de_Boltzmann,CONSTANTE_DE_BOLTZMANN_ETCHE______COTES_2D);

     GET_ARGUMENTSi(nombre_d_arguments
                   ,BLOC(GET_ARGUMENT_C("imageA=""A=",nom_imageA);
                         GET_ARGUMENT_C("imageS=""S=",nom_imageS);
                         GET_ARGUMENT_C("imageT=""T=",nom_imageT);
                         GET_ARGUMENT_C("imageR=""R=",nom_imageR);

                         GET_ARGUMENT_C("imageAM=""AM=",nom_imageAM);
                         GET_ARGUMENT_C("imageSM=""SM=",nom_imageSM);
                         GET_ARGUMENT_C("imageRM=""RM=",nom_imageRM);

                         GET_ARGUMENT_I("premiere=",premiere_image);
                         GET_ARGUMENT_I("derniere=",derniere_image);
                         GET_ARGUMENT_I("pas=",pas_des_images);
                         GET_ARGUMENT_I("chiffres=",nombre_de_chiffres);

                         GET_ARGUMENT_L("marquer_particules=""marquer_diffusion=""marquer="
                                       ,marquer_les_particules_lors_de_la_diffusion
                                        );
                         GET_ARGUMENT_P("mm=""marqueur_mer="
                                       ,Idiffusion_2D_a_temperatures_locales_____marqueur_des_cases_de_la___mer
                                        );
                                        /* Parametres introduits le 20070308143719...                                                */

                         GET_ARGUMENT_L("initiales=",generer_les_conditions_initiales);

                         GET_ARGUMENT_L("periodiser_X=""periodX=",Idiffusion_2D_a_temperatures_locales_____periodiser_X);
                         GET_ARGUMENT_L("periodiser_Y=""periodY=",Idiffusion_2D_a_temperatures_locales_____periodiser_Y);
                         GET_ARGUMENT_L("symetriser_X=""symetrX=",Idiffusion_2D_a_temperatures_locales_____symetriser_X);
                         GET_ARGUMENT_L("symetriser_Y=""symetrY=",Idiffusion_2D_a_temperatures_locales_____symetriser_Y);
                         GET_ARGUMENT_L("prolonger_X=""prolX=",Idiffusion_2D_a_temperatures_locales_____prolonger_X);
                         GET_ARGUMENT_L("prolonger_Y=""prolY=",Idiffusion_2D_a_temperatures_locales_____prolonger_Y);
                         GET_ARGUMENT_P("niveau_hors_image=""niveau=",Idiffusion_2D_a_temperatures_locales_____niveau_hors_image);

                         GET_ARGUMENT_I("npasX=""nX=""NpasX=""NX="
                                       ,Idiffusion_2D_a_temperatures_locales_____nombre_de_pasX
                                        );
                         GET_ARGUMENT_I("npasY=""nY=""NpasY=""NY="
                                       ,Idiffusion_2D_a_temperatures_locales_____nombre_de_pasY
                                        );
                                        /* Parametres introduits le 20070313155117...                                                */

                         GET_ARGUMENT_L("shuffler=",Idiffusion_2D_a_temperatures_locales_____shuffler_les_coordonnees);
                         GET_ARGUMENT_I(TITRE_graine_initiale_de_shuffling_de_X
                                       ,Idiffusion_2D_a_temperatures_locales_____graine_de_shuffling_de_X
                                        );
                         GET_ARGUMENT_I(TITRE_graine_initiale_de_shuffling_de_Y
                                       ,Idiffusion_2D_a_temperatures_locales_____graine_de_shuffling_de_Y
                                        );
                                        /* Parametres introduits le 20070210085909...                                                */

                         GET_ARGUMENT_L("reinjecter_source=""reinjecter="
                                       ,Idiffusion_2D_a_temperatures_locales_____reinjecter_la_Source_a_chaque_iteration
                                        );
                                        /* Parametres introduits le 20070212120033...                                                */

                         GET_ARGUMENT_L("imposer_extrema=""extrema=",imposer_les_extrema_des_conditions_initiales);
                         GET_ARGUMENT_P("mer=",Idiffusion_2D_a_temperatures_locales_____niveau_de_la___mer);
                         GET_ARGUMENT_P("mer_nouvelle=",Idiffusion_2D_a_temperatures_locales_____niveau_de_la___mer_nouvelle_nee);
                         GET_ARGUMENT_P("terre_nouvelle=",Idiffusion_2D_a_temperatures_locales_____niveau_de_la_terre_nouvelle_nee);
                         GET_ARGUMENT_P("terre=",Idiffusion_2D_a_temperatures_locales_____niveau_de_la_terre);
                         GET_ARGUMENT_L("editer_extrema=",editer_les_extrema_des_conditions_initiales);

                         GET_ARGUMENT_I("minimum_iterations=",nombre_minimal_d_iterations);
                         GET_ARGUMENT_I("ni=""maximum_iterations=""iterations=",nombre_maximal_d_iterations);

                         GET_ARGUMENT_I(TITRE_graine_initiale_de_selection_des_points_a_diffuser
                                       ,graine_initiale_de_selection_des_points_a_diffuser
                                        );
                         GET_ARGUMENT_I(TITRE_graine_initiale_de_selection_des_directions_de_diffusion
                                       ,graine_initiale_de_selection_des_directions_de_diffusion
                                        );

                         GET_ARGUMENT_L("editer_nombres=",editer_quelques_nombres_utiles);
                         GET_ARGUMENT_I("nombre=""nc=",nombre_de_chiffres_a_editer);
                                        /* Parametres introduits le 20070208140326...                                                */

                         GET_ARGUMENT_L("editer_graine=",editer_l_eventuelle_graine_initiale_suivante);

                         GET_ARGUMENT_F("frequence=""f=",Idiffusion_2D_a_temperatures_locales_____frequence_de_la_diffusion);

                         GET_ARGUMENT_F("energie_minimale=""em=",Idiffusion_2D_a_temperatures_locales_____energie_minimale);
                         GET_ARGUMENT_F("energie_maximale=""eM=",Idiffusion_2D_a_temperatures_locales_____energie_maximale);
                         GET_ARGUMENT_F("lambda=",Idiffusion_2D_a_temperatures_locales_____lambda);

                         GET_ARGUMENT_F("temperature=""t=",temperature_globale);
                         )
                    );

     begin_nouveau_block
          Bblock
          DEFV(Int,INIT(graine_courante_de_selection_des_points_a_diffuser
                       ,graine_initiale_de_selection_des_points_a_diffuser
                        )
               );
          DEFV(Int,INIT(graine_courante_de_selection_des_directions_de_diffusion
                       ,graine_initiale_de_selection_des_directions_de_diffusion
                        )
               );
                                        /* Pour choisir les points a diffuser.                                                       */

          CALi(Inoir(ImageR));
                                        /* Initialisation de l'image Resultat...                                                     */

          LOAD_D_UNE_IMAGE_FLOTTANTE_DE_PARAMETRAGE(IFmageA1,nom_imageT,temperature_globale,"temperature globale");

          Test(PAS_D_ERREUR(CODE_ERROR(Iload_image(ImageA1,nom_imageA))))
                                        /* Chargement de l'etat initial.                                                             */
               Bblock
               Test(PAS_D_ERREUR(CODE_ERROR(Iload_image(ImageA2,nom_imageS))))
                                        /* Chargement de la definition de la source.                                                 */
                    Bblock
                    CALS(Imove(ImageA3,ImageA1));
                    CALS(Imove(ImageA4,ImageA2));
                                        /* Initialisation des images de marquage (meme si le marquage n'est pas demande et ce pour   */
                                        /* de simples raisons d'"hygiene"...) ; cela sera en particulier plus qu'utile ci-apres      */
                                        /* dans le cas ou il y aurait des erreurs avec 'Iload_image(...)'...                         */

                    CALi(Inoir(ImageR1));
                                        /* Initialisation de l'image Resultat du marquage (meme si le marquage n'est pas demande     */
                                        /* et ce pour de simples raisons d'"hygiene"...).                                            */

                    Test(IL_FAUT(marquer_les_particules_lors_de_la_diffusion))
                                        /* Test introduit le 20070308094727...                                                       */
                         Bblock
                         Test(PAS_D_ERREUR(CODE_ERROR(Iload_image(ImageA3,nom_imageAM))))
                                        /* Chargement de l'etat initial de marquage...                                               */
                              Bblock
                              Test(PAS_D_ERREUR(CODE_ERROR(Iload_image(ImageA4,nom_imageSM))))
                                        /* Chargement de la definition de la source de marquage...                                   */
                                   Bblock
                                   Eblock
                              ATes
                                   Bblock
                                   Test__CODE_ERREUR__ERREUR07;
                                   Eblock
                              ETes
                              Eblock
                         ATes
                              Bblock
                              Test__CODE_ERREUR__ERREUR07;
                              Eblock
                         ETes
                         Eblock
                    ATes
                         Bblock
                         Eblock
                    ETes

                    Test(IL_NE_FAUT_PAS(imposer_les_extrema_des_conditions_initiales))
                         Bblock
                         DEFV(pointF_2D,point_minimum);
                         DEFV(genere_p,INIT(niveau_minimum_de_ImageA1,NIVEAU_UNDEF));
                         DEFV(pointF_2D,point_maximum);
                         DEFV(genere_p,INIT(niveau_maximum_de_ImageA1,NIVEAU_UNDEF));
                                        /* Extrema du champ initial ('ImageA1').                                                     */

                         CALS(Inivo_extrema(ImageA1
                                           ,ADRESSE(niveau_minimum_de_ImageA1),ADRESSE(point_minimum)
                                           ,ADRESSE(niveau_maximum_de_ImageA1),ADRESSE(point_maximum)
                                            )
                              );
                                        /* Recherche des extrema de 'ImageA1'.                                                       */

                         EGAL(Idiffusion_2D_a_temperatures_locales_____niveau_de_la___mer,niveau_minimum_de_ImageA1);
                         EGAL(Idiffusion_2D_a_temperatures_locales_____niveau_de_la_terre,niveau_maximum_de_ImageA1);
                                        /* Mise a jour du modele : le minimum et le maximum devenant respectivement les niveaux      */
                                        /* de la mer et de la terre...                                                               */
                         Eblock
                    ATes
                         Bblock
                         Eblock
                    ETes

                    Test(IL_FAUT(editer_les_extrema_des_conditions_initiales))
                         Bblock
                         CAL3(Prme1("niveau de la mer..=%d\n",Idiffusion_2D_a_temperatures_locales_____niveau_de_la___mer));
                         CAL3(Prme1("niveau de la terre=%d\n",Idiffusion_2D_a_temperatures_locales_____niveau_de_la_terre));
                                        /* Edition des extrema de 'ImageA1'.                                                         */
                         Eblock
                    ATes
                         Bblock
                         Eblock
                    ETes

                    DoIn(numero_d_image,premiere_image,derniere_image,pas_des_images)
                         Bblock
                         DEFV(CHAR,INIC(POINTERc(nom_imagesR),NOM_PIPE));

                         Test(IFET(IL_FAUT(generer_les_conditions_initiales),IFEQ(numero_d_image,premiere_image)))
                              Bblock
                              CALS(Imove(ImageR,ImageA1));
                              CALS(Imove(ImageR1,ImageA3));
                              Eblock
                         ATes
                              Bblock
                              Repe(nombre_maximal_d_iterations)
                                   Bblock
                                   Test(IL_FAUT(editer_quelques_nombres_utiles))
                                        Bblock
                                        CAL3(Prme3("iteration %d de l'image %0*d :"
                                                  ,compteur_des_repetitions_du_Repe
                                                  ,nombre_de_chiffres_a_editer
                                                  ,numero_d_image
                                                   )
                                             );
                                        /* Edition introduite le 20070208140326...                                                   */
                                        Eblock
                                   ATes
                                        Bblock
                                        Eblock
                                   ETes

                                   CALS(Idiffusion_2D_a_temperatures_locales(ImageR,ImageR1
                                                                            ,ImageA1,ImageA3
                                                                            ,ImageA2,ImageA4
                                                                            ,IFmageA1
                                                                            ,graine_initiale_de_selection_des_points_a_diffuser
                                                                            ,graine_initiale_de_selection_des_directions_de_diffusion
                                                                            ,editer_quelques_nombres_utiles
                                                                             )
                                        );
                                        /* Et calcul de la generation suivante, avec :                                               */
                                        /*                                                                                           */
                                        /*                  temperature_locale          = IFmageA1                                   */
                                        /*                                                                                           */

                                   Test(IZEQ(Idiffusion_2D_a_temperatures_locales_____nombre_de_points_diffuses))
                                        /* Test introduit le 20070208135408...                                                       */
                                        Bblock
                                        PRINT_ERREUR("il n'y a pas eu de points diffuses");
                                        /* Message redondant avec 'v $xiii/di_image$FON PRINT_ERREUR..il.n.y.a.pas.eu.de.points.d'.  */
                                        CAL1(Prer1("(nous en sommes a l'image numero %d)\n",numero_d_image));
                                        Eblock
                                   ATes
                                        Bblock
                                        Eblock
                                   ETes

                                   INCR(graine_courante_de_selection_des_points_a_diffuser,INCREMENT_DES_GRAINES);
                                   INCR(graine_courante_de_selection_des_directions_de_diffusion,INCREMENT_DES_GRAINES);
                                        /* Progression des graines du generateur aleatoire puisqu'etant fonction de {X,Y}, il est    */
                                        /* fondamental qu'a l'iteration suivante, il ne redonne pas la meme serie...                 */

                                   Test(IL_FAUT(Idiffusion_2D_a_temperatures_locales_____shuffler_les_coordonnees))
                                        /* Sequence introduite le 20070210085909...                                                  */
                                        Bblock
                                        INCR(Idiffusion_2D_a_temperatures_locales_____graine_de_shuffling_de_X,INCREMENT_DES_GRAINES);
                                        INCR(Idiffusion_2D_a_temperatures_locales_____graine_de_shuffling_de_Y,INCREMENT_DES_GRAINES);
                                        /* Progression des graines du generateur aleatoire puisqu'etant fonction de {X,Y}, il est    */
                                        /* fondamental qu'a l'iteration suivante, il ne redonne pas la meme serie...                 */
                                        Eblock
                                   ATes
                                        Bblock
                                        Eblock
                                   ETes

                                   CALS(Imove(ImageA1,ImageR));
                                   CALS(Imove(ImageA3,ImageR1));
                                        /* Preparation de l'iteration suivante...                                                    */
                                   Eblock
                              ERep
                              Eblock
                         ETes

                         EGAL(nom_imagesR
                             ,chain_Aconcaten2_sauf_nom_pipe(nom_imageR
                                                            ,chain_numero(numero_d_image,nombre_de_chiffres)
                                                             )
                              );
                         CALi(Iupdate_image(nom_imagesR,ImageR));
                         CALZ_FreCC(nom_imagesR);

                         Test(IL_FAUT(marquer_les_particules_lors_de_la_diffusion))
                                        /* Test introduit le 20070308094727...                                                       */
                              Bblock
                              DEFV(CHAR,INIC(POINTERc(nom_imagesRM),NOM_PIPE));

                              EGAL(nom_imagesRM
                                  ,chain_Aconcaten2_sauf_nom_pipe(nom_imageRM
                                                                 ,chain_numero(numero_d_image,nombre_de_chiffres)
                                                                  )
                                   );
                              CALi(Iupdate_image(nom_imagesRM,ImageR1));
                              CALZ_FreCC(nom_imagesRM);
                              Eblock
                         ATes
                              Bblock
                              Eblock
                         ETes
                         Eblock
                    EDoI

                    Test(IL_FAUT(editer_l_eventuelle_graine_initiale_suivante))
                         Bblock
                         CAL3(Prme2("%s%d\n"
                                   ,TITRE_graine_initiale_de_selection_des_points_a_diffuser
                                   ,graine_courante_de_selection_des_points_a_diffuser
                                    )
                              );
                         CAL3(Prme2("%s%d\n"
                                   ,TITRE_graine_initiale_de_selection_des_directions_de_diffusion
                                   ,graine_courante_de_selection_des_directions_de_diffusion
                                    )
                              );

                         Test(IL_FAUT(Idiffusion_2D_a_temperatures_locales_____shuffler_les_coordonnees))
                                        /* Sequence introduite le 20070210085909...                                                  */
                              Bblock
                              CAL3(Prme2("%s%d\n"
                                        ,TITRE_graine_initiale_de_shuffling_de_X
                                        ,Idiffusion_2D_a_temperatures_locales_____graine_de_shuffling_de_X
                                         )
                                   );
                              CAL3(Prme2("%s%d\n"
                                        ,TITRE_graine_initiale_de_shuffling_de_Y
                                        ,Idiffusion_2D_a_temperatures_locales_____graine_de_shuffling_de_Y
                                         )
                                   );
                              Eblock
                         ATes
                              Bblock
                              Eblock
                         ETes
                         Eblock
                    ATes
                         Bblock
                         Eblock
                    ETes
                    Eblock
               ATes
                    Bblock
                    Test__CODE_ERREUR__ERREUR07;
                    Eblock
               ETes
               Eblock
          ATes
               Bblock
               Test__CODE_ERREUR__ERREUR07;
               Eblock
          ETes
          Eblock
     end_nouveau_block

     RETU_Commande;
     Eblock
ECommande



Copyright © Jean-François COLONNA, 2019-2024.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2019-2024.