/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        O P T I M I S A T I O N   D E S   D I S T A N C E S   E N T R E   D E S   P O I N T S                                      */
/*        S U R   U N E   S P H E R E   E N   C O O R D O N N E E S   C A R T E S I E N N E S                                        */
/*        P A R   M A X I M I S A T I O N   D E   L A   D I S T A N C E   M I N I M A L E  :                                         */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*             *     * * * * * *   * * * * * *   * * * * * *   *         *   * * * * * *   *   * * * * * *   *         *             */
/*                        *             *        *             **        *        *        *   *         *   **        *             */
/*            * *         *             *        *             * *       *        *        *   *         *   * *       *             */
/*                        *             *        *             *  *      *        *        *   *         *   *  *      *             */
/*           *   *        *             *        *             *   *     *        *        *   *         *   *   *     *             */
/*                        *             *        * * *         *    *    *        *        *   *         *   *    *    *             */
/*          * * * *       *             *        *             *     *   *        *        *   *         *   *     *   *             */
/*                        *             *        *             *      *  *        *        *   *         *   *      *  *             */
/*         *       *      *             *        *             *       * *        *        *   *         *   *       * *             */
/*                        *             *        *             *        **        *        *   *         *   *        **             */
/*        *         *     *             *        * * * * * *   *         *        *        *   * * * * * *   *         *             */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        ATTENTION :                                                                                                                */
/*                                                                                                                                   */
/*                    Je note le 20080310144405 que lorsque                                                                          */
/*                  les coordonnees {X(i),Y(i),Z(i)} sont                                                                            */
/*                  generees par 'v $xci/valeurs_alea$K',                                                                            */
/*                  il conviendra en general d'activer                                                                               */
/*                  l'option (ATTENTION : voir plus loin                                                                             */
/*                  les remarques du 20080311142744 qui                                                                              */
/*                  remettent cela en cause...) :                                                                                    */
/*                                                                                                                                   */
/*                                      affiner_rdn=VRAI                                                                             */
/*                                                                                                                                   */
/*                  ce qui permet de positionner l'indicateur                                                                        */
/*                  'v $ximf/aleatoires$FON rdnIFnD_____affiner_la_generation'                                                       */
/*                  qui a pour effet d'activer la fonction 'drand48(...)'.                                                           */
/*                  dans le cas contraire, meme si les valeurs aletaoires                                                            */
/*                  semblent "bonnes", le processus d'optimisation converge                                                          */
/*                  bien pour la majorite des points, mais, par exemple, pour                                                        */
/*                  26 points, l'un d'entre-eux ne converge pas. On notera                                                           */
/*                  au passage qu'en injectant directement ces {X(i),Y(i),Z(i)}                                                      */
/*                  generees par 'v $xci/valeurs_alea$K' dans 'v $xtc/PtsSphere.01$c'                                                */
/*                  sous la forme :                                                                                                  */
/*                                                                                                                                   */
/*        ListePoints[ 0].x=+0.51742357784762   ; ListePoints[ 0].y=+0.88228132244306   ; ListePoints[ 0].z=-0.25472461071551        */
/*        ListePoints[ 1].x=-0.57007801652424   ; ListePoints[ 1].y=+0.039200911316649  ; ListePoints[ 1].z=-0.17059720594929        */
/*        ListePoints[ 2].x=-0.40312922857847   ; ListePoints[ 2].y=-0.69382054204765   ; ListePoints[ 2].z=-0.70520463898089        */
/*        ListePoints[ 3].x=-0.59993940619749   ; ListePoints[ 3].y=-0.54493343482955   ; ListePoints[ 3].z=+0.33056243151918        */
/*        ListePoints[ 4].x=-0.51961812028644   ; ListePoints[ 4].y=+0.82385502887138   ; ListePoints[ 4].z=-0.71675944547949        */
/*        ListePoints[ 5].x=-0.55625828008925   ; ListePoints[ 5].y=+0.97810393710532   ; ListePoints[ 5].z=-0.57104847793051        */
/*        ListePoints[ 6].x=-0.73567431081816   ; ListePoints[ 6].y=+0.4740681734281    ; ListePoints[ 6].z=-0.45564653931914        */
/*        ListePoints[ 7].x=-0.35555734501945   ; ListePoints[ 7].y=-0.69712093877472   ; ListePoints[ 7].z=-0.50120017328355        */
/*        ListePoints[ 8].x=-0.34157893170676   ; ListePoints[ 8].y=-0.60410423418698   ; ListePoints[ 8].z=-0.12239020602889        */
/*        ListePoints[ 9].x=+0.78582182982276   ; ListePoints[ 9].y=-0.91284677195961   ; ListePoints[ 9].z=-0.21440755539313        */
/*        ListePoints[10].x=-0.2688586671226    ; ListePoints[10].y=-0.017764692668693  ; ListePoints[10].z=-0.078902251589532       */
/*        ListePoints[11].x=-0.15770909523485   ; ListePoints[11].y=+0.57095781973142   ; ListePoints[11].z=+0.41609758204599        */
/*        ListePoints[12].x=-0.29679698464312   ; ListePoints[12].y=-0.44883459967041   ; ListePoints[12].z=+0.32066993104325        */
/*        ListePoints[13].x=+0.095621603585603  ; ListePoints[13].y=-0.48697452456084   ; ListePoints[13].z=-0.85742153919182        */
/*        ListePoints[14].x=+0.5914744104219    ; ListePoints[14].y=+0.47747000329079   ; ListePoints[14].z=+0.66231164367046        */
/*        ListePoints[15].x=-0.89445704263377   ; ListePoints[15].y=-0.75781762169572   ; ListePoints[15].z=+0.033517370016089       */
/*        ListePoints[16].x=-0.75200886081532   ; ListePoints[16].y=-0.780393104898     ; ListePoints[16].z=+0.35176253940527        */
/*        ListePoints[17].x=-0.51503727003701   ; ListePoints[17].y=-0.42529880973757   ; ListePoints[17].z=+0.66181677098471        */
/*        ListePoints[18].x=-0.85750913054566   ; ListePoints[18].y=-0.94930307564759   ; ListePoints[18].z=+0.34091992924964        */
/*        ListePoints[19].x=-0.11307605500942   ; ListePoints[19].y=+0.76718809537924   ; ListePoints[19].z=-0.86350694106124        */
/*        ListePoints[20].x=+0.12388027697982   ; ListePoints[20].y=-0.87765657523538   ; ListePoints[20].z=+0.44752218455426        */
/*        ListePoints[21].x=-0.36085067706222   ; ListePoints[21].y=+0.055740823063879  ; ListePoints[21].z=+0.79859563186699        */
/*        ListePoints[22].x=+0.70304412800029   ; ListePoints[22].y=+0.28053856654118   ; ListePoints[22].z=+0.16656093307145        */
/*        ListePoints[23].x=-0.84031405804693   ; ListePoints[23].y=-0.81095022187147   ; ListePoints[23].z=+0.025308662105961       */
/*        ListePoints[24].x=+0.92492640853158   ; ListePoints[24].y=+0.10688464208827   ; ListePoints[24].z=+0.88004404021429        */
/*        ListePoints[25].x=+0.91625575577666   ; ListePoints[25].y=+0.7852732310003    ; ListePoints[25].z=-0.10178277646274        */
/*                                                                                                                                   */
/*                  (les coordonnees 'x', 'y' et 'z' ayant ete obtenues                                                              */
/*                  via 'v $xci/valeurs_alea$K' avec les graines                                                                     */
/*                  {1111,3333,5555} respectivement)                                                                                 */
/*                                                                                                                                   */
/*                  ce programme presente lui-aussi le meme comportement,                                                            */
/*                  ce qui donne les distances aux trois premiers voisins                                                            */
/*                  suivantes (pour 1000000 iterations) :                                                                            */
/*                                                                                                                                   */
/*                                      d(00,05)=+0.69933589836612 d(00,19)=+0.69933606816643 d(00,25)=+0.69933646082043             */
/*                                      d(01,15)=+0.69933591960808 d(01,03)=+0.69933630774520 d(01,06)=+0.69933633407418             */
/*                                      d(02,04)=+0.69933611794276 d(02,07)=+0.69933642313145 d(02,10)=+0.69933845173217             */
/*                                      d(03,21)=+0.69933630315896 d(03,01)=+0.69933630774520 d(03,11)=+0.69933633156361             */
/*                                      d(04,02)=+0.69933611794276 d(04,19)=+0.69933620134043 d(04,10)=+0.69933629861543             */
/*                                      d(05,00)=+0.69933589836612 d(05,11)=+0.69933623433475 d(05,06)=+0.69933627296799             */
/*                                      d(06,05)=+0.69933627296799 d(06,01)=+0.69933633407418 d(06,04)=+0.69933657270373             */
/*                                      d(07,08)=+0.69933624457462 d(07,13)=+0.69933641781871 d(07,02)=+0.69933642313145             */
/*                                      d(08,20)=+0.69933609123018 d(08,07)=+0.69933624457462 d(08,18)=+0.69933646224464             */
/*                                      d(09,20)=+0.69933589349184 d(09,13)=+0.69933689997989 d(09,07)=+0.69933718683495             */
/*                                      d(10,04)=+0.69933629861543 d(10,23)=+0.69933631242580 d(10,15)=+0.69933653917322             */
/*                                      d(11,05)=+0.69933623433475 d(11,03)=+0.69933633156361 d(11,21)=+0.69933636843623             */
/*                                      d(12,20)=+0.69933582985665 d(12,18)=+0.69933671463457 d(12,17)=+0.69933686183158             */
/*                                      d(13,25)=+0.69933598199669 d(13,19)=+0.69933624770986 d(13,07)=+0.69933641781871             */
/*                                      d(14,22)=+0.69933627491089 d(14,21)=+0.69933664921493 d(14,00)=+0.69933669236661             */
/*                                      d(15,18)=+0.69933589791265 d(15,01)=+0.69933591960808 d(15,10)=+0.69933653917322             */
/*                                      d(16,18)=+0.70450594154025 d(16,01)=+0.70523897882213 d(16,17)=+0.70714268421571             */
/*                                                  --------------             --------------             --------------             */
/*                                      d(17,21)=+0.69933598717966 d(17,03)=+0.69933642948900 d(17,12)=+0.69933686183158             */
/*                                      d(18,15)=+0.69933589791265 d(18,08)=+0.69933646224464 d(18,23)=+0.69933650788423             */
/*                                      d(19,00)=+0.69933606816643 d(19,04)=+0.69933620134043 d(19,13)=+0.69933624770986             */
/*                                      d(20,12)=+0.69933582985665 d(20,09)=+0.69933589349184 d(20,08)=+0.69933609123018             */
/*                                      d(21,17)=+0.69933598717966 d(21,03)=+0.69933630315896 d(21,11)=+0.69933636843623             */
/*                                      d(22,25)=+0.69933585807804 d(22,14)=+0.69933627491089 d(22,20)=+0.69933664394205             */
/*                                      d(23,10)=+0.69933631242580 d(23,18)=+0.69933650788423 d(23,07)=+0.69933669801614             */
/*                                      d(24,20)=+0.69933629647099 d(24,21)=+0.69933665864453 d(24,22)=+0.69933672144081             */
/*                                      d(25,22)=+0.69933585807804 d(25,13)=+0.69933598199669 d(25,19)=+0.69933640338539             */
/*                                                                                                                                   */
/*                  Alors qu'en exploitant directement 'drand48(...)', la                                                            */
/*                  convergence est parfaite. Le probleme ne vient donc pas                                                          */
/*                  de 'v $xrv/optimise.12$K', mais des conditions initiales                                                         */
/*                  {X(i),Y(i),Z(i)} aleatoires...                                                                                   */
/*                                                                                                                                   */
/*                    En fait, le 20080311142744, je note que ce qui precede                                                         */
/*                  est incomplet. En effet, l'option :                                                                              */
/*                                                                                                                                   */
/*                                      affiner_rdn=FAUX                                                                             */
/*                                                                                                                                   */
/*                  de 'v $xci/valeurs_alea$K' produit une liste {X(i),Y(i),Z(i)}                                                    */
/*                  aleatoire de qualite (c'est-a-dire convergeant avec                                                              */
/*                  'v $xrv/optimise.12$K') avec les trois graines {123,456,789}.                                                    */
/*                  Mon generateur aleatoire n'est dons pas en cause. Le probleme                                                    */
/*                  doit venir du fait que certains ensembles {X(i),Y(i),Z(i)}                                                       */
/*                  convergent et d'autre pas. Le 20080310144405, j'etais donc tombe,                                                */
/*                  par hasard, sur un ensemble non convergent avec 'v $xci/valeurs_alea$K'                                          */
/*                  et avec un qui convergeait avec 'drand48(...)'. D'ailleurs le                                                    */
/*                  20080311142744, avec :                                                                                           */
/*                                                                                                                                   */
/*                                      affiner_rdn=VRAI                                                                             */
/*                                                                                                                                   */
/*                  (et donc 'drand48(...)') et les graines {1111,3333,5555},                                                        */
/*                  l'ensemble genere {X(i),Y(i),Z(i)} ne converge pas (point 00).                                                   */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Nota :                                                                                                                     */
/*                                                                                                                                   */
/*                    Ce programme s'inspire des programmes                                                                          */
/*                  'v $xtc/PtsSphere.01$c' et surtout de                                                                            */
/*                  'v $xtc/PtsSphere.02$c'...                                                                                       */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xrv/optimise.12$K' :                                                                                           */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 20080309170336).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

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

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F I C H I E R S   D ' I N C L U D E S  :                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  INCLUDES_BASE

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        V A L E U R S   I M P L I C I T E S   D E S   P A R A M E T R E S  :                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   NOMBRE_MAXIMAL_D_ELEMENTS_DANS_LE_FICHIER                                                                                     \
                    CENT_MILLE                                                                                                          \
                                        /* Definition du nombre maximal d'elements dans un fichier. Ceci fut introduit le            */ \
                                        /* 20080228190114 au cas ou aucun argument de type 'lTRANSFORMAT_0d(...)' ne serait          */ \
                                        /* introduit auquel cas 'nombre_maximal_d_elements_dans_le_fichier' a comme valeur ce        */ \
                                        /* parametre. Cela provoque alors un defaut d'allocation memoire dans les 'MdTb2(...)'       */ \
                                        /* qui suivent...                                                                            */

