/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N S   D E   L A   G E N E R A T I O N   D E S   I M A G E S  :                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xrv/champs_5.14$I' :                                                                                           */
/*                                                                                                                                   */
/*                    Jean-Francois Colonna (LACTAMME, 1992??????????).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        G E S T I O N   D U   P A R A L L E L I S M E  :                                                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xrv/champs_5.34.I"

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        G E N E R A T I O N   D E S   T R A I N E E S  :                                                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   CONVOLUTION_D_UNE_COMPOSANTE(composante)                                                                                      \
                    Bblock                                                                                                              \
                    BLOC(VIDE;);                                                                                                        \
                    Eblock                                                                                                              \
                                        /* La convolution d'une composante n'est pas utile ici...                                    */

#define   GENERER_LES_TRAINEES                                                                                                          \
                    FAUX

#include  xrv/champs_5.LN.I"

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        S E L E C T I O N   D E S   C O M P O S A N T E S   ( P O U R   ' $xrk/lorenz.01$K ' )  :                                  */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   GENERER_LA_COMPOSANTE_ROUGE                                                                                                   \
                    VRAI
DEFV(Local,DEFV(Logical,INIT(generer_la_composante_ROUGE,GENERER_LA_COMPOSANTE_ROUGE)));
                                        /* Indique si l'on doit generer la composante ROUGE ('VRAI') ou pas ('FAUX').                */
#define   GENERER_LA_COMPOSANTE_VERTE                                                                                                   \
                    VRAI
DEFV(Local,DEFV(Logical,INIT(generer_la_composante_VERTE,GENERER_LA_COMPOSANTE_VERTE)));
                                        /* Indique si l'on doit generer la composante VERTE ('VRAI') ou pas ('FAUX').                */
#define   GENERER_LA_COMPOSANTE_BLEUE                                                                                                   \
                    VRAI
DEFV(Local,DEFV(Logical,INIT(generer_la_composante_BLEUE,GENERER_LA_COMPOSANTE_BLEUE)));
                                        /* Indique si l'on doit generer la composante BLEUE ('VRAI') ou pas ('FAUX').                */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        G E N E R A T I O N   D ' U N E   C O M P O S A N T E  :                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
DEFV(Local,DEFV(CHAR,INIT(POINTERc(nom_imageR),NOM_PIPE_Local)));
                                        /* Nom de la sequence a generer...                                                           */
DEFV(Local,DEFV(Int,INIT(nombre_de_chiffres,NOMBRE_DE_CHIFFRES)));
                                        /* Nombre de chiffres codant le numero des images de la serie...                             */
#define   TRANSLATION_DU_NUMERO_D_IMAGE                                                                                                 \
                    ZERO
DEFV(Local,DEFV(Int,INIT(translation_du_numero_d_image,TRANSLATION_DU_NUMERO_D_IMAGE)));
                                        /* Translation du numero d'image.                                                            */

#define   NUMERO_IMAGE(numero_image)                                                                                                    \
                    chain_numero(ADD2(numero_image,translation_du_numero_d_image),nombre_de_chiffres)                                   \
                                        /* Numero caracteristique d'une image.                                                       */

#define   TEMPORISATION_D_ATTENTE_D_ESPACE_DISQUE                                                                                       \
                    DEUX                                                                                                                \
                                        /* Lorsqu'il n'y a pas suffisamment d'espace-disque de libre, on attend un certain temps     */ \
                                        /* avant de renouveler le test...                                                            */

#define   GENERATION_D_UNE_COMPOSANTE(nom_de_la_composante,image,generer_la_composante)                                                 \
                    Bblock                                                                                                              \
                    Test(IL_FAUT(generer_la_composante))                                                                                \
                         Bblock                                                                                                         \
                         Test(IFDI(ptCARA(image),ptCARA(Z_Buffer)))                                                                     \
                              Bblock                                                                                                    \
                              CALi(Iupdate_image(nom_de_la_composante,ConversionEventuelle_CHAR(image)));                               \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              CALi(IupdateF_image(nom_de_la_composante,ConversionEventuelle_Float(image)));                             \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                                        /* Les procedures 'ConversionEventuelle_CHAR(...)' et 'ConversionEventuelle_Float(...)'      */ \
                                        /* ont ete introduites le 20040619191401...                                                  */ \
                                        /*                                                                                           */ \
                                        /* On notera que jusqu'au 20061204120809, lors d'erreur d'ecriture des composantes, il       */ \
                                        /* avait bouclage tant que l'erreur subsistait. Cela avait ete mis en place il y a tres      */ \
                                        /* longtemps, du temps ou il y avait peu de place sur les disques. Aujourd'hui, cela ne      */ \
                                        /* se justifie plus, d'autant plus que les erreurs rencontrees sont bien plus souvent        */ \
                                        /* des erreurs qui ne disparaissent pas spontanement (cas des composantes en mode            */ \
                                        /* '$READ_ONLY' par exemple...).                                                             */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Generation d'une composante d'une image de nom donne...                                   */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        G E N E R A T I O N   D ' U N E   I M A G E   " T R I - C O M P O S A N T E "  :                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   GENERATION_D_UNE_IMAGE(numero_image)                                                                                          \
                    Bblock                                                                                                              \
                    Test(IFNE_chaine(nom_imageR,NOM_PIPE_Local))                                                                        \
                                        /* ATTENTION : la generation n'a lieu que si un nom a ete donne explicitement...             */ \
                         Bblock                                                                                                         \
                         DEFV(CHAR,INIT(POINTERc(nom_temporaire_de_la_composante_ROUGE),NOM_UNDEF));                                    \
                         DEFV(CHAR,INIT(POINTERc(nom_temporaire_de_la_composante_VERTE),NOM_UNDEF));                                    \
                         DEFV(CHAR,INIT(POINTERc(nom_temporaire_de_la_composante_BLEUE),NOM_UNDEF));                                    \
                                        /* Nom des trois composantes...                                                              */ \
                                                                                                                                        \
                         CUMUL_D_UNE_COMPOSANTE_POUR_LE_CALCUL_DES_TRAINEES(Image_ROUGE                                                 \
                                                                           ,TRAINEES_ROUGE                                              \
                                                                           ,trainee_du_ROUGE_avant                                      \
                                                                           ,trainee_du_ROUGE_apres                                      \
                                                                           ,numero_image                                                \
                                                                            );                                                          \
                         CUMUL_D_UNE_COMPOSANTE_POUR_LE_CALCUL_DES_TRAINEES(Image_VERTE                                                 \
                                                                           ,TRAINEES_VERTE                                              \
                                                                           ,trainee_du_VERTE_avant                                      \
                                                                           ,trainee_du_VERTE_apres                                      \
                                                                           ,numero_image                                                \
                                                                            );                                                          \
                         CUMUL_D_UNE_COMPOSANTE_POUR_LE_CALCUL_DES_TRAINEES(Image_BLEUE                                                 \
                                                                           ,TRAINEES_BLEUE                                              \
                                                                           ,trainee_du_BLEUE_avant                                      \
                                                                           ,trainee_du_BLEUE_apres                                      \
                                                                           ,numero_image                                                \
                                                                            );                                                          \
                                        /* Calcul eventuel des trainees. ATTENTION : apres chaque calcul de l'effet de trainees,     */ \
                                        /* la composante courante subit, si necessaire, 'CONVOLUTION_D_UNE_COMPOSANTE(...)'...       */ \
                                                                                                                                        \
                         MISE_A_JOUR_D_UN_CUMUL_POUR_LE_CALCUL_DES_TRAINEES(TRAINEES_ROUGE,Image_ROUGE);                                \
                         MISE_A_JOUR_D_UN_CUMUL_POUR_LE_CALCUL_DES_TRAINEES(TRAINEES_VERTE,Image_VERTE);                                \
                         MISE_A_JOUR_D_UN_CUMUL_POUR_LE_CALCUL_DES_TRAINEES(TRAINEES_BLEUE,Image_BLEUE);                                \
                                        /* Mise a jour des cumuls pour le calcul des trainees suivantes ; cette mise a jour est      */ \
                                        /* faite avant l'eventuel renormalisation des composantes, afin de ne pas prendre en compte  */ \
                                        /* des images renormalisees lors du calcul des trainees...                                   */ \
                                                                                                                                        \
                         RENORMALISATION_EVENTUELLE_D_UNE_COMPOSANTE(Image_ROUGE,trainee_du_ROUGE_avant,trainee_du_ROUGE_apres);        \
                         RENORMALISATION_EVENTUELLE_D_UNE_COMPOSANTE(Image_VERTE,trainee_du_VERTE_avant,trainee_du_VERTE_apres);        \
                         RENORMALISATION_EVENTUELLE_D_UNE_COMPOSANTE(Image_BLEUE,trainee_du_BLEUE_avant,trainee_du_BLEUE_apres);        \
                                        /* Puis, avant de memoriser les composantes, mais apres avoir mis a jour le systeme de       */ \
                                        /* calcul des trainees, les composantes sont eventuellement renormalisees...                 */ \
                                                                                                                                        \
                         EGAL(nom_temporaire_de_la_composante_ROUGE                                                                     \
                             ,chain_Aconcaten3_sauf_nom_pipe(nom_imageR                                                                 \
                                                            ,NUMERO_IMAGE(numero_image)                                                 \
                                                            ,c_ROUGE                                                                    \
                                                             )                                                                          \
                              );                                                                                                        \
                         EGAL(nom_temporaire_de_la_composante_VERTE                                                                     \
                             ,chain_Aconcaten3_sauf_nom_pipe(nom_imageR                                                                 \
                                                            ,NUMERO_IMAGE(numero_image)                                                 \
                                                            ,c_VERTE                                                                    \
                                                             )                                                                          \
                              );                                                                                                        \
                         EGAL(nom_temporaire_de_la_composante_BLEUE                                                                     \
                             ,chain_Aconcaten3_sauf_nom_pipe(nom_imageR                                                                 \
                                                            ,NUMERO_IMAGE(numero_image)                                                 \
                                                            ,c_BLEUE                                                                    \
                                                             )                                                                          \
                              );                                                                                                        \
                                        /* Generation du nom des trois composantes...                                                */ \
                                                                                                                                        \
                         GENERATION_D_UNE_COMPOSANTE(nom_temporaire_de_la_composante_ROUGE                                              \
                                                    ,Image_ROUGE                                                                        \
                                                    ,generer_la_composante_ROUGE                                                        \
                                                     );                                                                                 \
                         GENERATION_D_UNE_COMPOSANTE(nom_temporaire_de_la_composante_VERTE                                              \
                                                    ,Image_VERTE                                                                        \
                                                    ,generer_la_composante_VERTE                                                        \
                                                     );                                                                                 \
                         GENERATION_D_UNE_COMPOSANTE(nom_temporaire_de_la_composante_BLEUE                                              \
                                                    ,Image_BLEUE                                                                        \
                                                    ,generer_la_composante_BLEUE                                                        \
                                                     );                                                                                 \
                                        /* Creation des trois composantes...                                                         */ \
                                                                                                                                        \
                         CALZ_FreCC(nom_temporaire_de_la_composante_ROUGE);                                                             \
                         CALZ_FreCC(nom_temporaire_de_la_composante_VERTE);                                                             \
                         CALZ_FreCC(nom_temporaire_de_la_composante_BLEUE);                                                             \
                                        /* Liberation du nom des trois composantes...                                                */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         PRINT_ERREUR("la generation d'une sequence d'images via le 'pipe' est impossible");                            \
                                        /* Message introduit le 20051217155159, car, en effet, il est utile...                       */ \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Generation d'une image de numero donne...                                                 */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        G E N E R A T I O N   D ' U N E   L I S T E   Q U E L C O N Q U E  :                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