#define   UTILISER_LES_COORDONNEES_CARTESIENNES_EN_ENTREE                                                                               \
                    VRAI
#define   UTILISER_LES_COORDONNEES_CARTESIENNES_EN_SORTIE                                                                               \
                    VRAI
                                        /* Afin de choisir entre les coordonnees cartesiennes ('VRAI') et les coordonnees            */
                                        /* spheriques ('VRAI') en entree et en sortie (introduit le 20080312092208).                 */

#define   NOMBRE_D_ITERATIONS_D_OPTIMISATION                                                                                            \
                    CENT_MILLE                                                                                                          \
                                        /* Nombre d'iterations maximum...                                                            */
#define   S_ARRETER_AVANT_LA_FIN                                                                                                        \
                    FAUX
#define   NOMBRE_D_ITERATIONS_D_OPTIMISATION_AU_BOUT_DUQUEL_S_ARRETER                                                                   \
                    NOMBRE_D_ITERATIONS_D_OPTIMISATION
                                        /* Faut-il s'arreter avant la fin et si oui, au bout de combien d'iterations ? Ceci a ete    */
                                        /* introduit le 20011107161207 afin de permettre la realisation des animations decrites      */
                                        /* par 'v $xiirs/.PSPH.31.1.$u optimise.01'. Il est en effet important que pour toutes       */
                                        /* les images d'une visualisation de la dynamique du processus, l'echelle de 'temps' soit la */
                                        /* meme ; et pour ce faire, il est essentiel que 'nombre_d_iterations_d_optimisation' soit   */
                                        /* le meme pour toutes ces images ; il convient donc d'introduire un nouveau test d'arret,   */
                                        /* d'ou 'nombre_d_iterations_d_optimisation_au_bout_duquel_s_arreter'...                     */

#define   CALCULER_LA_MATRICE_DES_VOISINS                                                                                               \
                    FAUX                                                                                                                \
                                        /* Indique si la calcul de la matrice des voisins doit etre fait meme s'il n'est pas utile   */ \
                                        /* ('VRAI')ou pas ('FAUX'). Ceci fut introduit le 20080301095446 afin des fins de mise au    */ \
                                        /* point...                                                                                  */

#define   EDITER_TOUTES_LES_DISTANCES_MINIMALES                                                                                         \
                    FAUX                                                                                                                \
                                        /* Doit-on editer toutes les distances minimales pour voir l'amelioration comment converge   */ \
                                        /* le processus (possibilite introduite le 20080224095738) ?                                 */
#define   EDITER_LES_DISTANCES_MINIMALES_INITIALE_ET_FINALE                                                                             \
                    FAUX                                                                                                                \
                                        /* Doit-on editer les distances minimales initiale et finale pour voir l'amelioration ?      */

#define   EDITER_LA_MATRICE_DES_DISTANCES                                                                                               \
                    FAUX
#define   EDITER_LA_MATRICE_DES_DISTANCES_TRIEE_SUIVANT_LA_MATRICE_DES_VOISINS                                                          \
                    FAUX
#define   NOMBRE_ELEMENTS_MATRICE_DES_DISTANCES_TRIEE_SUIVANT_LA_MATRICE_DES_VOISINS                                                    \
                    TROIS
#define   EDITER_LA_MATRICE_DES_VOISINS                                                                                                 \
                    FAUX
                                        /* Doit-on editer les matrices des distances et des vosins (introduit le 20080227180930)...  */

#define   COORDONNEE_X_DU_CENTRE_DE_LA_SPHERE                                                                                           \
                    FXorigine
#define   COORDONNEE_Y_DU_CENTRE_DE_LA_SPHERE                                                                                           \
                    FYorigine
#define   COORDONNEE_Z_DU_CENTRE_DE_LA_SPHERE                                                                                           \
                    FZorigine
#define   RAYON_DE_LA_SPHERE                                                                                                            \
                    FU
                                        /* Definition de la sphere...                                                                */

#define   PERTURBER_LA_DISTANCE_MINIMALE                                                                                                \
                    VRAI
#define   PERTURBER_LA_DISTANCE_MAXIMALE                                                                                                \
                    VRAI
                                        /* Definition des distances a perturber...                                                   */

#define   PONDERATION_INITIALE_DE_LA_DISTANCE_MINIMALE                                                                                  \
                    FRA10(FRA10(FU))
#define   AJUSTER_AUTOMATIQUEMENT_LA_PONDERATION_FINALE___DE_LA_DISTANCE_MINIMALE                                                       \
                    VRAI
#define   PONDERATION_FINALE___DE_LA_DISTANCE_MINIMALE                                                                                  \
                    GRO1(INVE(FLOT(NOMBRE_D_ITERATIONS_D_OPTIMISATION)))
#define   PONDERATION_INITIALE_DE_LA_DISTANCE_MAXIMALE                                                                                  \
                    FRA10(FRA10(FU))
#define   AJUSTER_AUTOMATIQUEMENT_LA_PONDERATION_FINALE___DE_LA_DISTANCE_MAXIMALE                                                       \
                    VRAI
#define   PONDERATION_FINALE___DE_LA_DISTANCE_MAXIMALE                                                                                  \
                    GRO1(INVE(FLOT(NOMBRE_D_ITERATIONS_D_OPTIMISATION)))
                                        /* Definition de la perturbation des distances minimale et maximale.                         */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D E S   F I C H I E R S  :                                                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xrv/ARITHMET.1d.I"
                                        /* Passage a l'allocation dynamique le 20060214192917...                                     */
#include  xrv/ARITHMET.21.I"
#include  xrv/champs_5.41.I"
#include  xrq/nucleon.LB.I"

#define   RHO__IMPLICITE                                                                                                                \
                    FU
#define   PHI__IMPLICITE                                                                                                                \
                    FZERO
#define   THETA_IMPLICITE                                                                                                               \
                    FZERO

gGENERATION_D_UN_FICHIER(fichier_LISTE_RHO_,liste_initiale_des_RHO_);
gGENERATION_D_UN_FICHIER(fichier_LISTE_PHI_,liste_initiale_des_PHI_);
gGENERATION_D_UN_FICHIER(fichier_LISTE_THETA,liste_initiale_des_THETA);
                                        /* Definition en memoire des fichiers de coordonnees spheriques (introduits le               */
                                        /* 20080312092208...).                                                                       */

#define   ELEMENT_DU_FICHIER_LISTE_RHO_(index)                                                                                          \
                    gELEMENT_DU_FICHIER(liste_initiale_des_RHO_,index)
#define   ELEMENT_DU_FICHIER_LISTE_PHI_(index)                                                                                          \
                    gELEMENT_DU_FICHIER(liste_initiale_des_PHI_,index)
#define   ELEMENT_DU_FICHIER_LISTE_THETA(index)                                                                                         \
                    gELEMENT_DU_FICHIER(liste_initiale_des_THETA,index)
                                        /* Acces a un element courant des fichiers de coordonnees spheriques.                        */

#define   X_IMPLICITE                                                                                                                   \
                    FZERO
#define   Y_IMPLICITE                                                                                                                   \
                    FZERO
#define   Z_IMPLICITE                                                                                                                   \
                    FZERO

gGENERATION_D_UN_FICHIER(fichier_LISTE_X,liste_initiale_des_X);
gGENERATION_D_UN_FICHIER(fichier_LISTE_Y,liste_initiale_des_Y);
gGENERATION_D_UN_FICHIER(fichier_LISTE_Z,liste_initiale_des_Z);
                                        /* Definition en memoire des fichiers de coordonnees cartesiennes.                           */

#define   ELEMENT_DU_FICHIER_LISTE_X(index)                                                                                             \
                    gELEMENT_DU_FICHIER(liste_initiale_des_X,index)
#define   ELEMENT_DU_FICHIER_LISTE_Y(index)                                                                                             \
                    gELEMENT_DU_FICHIER(liste_initiale_des_Y,index)
#define   ELEMENT_DU_FICHIER_LISTE_Z(index)                                                                                             \
                    gELEMENT_DU_FICHIER(liste_initiale_des_Z,index)
                                        /* Acces a un element courant des fichiers de coordonnees cartesiennes.                      */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M A C R O S   U T I L E S  :                                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   MATRICE_DES_DISTANCES(index_i,index_j)                                                                                        \
                    IdTb2(matrice_des_distances                                                                                         \
                         ,INDX(index_i,PREMIER_ELEMENT_D_UN_FICHIER),nombre_maximal_d_elements_dans_le_fichier                          \
                         ,INDX(index_j,PREMIER_ELEMENT_D_UN_FICHIER),nombre_maximal_d_elements_dans_le_fichier                          \
                          )                                                                                                             \
                                        /* Acces a un element courant de 'matrice_des_distances'...                                  */
DEFV(Local,DEFV(Float,DdTb2(POINTERf
                           ,matrice_des_distances
                           ,nombre_maximal_d_elements_dans_le_fichier,nombre_maximal_d_elements_dans_le_fichier
                           ,ADRESSE_NON_ENCORE_DEFINIE
                            )
                )
     );
                                        /* Matrice des distances des points deux a deux (introduite le 20080225161158)...            */

#define   MATRICE_DES_VOISINS(index_i,index_j)                                                                                          \
                    IdTb2(matrice_des_voisins                                                                                           \
                         ,INDX(index_i,PREMIER_ELEMENT_D_UN_FICHIER),nombre_maximal_d_elements_dans_le_fichier                          \
                         ,INDX(index_j,PREMIER_ELEMENT_D_UN_FICHIER),nombre_maximal_d_elements_dans_le_fichier                          \
                          )                                                                                                             \
                                        /* Acces a un element courant de 'matrice_des_voisins'...                                    */
DEFV(Local,DEFV(Int,DdTb2(POINTERi
                         ,matrice_des_voisins
                         ,nombre_maximal_d_elements_dans_le_fichier,nombre_maximal_d_elements_dans_le_fichier
                         ,ADRESSE_NON_ENCORE_DEFINIE
                          )
                )
     );
                                        /* Matrice des voisins de chaque point (introduite le 20080227101546). L'element {i,j}       */
                                        /* donne le j-ieme voisin du point d'index 'i'.                                              */
DEFV(Local,DEFV(Logical,INIT(la_matrice_des_voisins_est_necessaire,FAUX)));
                                        /* Indique si 'matrice_des_voisins' est necessaire ou pas...                                 */

#define   LISTE_DES_DISTANCES_DU_POINT_i_AUX_AUTRES_POINTS(index)                                                                       \
                    gELEMENT_DU_FICHIER(liste_des_distances_du_point_i_aux_autres_points,index)                                         \
                                        /* Acces a un element courant de 'liste_des_distances_du_point_i_aux_autres_points'...       */
#define   LISTE_DES_VOISINS_DU_POINT_i(index)                                                                                           \
                    gELEMENT_DU_FICHIER(liste_des_voisins_du_point_i,index)                                                             \
                                        /* Acces a un element courant de 'liste_des_voisins_du_point_i'...                           */

#define   ACCES_DISTANCE(liste,index)                                                                                                   \
                    IdTb1(liste,index,nombre_maximal_d_elements_dans_le_fichier)                                                        \
                                        /* Afin de pouvoir utiliser 'TRI_D_UNE_LISTE_QUELCONQUE(...)'.                               */

DEFV(Local,DEFV(Float,INIT(distance_minimale,FLOT__UNDEF)));
DEFV(Local,DEFV(Int,INIT(index_i_de_la_distance_minimale,UNDEF)));
DEFV(Local,DEFV(Int,INIT(index_j_de_la_distance_minimale,UNDEF)));
                                        /* Definition de la distance minimale...                                                     */
DEFV(Local,DEFV(Float,INIT(distance_maximale,FLOT__UNDEF)));
DEFV(Local,DEFV(Int,INIT(index_i_de_la_distance_maximale,UNDEF)));
DEFV(Local,DEFV(Int,INIT(index_j_de_la_distance_maximale,UNDEF)));
                                        /* Definition de la distance maximale...                                                     */

#define   NORMALISATION_D_UN_POINT(index)                                                                                               \
                    Bblock                                                                                                              \
                    DEFV(Float,INIT(distance_courante                                                                                   \
                                   ,RdisF3D(coordonnee_X_du_centre_de_la_sphere                                                         \
                                           ,coordonnee_Y_du_centre_de_la_sphere                                                         \
                                           ,coordonnee_Z_du_centre_de_la_sphere                                                         \
                                           ,ELEMENT_DU_FICHIER_LISTE_X(index)                                                           \
                                           ,ELEMENT_DU_FICHIER_LISTE_Y(index)                                                           \
                                           ,ELEMENT_DU_FICHIER_LISTE_Z(index)                                                           \
                                            )                                                                                           \
                                    )                                                                                                   \
                         );                                                                                                             \
                                                                                                                                        \
                    EGAL(ELEMENT_DU_FICHIER_LISTE_X(index)                                                                              \
                        ,SCAL(ELEMENT_DU_FICHIER_LISTE_X(index)                                                                         \
                             ,distance_courante                                                                                         \
                             ,rayon_de_la_sphere                                                                                        \
                              )                                                                                                         \
                         );                                                                                                             \
                    EGAL(ELEMENT_DU_FICHIER_LISTE_Y(index)                                                                              \
                        ,SCAL(ELEMENT_DU_FICHIER_LISTE_Y(index)                                                                         \
                             ,distance_courante                                                                                         \
                             ,rayon_de_la_sphere                                                                                        \
                              )                                                                                                         \
                         );                                                                                                             \
                    EGAL(ELEMENT_DU_FICHIER_LISTE_Z(index)                                                                              \
                        ,SCAL(ELEMENT_DU_FICHIER_LISTE_Z(index)                                                                         \
                             ,distance_courante                                                                                         \
                             ,rayon_de_la_sphere                                                                                        \
                              )                                                                                                         \
                         );                                                                                                             \
                    Eblock                                                                                                              \
                                        /* Normalisation d'un point {X,Y,Z} de facon a ce qu'il se retrouve sur la sphere...         */