DEFV(Local,DEFV(CHAR,INIT(POINTERc(nom_liste_des_X),NOM_PIPE_Local)));
DEFV(Local,DEFV(CHAR,INIT(POINTERc(nom_liste_des_Y),NOM_PIPE_Local)));
DEFV(Local,DEFV(CHAR,INIT(POINTERc(nom_liste_des_Z),NOM_PIPE_Local)));
DEFV(Local,DEFV(CHAR,INIT(POINTERc(nom_liste_des_aRAYON),NOM_PIPE_Local)));
DEFV(Local,DEFV(CHAR,INIT(POINTERc(nom_liste_des_vRAYON),NOM_PIPE_Local)));
DEFV(Local,DEFV(CHAR,INIT(POINTERc(nom_liste_des_ROUGE),NOM_PIPE_Local)));
DEFV(Local,DEFV(CHAR,INIT(POINTERc(nom_liste_des_VERTE),NOM_PIPE_Local)));
DEFV(Local,DEFV(CHAR,INIT(POINTERc(nom_liste_des_BLEUE),NOM_PIPE_Local)));
                                        /* Nom des listes a generer...                                                               */

#define   GENERATION_D_UNE_LISTE(nom_de_la_liste,numero_image,liste)                                                                    \
                    Bblock                                                                                                              \
                    Test(IFNE_chaine(nom_de_la_liste,NOM_PIPE_Local))                                                                   \
                         Bblock                                                                                                         \
                         DEFV(CHAR,INIT(POINTERc(nom_temporaire_de_la_liste_a_generer)                                                  \
                                       ,chain_Aconcaten2_sauf_nom_pipe(nom_de_la_liste                                                  \
                                                                      ,NUMERO_IMAGE(numero_image)                                       \
                                                                       )                                                                \
                                        )                                                                                               \
                              );                                                                                                        \
                                        /* Nom de la liste a generer...                                                              */ \
                                                                                                                                        \
                         Tant(IL_Y_A_ERREUR(Fstore_fichier_formatte_Float(nom_temporaire_de_la_liste_a_generer                          \
                                                                         ,liste                                                         \
                                                                         ,NBRE(PREMIER_POINT_DES_LISTES                                 \
                                                                              ,index_de_rangement_dans_la_liste                         \
                                                                               )                                                        \
                                                                         ,ZERO                                                          \
                                                                         ,VRAI                                                          \
                                                                          )                                                             \
                                            )                                                                                           \
                              )                                                                                                         \
                              Bblock                                                                                                    \
                              DODO(TEMPORISATION_D_ATTENTE_D_ESPACE_DISQUE);                                                            \
                                        /* S'il y a erreur, on considere que c'est parce qu'il n'y a pas assez de place, et dans     */ \
                                        /* dans ces conditions, on attend un peu avant de renouveler le test...                      */ \
                              Eblock                                                                                                    \
                         ETan                                                                                                           \
                                                                                                                                        \
                         CALZ_FreCC(nom_temporaire_de_la_liste_a_generer);                                                              \
                                        /* Liberation du nom de la liste a generer...                                                */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Generation d'une liste quelconque de nom donne...                                         */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        G E N E R A T I O N   D E S   L I S T E S   P A R T I C U L I E R E S  :                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   GENERATION_D_UNE_OU_PLUSIEURS_LISTES(numero_image)                                                                            \
                    Bblock                                                                                                              \
                    GENERATION_D_UNE_LISTE(nom_liste_des_X,numero_image,liste_des_X);                                                   \
                    GENERATION_D_UNE_LISTE(nom_liste_des_Y,numero_image,liste_des_Y);                                                   \
                    GENERATION_D_UNE_LISTE(nom_liste_des_Z,numero_image,liste_des_Z);                                                   \
                    GENERATION_D_UNE_LISTE(nom_liste_des_aRAYON,numero_image,liste_des_aRAYON);                                         \
                    GENERATION_D_UNE_LISTE(nom_liste_des_vRAYON,numero_image,liste_des_vRAYON);                                         \
                    GENERATION_D_UNE_LISTE(nom_liste_des_ROUGE,numero_image,liste_des_ROUGE);                                           \
                    GENERATION_D_UNE_LISTE(nom_liste_des_VERTE,numero_image,liste_des_VERTE);                                           \
                    GENERATION_D_UNE_LISTE(nom_liste_des_BLEUE,numero_image,liste_des_BLEUE);                                           \
                    Eblock                                                                                                              \
                                        /* Generation d'une ou plusieurs listes...                                                   */



Copyright © Jean-François Colonna, 2019-2021.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / Ecole Polytechnique, 2019-2021.