#define   CALCUL_DES_DISTANCES_DEUX_A_DEUX                                                                                              \
                    Bblock                                                                                                              \
                    DEFV(Int,INIT(DM_index_i,UNDEF));                                                                                   \
                    DEFV(Int,INIT(DM_index_j,UNDEF));                                                                                   \
                                                                                                                                        \
                    EGAL(distance_minimale,F_INFINI);                                                                                   \
                    EGAL(distance_maximale,F_MOINS_L_INFINI);                                                                           \
                                                                                                                                        \
                    DoIn(DM_index_i,PREMIER_ELEMENT_D_UN_FICHIER,DERNIER_ELEMENT_D_UN_FICHIER,I)                                        \
                         Bblock                                                                                                         \
                         DoIn(DM_index_j,PREMIER_ELEMENT_D_UN_FICHIER,DERNIER_ELEMENT_D_UN_FICHIER,I)                                   \
                              Bblock                                                                                                    \
                              Test(IFGT(DM_index_i,DM_index_j))                                                                         \
                                   Bblock                                                                                               \
                                   DEFV(Float,INIT(distance_courante                                                                    \
                                                  ,RdisF3D(ELEMENT_DU_FICHIER_LISTE_X(DM_index_i)                                       \
                                                          ,ELEMENT_DU_FICHIER_LISTE_Y(DM_index_i)                                       \
                                                          ,ELEMENT_DU_FICHIER_LISTE_Z(DM_index_i)                                       \
                                                          ,ELEMENT_DU_FICHIER_LISTE_X(DM_index_j)                                       \
                                                          ,ELEMENT_DU_FICHIER_LISTE_Y(DM_index_j)                                       \
                                                          ,ELEMENT_DU_FICHIER_LISTE_Z(DM_index_j)                                       \
                                                           )                                                                            \
                                                   )                                                                                    \
                                        );                                                                                              \
                                                                                                                                        \
                                   EGAL(MATRICE_DES_DISTANCES(DM_index_i,DM_index_j),distance_courante);                                \
                                   EGAL(MATRICE_DES_DISTANCES(DM_index_j,DM_index_i),distance_courante);                                \
                                        /* Memorisation de la distance entre les points {DM_index_i,DM_index_j} qui est evidemment   */ \
                                        /* egale a celle entre les points {DM_index_j,DM_index_i}...                                 */ \
                                                                                                                                        \
                                   Test(IL_FAUT(perturber_la_distance_minimale))                                                        \
                                        Bblock                                                                                          \
                                        Test(IFLT(distance_courante,distance_minimale))                                                 \
                                             Bblock                                                                                     \
                                             EGAL(distance_minimale,distance_courante);                                                 \
                                             EGAL(index_i_de_la_distance_minimale,DM_index_i);                                          \
                                             EGAL(index_j_de_la_distance_minimale,DM_index_j);                                          \
                                        /* Memorisation de la distance minimale...                                                   */ \
                                             Eblock                                                                                     \
                                        ATes                                                                                            \
                                             Bblock                                                                                     \
                                             Eblock                                                                                     \
                                        ETes                                                                                            \
                                        Eblock                                                                                          \
                                   ATes                                                                                                 \
                                        Bblock                                                                                          \
                                        Eblock                                                                                          \
                                   ETes                                                                                                 \
                                                                                                                                        \
                                   Test(IL_FAUT(perturber_la_distance_maximale))                                                        \
                                        Bblock                                                                                          \
                                        Test(IFGT(distance_courante,distance_maximale))                                                 \
                                             Bblock                                                                                     \
                                             EGAL(distance_maximale,distance_courante);                                                 \
                                             EGAL(index_i_de_la_distance_maximale,DM_index_i);                                          \
                                             EGAL(index_j_de_la_distance_maximale,DM_index_j);                                          \
                                        /* Memorisation de la distance maximale...                                                   */ \
                                             Eblock                                                                                     \
                                        ATes                                                                                            \
                                             Bblock                                                                                     \
                                             Eblock                                                                                     \
                                        ETes                                                                                            \
                                        Eblock                                                                                          \
                                   ATes                                                                                                 \
                                        Bblock                                                                                          \
                                        Eblock                                                                                          \
                                   ETes                                                                                                 \
                                   Eblock                                                                                               \
                              ATes                                                                                                      \
                                   Bblock                                                                                               \
                                        /* On notera que la diagonale 'DM_index_i=DM_index_j' est toujours a zero (par               */ \
                                        /* initialisation...).                                                                       */ \
                                   Eblock                                                                                               \
                              ETes                                                                                                      \
                              Eblock                                                                                                    \
                         EDoI                                                                                                           \
                         Eblock                                                                                                         \
                    EDoI                                                                                                                \
                                                                                                                                        \
                    Test(IL_FAUT(calculer_la_matrice_des_voisins))                                                                      \
                                        /* Test introduit le 20080225163034.                                                         */ \
                         Bblock                                                                                                         \
                         DoIn(DM_index_i,PREMIER_ELEMENT_D_UN_FICHIER,DERNIER_ELEMENT_D_UN_FICHIER,I)                                   \
                              Bblock                                                                                                    \
                              gGENERATION_D_UN_FICHIER_liste(liste_des_distances_du_point_i_aux_autres_points);                         \
                              gGENERATION_D_UN_FICHIER_liste(liste_des_voisins_du_point_i);                                             \
                                                                                                                                        \
                              iGENERATION_D_UN_FICHIER(liste_des_distances_du_point_i_aux_autres_points,FLOT__UNDEF);                   \
                              iGENERATION_D_UN_FICHIER(liste_des_voisins_du_point_i,UNDEF);                                             \
                                                                                                                                        \
                              DoIn(DM_index_j,PREMIER_ELEMENT_D_UN_FICHIER,DERNIER_ELEMENT_D_UN_FICHIER,I)                              \
                                   Bblock                                                                                               \
                                   EGAL(LISTE_DES_DISTANCES_DU_POINT_i_AUX_AUTRES_POINTS(DM_index_j)                                    \
                                       ,MATRICE_DES_DISTANCES(DM_index_i,DM_index_j)                                                    \
                                        );                                                                                              \
                                        /* Recuperation de la liste des distances du point 'DM_index_i' a tous les autres (y compris */ \
                                        /* lui-meme...).                                                                             */ \
                                   EGAL(LISTE_DES_VOISINS_DU_POINT_i(DM_index_j),DM_index_j);                                           \
                                        /* Et initialisation de la future liste des index tries...                                   */ \
                                   Eblock                                                                                               \
                              EDoI                                                                                                      \
                                                                                                                                        \
                              TRI_D_UNE_LISTE_QUELCONQUE(liste_des_distances_du_point_i_aux_autres_points                               \
                                                        ,liste_des_voisins_du_point_i                                                   \
                                                        ,PREMIER_ELEMENT_D_UN_FICHIER                                                   \
                                                        ,DERNIER_ELEMENT_D_UN_FICHIER                                                   \
                                                        ,EST_CE_LE_TRI_AUTOMATIQUE_D_UNE_LISTE_QUELCONQUE                               \
                                                        ,EST_CE_LE_TRI_N_AU_CARRE_D_UNE_LISTE_QUELCONQUE                                \
                                                        ,ACCES_DISTANCE                                                                 \
                                                         );                                                                             \
                                        /* L'argument 'EST_CE_LE_TRI_AUTOMATIQUE_D_UNE_LISTE_QUELCONQUE' a ete introduit le          */ \
                                        /* 20170608104350...                                                                         */ \
                                                                                                                                        \
                              DoIn(DM_index_j,PREMIER_ELEMENT_D_UN_FICHIER,DERNIER_ELEMENT_D_UN_FICHIER,I)                              \
                                   Bblock                                                                                               \
                                   EGAL(MATRICE_DES_VOISINS(DM_index_i,DM_index_j)                                                      \
                                       ,LISTE_DES_VOISINS_DU_POINT_i(DM_index_j)                                                        \
                                        );                                                                                              \
                                        /* Generation de la liste des voisins du point 'i' : en toute logique, le premier element    */ \
                                        /* de cette liste doit donner 'i' lui-meme (puisque chaque point est evidemment son plus     */ \
                                        /* proche voisin -a distance nulle-) ; le deuxieme element donnera le point le plus proche   */ \
                                        /* (different de 'i') et ainsi de suite...                                                   */ \
                                   Eblock                                                                                               \
                              EDoI                                                                                                      \
                                                                                                                                        \
                              lGENERATION_D_UN_FICHIER(liste_des_voisins_du_point_i,UNDEF);                                             \
                              lGENERATION_D_UN_FICHIER(liste_des_distances_du_point_i_aux_autres_points,FLOT__UNDEF);                   \
                              Eblock                                                                                                    \
                         EDoI                                                                                                           \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Calcul de la distance minimale a un instant donne.                                        */

#define   EDITION_DE_LA_MATRICE_DES_DISTANCES                                                                                           \
                    Bblock                                                                                                              \
                    Test(IL_FAUT(editer_la_matrice_des_distances))                                                                      \
                         Bblock                                                                                                         \
                         DEFV(Int,INIT(EMD_index_i,UNDEF));                                                                             \
                         DEFV(Int,INIT(EMD_index_j,UNDEF));                                                                             \
                                        /* Index de parcours des matrices...                                                         */ \
                                                                                                                                        \
                         Test(IL_NE_FAUT_PAS(editer_la_matrice_des_distances_triee_suivant_la_matrice_des_voisins))                     \
                              Bblock                                                                                                    \
                              DoIn(EMD_index_i,PREMIER_ELEMENT_D_UN_FICHIER,DERNIER_ELEMENT_D_UN_FICHIER,I)                             \
                                   Bblock                                                                                               \
                                   DoIn(EMD_index_j                                                                                     \
                                       ,PREMIER_ELEMENT_D_UN_FICHIER                                                                    \
                                       ,DERNIER_ELEMENT_D_UN_FICHIER                                                                    \
                                       ,I                                                                                               \
                                        )                                                                                               \
                                        Bblock                                                                                          \
                                        CAL3(Prme4(" d(%0*d,%0*d)="                                                                     \
                                                  ,NOMBRE_DE_CHIFFRES_DECIMAUX(nombre_d_elements)                                       \
                                                  ,EMD_index_i                                                                          \
                                                  ,NOMBRE_DE_CHIFFRES_DECIMAUX(nombre_d_elements)                                       \
                                                  ,EMD_index_j                                                                          \
                                                   )                                                                                    \
                                             );                                                                                         \
                                        gEDITION_DANS_gOPERATION_SUR_LES_FICHIERS(MATRICE_DES_DISTANCES(EMD_index_i,EMD_index_j)        \
                                                                                 ,CAL3,Prme1,Prme2                                      \
                                                                                  );                                                    \
                                        Eblock                                                                                          \
                                   EDoI                                                                                                 \
                                                                                                                                        \
                                   CALS(Fsauts_de_lignes(UN));                                                                          \
                                   Eblock                                                                                               \
                              EDoI                                                                                                      \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Test(IL_FAUT(calculer_la_matrice_des_voisins))                                                            \
                                   Bblock                                                                                               \
                                   DoIn(EMD_index_i                                                                                     \
                                       ,PREMIER_ELEMENT_D_UN_FICHIER                                                                    \
                                       ,DERNIER_ELEMENT_D_UN_FICHIER                                                                    \
                                       ,I                                                                                               \
                                        )                                                                                               \
                                        Bblock                                                                                          \
                                        DoIn(EMD_index_j                                                                                \
                                            ,SUCC(PREMIER_ELEMENT_D_UN_FICHIER)                                                         \
                                            ,SUCC(LSTX(PREMIER_ELEMENT_D_UN_FICHIER                                                     \
                                                      ,nombre_elements_matrice_des_distances_triee_suivant_la_matrice_des_voisins       \
                                                       )                                                                                \
                                                  )                                                                                     \
                                            ,I                                                                                          \
                                             )                                                                                          \
                                             Bblock                                                                                     \
                                             DEFV(Int,INIT(index_j_trie,MATRICE_DES_VOISINS(EMD_index_i,EMD_index_j)));                 \
                                                                                                                                        \
                                             CAL3(Prme4(" d(%0*d,%0*d)="                                                                \
                                                       ,NOMBRE_DE_CHIFFRES_DECIMAUX(nombre_d_elements)                                  \
                                                       ,EMD_index_i                                                                     \
                                                       ,NOMBRE_DE_CHIFFRES_DECIMAUX(nombre_d_elements)                                  \
                                                       ,index_j_trie                                                                    \
                                                        )                                                                               \
                                                  );                                                                                    \
                                             gEDITION_DANS_gOPERATION_SUR_LES_FICHIERS(MATRICE_DES_DISTANCES(EMD_index_i,index_j_trie)  \
                                                                                      ,CAL3,Prme1,Prme2                                 \
                                                                                       );                                               \
                                             Eblock                                                                                     \
                                        EDoI                                                                                            \
                                                                                                                                        \
                                        CALS(Fsauts_de_lignes(UN));                                                                     \
                                        Eblock                                                                                          \
                                   EDoI                                                                                                 \
                                   Eblock                                                                                               \
                              ATes                                                                                                      \
                                   Bblock                                                                                               \
                                   PRINT_ATTENTION("l'edition de la matrice des distances triees suivant les voisins n'a pas de sens"); \
                                   Eblock                                                                                               \
                              ETes                                                                                                      \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Edition de la matrice des distances (introduite sous cette forme le 20080229211010).      */

#define   EDITION_DE_LA_MATRICE_DES_VOISINS                                                                                             \
                    Bblock                                                                                                              \
                    Test(IL_FAUT(editer_la_matrice_des_voisins))                                                                        \
                         Bblock                                                                                                         \
                         Test(IL_FAUT(calculer_la_matrice_des_voisins))                                                                 \
                              Bblock                                                                                                    \
                              DEFV(Int,INIT(EMV_index_i,UNDEF));                                                                        \
                              DEFV(Int,INIT(EMV_index_j,UNDEF));                                                                        \
                                        /* Index de parcours des matrices...                                                         */ \
                                                                                                                                        \
                              DoIn(EMV_index_i,PREMIER_ELEMENT_D_UN_FICHIER,DERNIER_ELEMENT_D_UN_FICHIER,I)                             \
                                   Bblock                                                                                               \
                                   DoIn(EMV_index_j                                                                                     \
                                       ,PREMIER_ELEMENT_D_UN_FICHIER                                                                    \
                                       ,DERNIER_ELEMENT_D_UN_FICHIER                                                                    \
                                       ,I                                                                                               \
                                        )                                                                                               \
                                        Bblock                                                                                          \
                                        CAL3(Prme6(" v(%0*d,%0*d)=%0*d"                                                                 \
                                                  ,NOMBRE_DE_CHIFFRES_DECIMAUX(nombre_d_elements)                                       \
                                                  ,EMV_index_i                                                                          \
                                                  ,NOMBRE_DE_CHIFFRES_DECIMAUX(nombre_d_elements)                                       \
                                                  ,EMV_index_j                                                                          \
                                                  ,NOMBRE_DE_CHIFFRES_DECIMAUX(nombre_d_elements)                                       \
                                                  ,MATRICE_DES_VOISINS(EMV_index_i,EMV_index_j)                                         \
                                                   )                                                                                    \
                                             );                                                                                         \
                                        Eblock                                                                                          \
                                   EDoI                                                                                                 \
                                                                                                                                        \
                                   CALS(Fsauts_de_lignes(UN));                                                                          \
                                   Eblock                                                                                               \
                              EDoI                                                                                                      \
                                                                                                                                        \
                              CALS(Fsauts_de_lignes(UN));                                                                               \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              PRINT_ATTENTION("l'edition de la matrice des voisins n'a pas de sens ici");                               \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Edition de la matrice des voisins (introduite sous cette forme le 20080229211010).        */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        O P T I M I S A T I O N   D E S   D I S T A N C E S   E N T R E   D E S   P O I N T S                                      */
/*        S U R   U N E   S P H E R E   E N   C O O R D O N N E E S   C A R T E S I E N N E S                                        */
/*        P A R   M A X I M I S A T I O N   D E   L A   D I S T A N C E   M I N I M A L E  :                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
#include  xrv/ARITHMET.22.I"
#include  xci/valeurs.03.I"

     DEFV(Logical,INIT(utiliser_les_coordonnees_cartesiennes_en_entree,UTILISER_LES_COORDONNEES_CARTESIENNES_EN_ENTREE));
     DEFV(Logical,INIT(utiliser_les_coordonnees_cartesiennes_en_sortie,UTILISER_LES_COORDONNEES_CARTESIENNES_EN_SORTIE));
                                        /* Afin de choisir entre les coordonnees cartesiennes ('VRAI') et les coordonnees            */
                                        /* spheriques ('VRAI') en entree et en sortie (introduit le 20080312092208).                 */

     DEFV(Int,INIT(nombre_d_iterations_d_optimisation,NOMBRE_D_ITERATIONS_D_OPTIMISATION));
                                        /* Nombre d'iterations maximum...                                                            */
     DEFV(Logical,INIT(s_arreter_avant_la_fin,S_ARRETER_AVANT_LA_FIN));
     DEFV(Int,INIT(nombre_d_iterations_d_optimisation_au_bout_duquel_s_arreter
                  ,NOMBRE_D_ITERATIONS_D_OPTIMISATION_AU_BOUT_DUQUEL_S_ARRETER
                   )
          );
                                        /* Faut-il s'arreter avant la fin et si oui, au bout de combien d'iterations ? Ceci a ete    */
                                        /* introduit le 20011107161207 afin de permettre la realisation des animations decrites      */
                                        /* par 'v $xiirs/.PSPH.31.1.$u optimise.01'. Il est en effet important que pour toutes       */
                                        /* les images d'une visualisation de la dynamique du processus, l'echelle de 'temps' soit la */
                                        /* meme ; et pour ce faire, il est essentiel que 'nombre_d_iterations_d_optimisation' soit   */
                                        /* le meme pour toutes ces images ; il convient donc d'introduire un nouveau test d'arret,   */
                                        /* d'ou 'nombre_d_iterations_d_optimisation_au_bout_duquel_s_arreter'...                     */

     DEFV(Logical,INIT(calculer_la_matrice_des_voisins,CALCULER_LA_MATRICE_DES_VOISINS));
                                        /* Indique si la calcul de la matrice des voisins doit etre fait meme s'il n'est pas utile   */
                                        /* ('VRAI')ou pas ('FAUX'). Ceci fut introduit le 20080301095446 afin des fins de mise au    */
                                        /* point...                                                                                  */

     DEFV(Logical,INIT(editer_toutes_les_distances_minimales,EDITER_TOUTES_LES_DISTANCES_MINIMALES));
                                        /* Doit-on editer toutes les distances minimales pour voir l'amelioration comment converge   */
                                        /* le processus (possibilite introduite le 20080224095738) ?                                 */
     DEFV(Logical,INIT(editer_les_distances_minimales_initiale_et_finale,EDITER_LES_DISTANCES_MINIMALES_INITIALE_ET_FINALE));
                                        /* Doit-on editer les distances minimales initiale et finale pour voir l'amelioration ?      */

     DEFV(Logical,INIT(editer_la_matrice_des_distances,EDITER_LA_MATRICE_DES_DISTANCES));
     DEFV(Logical,INIT(editer_la_matrice_des_distances_triee_suivant_la_matrice_des_voisins
                      ,EDITER_LA_MATRICE_DES_DISTANCES_TRIEE_SUIVANT_LA_MATRICE_DES_VOISINS
                       )
          );
     DEFV(Int,INIT(nombre_elements_matrice_des_distances_triee_suivant_la_matrice_des_voisins
                  ,NOMBRE_ELEMENTS_MATRICE_DES_DISTANCES_TRIEE_SUIVANT_LA_MATRICE_DES_VOISINS
                   )
          );
     DEFV(Logical,INIT(editer_la_matrice_des_voisins,EDITER_LA_MATRICE_DES_VOISINS));
                                        /* Doit-on editer les matrices des distances et des vosins (introduit le 20080227180930)...  */

     DEFV(Float,INIT(coordonnee_X_du_centre_de_la_sphere,COORDONNEE_X_DU_CENTRE_DE_LA_SPHERE));
     DEFV(Float,INIT(coordonnee_Y_du_centre_de_la_sphere,COORDONNEE_Y_DU_CENTRE_DE_LA_SPHERE));
     DEFV(Float,INIT(coordonnee_Z_du_centre_de_la_sphere,COORDONNEE_Z_DU_CENTRE_DE_LA_SPHERE));
     DEFV(Float,INIT(rayon_de_la_sphere,RAYON_DE_LA_SPHERE));
                                        /* Definition de la sphere...                                                                */

     DEFV(Logical,INIT(perturber_la_distance_minimale,PERTURBER_LA_DISTANCE_MINIMALE));
     DEFV(Logical,INIT(perturber_la_distance_maximale,PERTURBER_LA_DISTANCE_MAXIMALE));
                                        /* Definition des distances a perturber...                                                   */

     DEFV(Float,INIT(ponderation_initiale_de_la_distance_minimale,PONDERATION_INITIALE_DE_LA_DISTANCE_MINIMALE));
     DEFV(Logical,INIT(ajuster_automatiquement_la_ponderation_finale___de_la_distance_minimale
                      ,AJUSTER_AUTOMATIQUEMENT_LA_PONDERATION_FINALE___DE_LA_DISTANCE_MINIMALE
                       )
          );
     DEFV(Float,INIT(ponderation_finale___de_la_distance_minimale,PONDERATION_FINALE___DE_LA_DISTANCE_MINIMALE));
     DEFV(Float,INIT(ponderation_initiale_de_la_distance_maximale,PONDERATION_INITIALE_DE_LA_DISTANCE_MAXIMALE));
     DEFV(Logical,INIT(ajuster_automatiquement_la_ponderation_finale___de_la_distance_maximale
                      ,AJUSTER_AUTOMATIQUEMENT_LA_PONDERATION_FINALE___DE_LA_DISTANCE_MAXIMALE
                       )
          );
     DEFV(Float,INIT(ponderation_finale___de_la_distance_maximale,PONDERATION_FINALE___DE_LA_DISTANCE_MAXIMALE));
                                        /* Definition de la perturbation des distances minimale et maximale.                         */

     DEFV(Int,INIT(iteration_courante,UNDEF));
                                        /* Index divers...                                                                           */
     /*..............................................................................................................................*/
#include  xrv/champs_5.1A.I"

     GET_ARGUMENTS_(nombre_d_arguments
                   ,BLOC(PROCESS_ARGUMENT_I("nombre_elements=""ne=",nombre_d_elements
                                           ,BLOC(VIDE;)
                                           ,BLOC(Bblock
                                                 PRINT_AVERTISSEMENT("'ne=' doit etre defini avant toute entree de fichiers");
                                                 Eblock
                                                 )
                                            );

                         PROCESS_ARGUMENTS_DE_DEFINITION_DES_FICHIERS_01;

                         GET_ARGUMENT_L("cartesiennesA=""cartesienneA=""cA=",utiliser_les_coordonnees_cartesiennes_en_entree);
                         GET_ARGUMENT_N("spheriquesA=""spheriqueA=""sA=",utiliser_les_coordonnees_cartesiennes_en_entree);

                         GET_ARGUMENT_L("cartesiennesR=""cartesienneR=""cR=",utiliser_les_coordonnees_cartesiennes_en_sortie);
                         GET_ARGUMENT_N("spheriquesR=""spheriqueR=""sR=",utiliser_les_coordonnees_cartesiennes_en_sortie);

                         PROKESF_ARGUMENT_FICHIER("LISTE_RHO="
                                                 ,fichier_LISTE_RHO_
                                                 ,liste_initiale_des_RHO_
                                                 ,RHO__IMPLICITE
                                                 ,lTRANSFORMAT_0d
                                                 ,iGENERATION_D_UN_FICHIER
                                                  );
                         PROKESF_ARGUMENT_FICHIER("LISTE_PHI="
                                                 ,fichier_LISTE_PHI_
                                                 ,liste_initiale_des_PHI_
                                                 ,PHI__IMPLICITE
                                                 ,lTRANSFORMAT_0d
                                                 ,iGENERATION_D_UN_FICHIER
                                                  );
                         PROKESF_ARGUMENT_FICHIER("LISTE_THETA="
                                                 ,fichier_LISTE_THETA
                                                 ,liste_initiale_des_THETA
                                                 ,THETA_IMPLICITE
                                                 ,lTRANSFORMAT_0d
                                                 ,iGENERATION_D_UN_FICHIER
                                                  );

                         PROKESF_ARGUMENT_FICHIER("LISTE_X="
                                                 ,fichier_LISTE_X
                                                 ,liste_initiale_des_X
                                                 ,X_IMPLICITE
                                                 ,lTRANSFORMAT_0d
                                                 ,iGENERATION_D_UN_FICHIER
                                                  );
                         PROKESF_ARGUMENT_FICHIER("LISTE_Y="
                                                 ,fichier_LISTE_Y
                                                 ,liste_initiale_des_Y
                                                 ,Y_IMPLICITE
                                                 ,lTRANSFORMAT_0d
                                                 ,iGENERATION_D_UN_FICHIER
                                                  );
                         PROKESF_ARGUMENT_FICHIER("LISTE_Z="
                                                 ,fichier_LISTE_Z
                                                 ,liste_initiale_des_Z
                                                 ,Z_IMPLICITE
                                                 ,lTRANSFORMAT_0d
                                                 ,iGENERATION_D_UN_FICHIER
                                                  );

                         GET_ARGUMENT_I("iterations=",nombre_d_iterations_d_optimisation);
                         GET_ARGUMENT_L("avant_la_fin=",s_arreter_avant_la_fin);
                         GET_ARGUMENT_I("fin=",nombre_d_iterations_d_optimisation_au_bout_duquel_s_arreter);

                         GET_ARGUMENT_L("calculer_matrice_voisins=""cmv=",calculer_la_matrice_des_voisins);

                         GET_ARGUMENT_L("lister_all=""lia=""editer_all=""eda=",editer_toutes_les_distances_minimales);
                         GET_ARGUMENT_L("lister_initiale_finale=""liif=""editer_initiale_finale=""edif="
                                       ,editer_les_distances_minimales_initiale_et_finale
                                        );

                         GET_ARGUMENT_L("editer_matrice_distances=""emd=",editer_la_matrice_des_distances);
                         GET_ARGUMENT_L("editer_matrice_distances_triee=""emdt=""emdv="
                                       ,editer_la_matrice_des_distances_triee_suivant_la_matrice_des_voisins
                                        );
                         GET_ARGUMENT_I("nombre_points_matrice_distances_triee=""npmdt=""npmdv="
                                       ,nombre_elements_matrice_des_distances_triee_suivant_la_matrice_des_voisins
                                        );
                         GET_ARGUMENT_L("editer_matrice_voisins=""emv=",editer_la_matrice_des_voisins);

                         GET_ARGUMENT_L("perturber_distance_minimale=""pdm=",perturber_la_distance_minimale);
                         GET_ARGUMENT_L("perturber_distance_maximale=""pdM=",perturber_la_distance_maximale);

                         GET_ARGUMENT_F("ponderation_initiale_distance_minimale=""pidm="
                                       ,ponderation_initiale_de_la_distance_minimale
                                        );
                         GET_ARGUMENT_L("ajuster_ponderation_finale_distance_minimale=""apfdm="
                                       ,ajuster_automatiquement_la_ponderation_finale___de_la_distance_minimale
                                        );
                         GET_ARGUMENT_F("ponderation_finale_distance_minimale=""pfdm="
                                       ,ponderation_finale___de_la_distance_minimale
                                        );
                         GET_ARGUMENT_F("ponderation_initiale_distance_maximale=""pidM="
                                       ,ponderation_initiale_de_la_distance_maximale
                                        );
                         GET_ARGUMENT_L("ajuster_ponderation_finale_distance_maximale=""apfdM="
                                       ,ajuster_automatiquement_la_ponderation_finale___de_la_distance_maximale
                                        );
                         GET_ARGUMENT_F("ponderation_finale_distance_maximale=""pfdM="
                                       ,ponderation_finale___de_la_distance_maximale
                                        );

                         PROCESS_ARGUMENTS_DE_PARAMETRAGE_DE_LA_GENERATION_DE_SUITE_DE_VALEURS_3;
                                        /* Cette procedure fut introduite le 20070103174132...                                       */

                         PROCESS_ARGUMENTS_DE_PARAMETRAGE_DE_LA_GENERATION_DE_SUITE_DE_VALEURS_1;
                                        /* Cette procedure fut introduite le 20061226192626...                                       */
                         )
                    );

     Test(IL_FAUT(ajuster_automatiquement_la_ponderation_finale___de_la_distance_minimale))
          Bblock
          EGAL(ponderation_finale___de_la_distance_minimale
              ,GRO1(INVE(FLOT(nombre_d_iterations_d_optimisation)))
               );
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     Test(IL_FAUT(ajuster_automatiquement_la_ponderation_finale___de_la_distance_maximale))
          Bblock
          EGAL(ponderation_finale___de_la_distance_maximale
              ,GRO1(INVE(FLOT(nombre_d_iterations_d_optimisation)))
               );
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     Test(IL_FAUT(editer_la_matrice_des_distances))
          Bblock
          Test(IL_FAUT(editer_la_matrice_des_distances_triee_suivant_la_matrice_des_voisins))
               Bblock
               Test(IFGE(nombre_elements_matrice_des_distances_triee_suivant_la_matrice_des_voisins,nombre_d_elements))
                    Bblock
                    PRINT_ATTENTION("le nombre de points a editer est superieur ou egal au nombre de points, il est donc seuille");

                    EGAL(nombre_elements_matrice_des_distances_triee_suivant_la_matrice_des_voisins,PRED(nombre_d_elements));

                    CAL1(Prer1("(le nombre de points a editer vaut donc %d)\n"
                              ,nombre_elements_matrice_des_distances_triee_suivant_la_matrice_des_voisins
                               )
                         );
                    Eblock
               ATes
                    Bblock
                    Eblock
               ETes
               Eblock
          ATes
               Bblock
               Eblock
          ETes
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     MdTb2(matrice_des_distances
          ,nombre_maximal_d_elements_dans_le_fichier,nombre_maximal_d_elements_dans_le_fichier
          ,Float
          ,ADRESSE_NON_ENCORE_DEFINIE
           );
                                        /* Allocation de la matrice des distances des points deux a deux...                          */
     MdTb2(matrice_des_voisins
          ,nombre_maximal_d_elements_dans_le_fichier,nombre_maximal_d_elements_dans_le_fichier
          ,Int
          ,ADRESSE_NON_ENCORE_DEFINIE
           );
                                        /* Allocation de la matrice des voisins de chaque point...                                   */

     begin_nouveau_block
          Bblock
          DEFV(Int,INIT(index_i,UNDEF));
          DEFV(Int,INIT(index_j,UNDEF));
                                        /* Index de parcours des matrices...                                                         */

          DoIn(index_i,PREMIER_ELEMENT_D_UN_FICHIER,DERNIER_ELEMENT_D_UN_FICHIER,I)
               Bblock
               DoIn(index_j,PREMIER_ELEMENT_D_UN_FICHIER,DERNIER_ELEMENT_D_UN_FICHIER,I)
                    Bblock
                    EGAL(MATRICE_DES_DISTANCES(index_i,index_j),FZERO);
                                        /* Par precaution ; cela est surtout destine a nettoyer la diagonale qui sans cela ne        */
                                        /* serait jamais initialisee et zero est de plus la bonne valeur puisque :                   */
                                        /*                                                                                           */
                                        /*                  distance(i,j) = 0                                                        */
                                        /*                                                                                           */
                                        /* pour i=j...                                                                               */
                    EGAL(MATRICE_DES_VOISINS(index_i,index_j),UNDEF);
                                        /* Par precaution...                                                                         */
                    Eblock
               EDoI
               Eblock
          EDoI
          Eblock
     end_nouveau_block

     DoIn(index,PREMIER_ELEMENT_D_UN_FICHIER,DERNIER_ELEMENT_D_UN_FICHIER,I)
          Bblock
          Test(IL_FAUT(utiliser_les_coordonnees_cartesiennes_en_entree))
               Bblock
               Eblock
          ATes
               Bblock
               EGAL(ELEMENT_DU_FICHIER_LISTE_X(index)
                   ,Xcartesienne_3D(ELEMENT_DU_FICHIER_LISTE_RHO_(index)
                                   ,ELEMENT_DU_FICHIER_LISTE_PHI_(index)
                                   ,ELEMENT_DU_FICHIER_LISTE_THETA(index)
                                    )
                    );
               EGAL(ELEMENT_DU_FICHIER_LISTE_Y(index)
                   ,Ycartesienne_3D(ELEMENT_DU_FICHIER_LISTE_RHO_(index)
                                   ,ELEMENT_DU_FICHIER_LISTE_PHI_(index)
                                   ,ELEMENT_DU_FICHIER_LISTE_THETA(index)
                                    )
                    );
               EGAL(ELEMENT_DU_FICHIER_LISTE_Z(index)
                   ,Zcartesienne_3D(ELEMENT_DU_FICHIER_LISTE_RHO_(index)
                                   ,ELEMENT_DU_FICHIER_LISTE_PHI_(index)
                                   ,ELEMENT_DU_FICHIER_LISTE_THETA(index)
                                    )
                    );
                                        /* Et conversion spherique --> cartesienne...                                                */
               Eblock
          ETes
          Eblock
     EDoI

     DoIn(index,PREMIER_ELEMENT_D_UN_FICHIER,DERNIER_ELEMENT_D_UN_FICHIER,I)
          Bblock
          NORMALISATION_D_UN_POINT(index);
                                        /* Initialement, on force les coordonnnees {X,Y,Z} sur la sphere...                          */
          Eblock
     EDoI

     Komp(iteration_courante
         ,COND(IL_NE_FAUT_PAS(s_arreter_avant_la_fin)
              ,nombre_d_iterations_d_optimisation
              ,MIN2(nombre_d_iterations_d_optimisation_au_bout_duquel_s_arreter,nombre_d_iterations_d_optimisation)
               )
          )
          Bblock
          DEFV(Int,INIT(index_i,UNDEF));
          DEFV(Int,INIT(index_j,UNDEF));

          DEFV(Float,INIT(ponderation_courante_de_la_distance_minimale
                         ,BARY(ponderation_initiale_de_la_distance_minimale
                              ,ponderation_finale___de_la_distance_minimale
                              ,DIVI(FLOT(SOUS(iteration_courante,PREMIERE_ITERATION_D_UN_Komp))
                                   ,FLOT(SOUS(nombre_d_iterations_d_optimisation,PREMIERE_ITERATION_D_UN_Komp))
                                    )
                               )
                          )
               );
          DEFV(Float,INIT(ponderation_courante_de_la_distance_maximale
                         ,BARY(ponderation_initiale_de_la_distance_maximale
                              ,ponderation_finale___de_la_distance_maximale
                              ,DIVI(FLOT(SOUS(iteration_courante,PREMIERE_ITERATION_D_UN_Komp))
                                   ,FLOT(SOUS(nombre_d_iterations_d_optimisation,PREMIERE_ITERATION_D_UN_Komp))
                                    )
                               )
                          )
               );
                                        /* Definition des ponderations courantes...                                                  */

          CALCUL_DES_DISTANCES_DEUX_A_DEUX;
                                        /* Calcul des distances extremales...                                                        */

          Test(IL_FAUT(editer_toutes_les_distances_minimales))
               Bblock
               CAL2(Prin0(" DistanceMinimale="));
               EDITION_DANS_gOPERATION_SUR_LES_FICHIERS_AVEC_SAUT_DE_LIGNE(distance_minimale);
                                        /* Introduit sous cette forme le 20160804100535...                                           */
               Eblock
          ATes
               Bblock
               Test(IFET(IL_FAUT(editer_les_distances_minimales_initiale_et_finale)
                        ,IFEQ(iteration_courante,PREMIERE_ITERATION_D_UN_Komp)
                         )
                    )
                    Bblock
                    CAL2(Prin0(" DistanceMinimaleInitiale="));
                    EDITION_DANS_gOPERATION_SUR_LES_FICHIERS_AVEC_SAUT_DE_LIGNE(distance_minimale);
                                        /* Introduit sous cette forme le 20160804100535...                                           */
                    Eblock
               ATes
                    Bblock
                    Eblock
               ETes
               Eblock
          ETes

          Test(IL_FAUT(perturber_la_distance_minimale))
               Bblock
               DEFV(Float,INIT(delta_X
                              ,MUL2(ponderation_courante_de_la_distance_minimale
                                   ,SOUS(ELEMENT_DU_FICHIER_LISTE_X(index_j_de_la_distance_minimale)
                                        ,ELEMENT_DU_FICHIER_LISTE_X(index_i_de_la_distance_minimale)
                                         )
                                    )
                               )
                    );
               DEFV(Float,INIT(delta_Y
                              ,MUL2(ponderation_courante_de_la_distance_minimale
                                   ,SOUS(ELEMENT_DU_FICHIER_LISTE_Y(index_j_de_la_distance_minimale)
                                        ,ELEMENT_DU_FICHIER_LISTE_Y(index_i_de_la_distance_minimale)
                                         )
                                    )
                               )
                    );
               DEFV(Float,INIT(delta_Z
                              ,MUL2(ponderation_courante_de_la_distance_minimale
                                   ,SOUS(ELEMENT_DU_FICHIER_LISTE_Z(index_j_de_la_distance_minimale)
                                        ,ELEMENT_DU_FICHIER_LISTE_Z(index_i_de_la_distance_minimale)
                                         )
                                    )
                               )
                    );
                                        /* Generation de la perturbation {dX,dY,dZ} de la distance minimale...                       */

               EGAL(ELEMENT_DU_FICHIER_LISTE_X(index_i_de_la_distance_minimale)
                   ,SOUS(ELEMENT_DU_FICHIER_LISTE_X(index_i_de_la_distance_minimale)
                        ,delta_X
                         )
                    );
               EGAL(ELEMENT_DU_FICHIER_LISTE_Y(index_i_de_la_distance_minimale)
                   ,SOUS(ELEMENT_DU_FICHIER_LISTE_Y(index_i_de_la_distance_minimale)
                        ,delta_Y
                         )
                    );
               EGAL(ELEMENT_DU_FICHIER_LISTE_Z(index_i_de_la_distance_minimale)
                   ,SOUS(ELEMENT_DU_FICHIER_LISTE_Z(index_i_de_la_distance_minimale)
                        ,delta_Z
                         )
                    );
               NORMALISATION_D_UN_POINT(index_i_de_la_distance_minimale);
                                        /* Perturbation de l'extremite 'i' de la distance minimale...                                */

               EGAL(ELEMENT_DU_FICHIER_LISTE_X(index_j_de_la_distance_minimale)
                   ,ADD2(ELEMENT_DU_FICHIER_LISTE_X(index_j_de_la_distance_minimale)
                        ,delta_X
                         )
                    );
               EGAL(ELEMENT_DU_FICHIER_LISTE_Y(index_j_de_la_distance_minimale)
                   ,ADD2(ELEMENT_DU_FICHIER_LISTE_Y(index_j_de_la_distance_minimale)
                        ,delta_Y
                         )
                    );
               EGAL(ELEMENT_DU_FICHIER_LISTE_Z(index_j_de_la_distance_minimale)
                   ,ADD2(ELEMENT_DU_FICHIER_LISTE_Z(index_j_de_la_distance_minimale)
                        ,delta_Z
                         )
                    );
               NORMALISATION_D_UN_POINT(index_j_de_la_distance_minimale);
                                        /* Perturbation de l'extremite 'j' de la distance minimale...                                */
               Eblock
          ATes
               Bblock
               Eblock
          ETes

          Test(IL_FAUT(perturber_la_distance_maximale))
               Bblock
               DEFV(Float,INIT(delta_X
                              ,MUL2(ponderation_courante_de_la_distance_maximale
                                   ,SOUS(ELEMENT_DU_FICHIER_LISTE_X(index_j_de_la_distance_maximale)
                                        ,ELEMENT_DU_FICHIER_LISTE_X(index_i_de_la_distance_maximale)
                                         )
                                    )
                               )
                    );
               DEFV(Float,INIT(delta_Y
                              ,MUL2(ponderation_courante_de_la_distance_maximale
                                   ,SOUS(ELEMENT_DU_FICHIER_LISTE_Y(index_j_de_la_distance_maximale)
                                        ,ELEMENT_DU_FICHIER_LISTE_Y(index_i_de_la_distance_maximale)
                                         )
                                    )
                               )
                    );
               DEFV(Float,INIT(delta_Z
                              ,MUL2(ponderation_courante_de_la_distance_maximale
                                   ,SOUS(ELEMENT_DU_FICHIER_LISTE_Z(index_j_de_la_distance_maximale)
                                        ,ELEMENT_DU_FICHIER_LISTE_Z(index_i_de_la_distance_maximale)
                                         )
                                    )
                               )
                    );
                                        /* Generation de la perturbation {dX,dY,dZ} de la distance maximale...                       */

               EGAL(ELEMENT_DU_FICHIER_LISTE_X(index_i_de_la_distance_maximale)
                   ,SOUS(ELEMENT_DU_FICHIER_LISTE_X(index_i_de_la_distance_maximale)
                        ,delta_X
                         )
                    );
               EGAL(ELEMENT_DU_FICHIER_LISTE_Y(index_i_de_la_distance_maximale)
                   ,SOUS(ELEMENT_DU_FICHIER_LISTE_Y(index_i_de_la_distance_maximale)
                        ,delta_Y
                         )
                    );
               EGAL(ELEMENT_DU_FICHIER_LISTE_Z(index_i_de_la_distance_maximale)
                   ,SOUS(ELEMENT_DU_FICHIER_LISTE_Z(index_i_de_la_distance_maximale)
                        ,delta_Z
                         )
                    );
               NORMALISATION_D_UN_POINT(index_i_de_la_distance_maximale);
                                        /* Perturbation de l'extremite 'i' de la distance maximale...                                */

               EGAL(ELEMENT_DU_FICHIER_LISTE_X(index_j_de_la_distance_maximale)
                   ,ADD2(ELEMENT_DU_FICHIER_LISTE_X(index_j_de_la_distance_maximale)
                        ,delta_X
                         )
                    );
               EGAL(ELEMENT_DU_FICHIER_LISTE_Y(index_j_de_la_distance_maximale)
                   ,ADD2(ELEMENT_DU_FICHIER_LISTE_Y(index_j_de_la_distance_maximale)
                        ,delta_Y
                         )
                    );
               EGAL(ELEMENT_DU_FICHIER_LISTE_Z(index_j_de_la_distance_maximale)
                   ,ADD2(ELEMENT_DU_FICHIER_LISTE_Z(index_j_de_la_distance_maximale)
                        ,delta_Z
                         )
                    );
               NORMALISATION_D_UN_POINT(index_j_de_la_distance_maximale);
                                        /* Perturbation de l'extremite 'j' de la distance maximale...                                */
               Eblock
          ATes
               Bblock
               Eblock
          ETes
          Eblock
     EKom

     EDITION_DE_LA_MATRICE_DES_DISTANCES;
                                        /* Edition eventuelle introduite le 20080227180930...                                        */

     EDITION_DE_LA_MATRICE_DES_VOISINS;
                                        /* Edition eventuelle introduite le 20080227180930...                                        */

     DoIn(index
         ,PREMIER_ELEMENT_D_UN_FICHIER
         ,DERNIER_ELEMENT_D_UN_FICHIER
         ,I
          )
          Bblock
          Test(IL_FAUT(utiliser_les_coordonnees_cartesiennes_en_sortie))
               Bblock
               CAL2(Prin0(" X="));
               EDITION_DANS_gOPERATION_SUR_LES_FICHIERS(ELEMENT_DU_FICHIER_LISTE_X(index));
               CAL2(Prin0(" Y="));
               EDITION_DANS_gOPERATION_SUR_LES_FICHIERS(ELEMENT_DU_FICHIER_LISTE_Y(index));
               CAL2(Prin0(" Z="));
               EDITION_DANS_gOPERATION_SUR_LES_FICHIERS(ELEMENT_DU_FICHIER_LISTE_Z(index));
                                        /* Edition du triplet {X,Y,Z}.                                                               */
               Eblock
          ATes
               Bblock
               CAL2(Prin0(" rho="));
               EDITION_DANS_gOPERATION_SUR_LES_FICHIERS(ELEMENT_DU_FICHIER_LISTE_RHO_(index));
               CAL2(Prin0(" phi="));
               EDITION_DANS_gOPERATION_SUR_LES_FICHIERS(ELEMENT_DU_FICHIER_LISTE_PHI_(index));
               CAL2(Prin0(" theta="));
               EDITION_DANS_gOPERATION_SUR_LES_FICHIERS(ELEMENT_DU_FICHIER_LISTE_THETA(index));
                                        /* Edition du triplet {rho,phi,theta}.                                                       */
               Eblock
          ETes

          CAL2(Prin0("\n"));
                                        /* ATTENTION : on notera bien l'espace qui est mis en bout de ligne (de meme celui qui       */
                                        /* a ete mis en debut de ligne precedemment, devant le "X=" par exemple) ; ceci est destine  */
                                        /* a faciliter la recuperation et la manipulation du fichier ainsi produit (par exemple,     */
                                        /* 'v $xiirs/.PSPH.21.1.$U Xx')...                                                           */
          Eblock
     EDoI

     FdTb2(matrice_des_voisins
          ,nombre_maximal_d_elements_dans_le_fichier,nombre_maximal_d_elements_dans_le_fichier
          ,Int
          ,ADRESSE_NON_ENCORE_DEFINIE
           );
                                        /* Matrice des voisins de chaque point (introduite le 20080227101546). L'element {i,j}       */
                                        /* donne le j-ieme voisin du point d'index 'i'.                                              */
     FdTb2(matrice_des_distances
          ,nombre_maximal_d_elements_dans_le_fichier,nombre_maximal_d_elements_dans_le_fichier
          ,Float
          ,ADRESSE_NON_ENCORE_DEFINIE
           );
                                        /* Liberation de la matrice des distances des points deux a deux (introduite le              */
                                        /* 20080226090233...).                                                                       */

     lGENERATION_D_UN_FICHIER(liste_initiale_des_Z,Z_IMPLICITE);
     lGENERATION_D_UN_FICHIER(liste_initiale_des_Y,Y_IMPLICITE);
     lGENERATION_D_UN_FICHIER(liste_initiale_des_X,X_IMPLICITE);
     lGENERATION_D_UN_FICHIER(liste_initiale_des_THETA,THETA_IMPLICITE);
     lGENERATION_D_UN_FICHIER(liste_initiale_des_PHI_,PHI__IMPLICITE);
     lGENERATION_D_UN_FICHIER(liste_initiale_des_RHO_,RHO__IMPLICITE);

     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.