/*************************************************************************************************************************************/
/* */
/* S U B S T I T U T I O N D E C O O R D O N N E E S C A R T E S I E N N E S : */
/* */
/* */
/* Definition : */
/* */
/* On dispose de trois listes de coordonnees */
/* cartesiennes {X,Y,Z}. La premiere donne la */
/* liste des coordonnees a substituer : */
/* */
/* LISTE_X */
/* LISTE_Y */
/* LISTE_Z */
/* */
/* dont la longueur est definie par "nombre_elements=""ne=". */
/* */
/* Les deux secondes definissent les substitutions */
/* a operer dans les listes ci-dessus : */
/* */
/* RECHERCHER_OX --> SUBSTITUTION_OX */
/* RECHERCHER_OY --> SUBSTITUTION_OY */
/* RECHERCHER_OZ --> SUBSTITUTION_OZ */
/* */
/* dont la longueur est definie par "nombre_substitutions=""ns=". */
/* */
/* */
/* Author of '$xrv/substitue.11$K' : */
/* */
/* Jean-Francois COLONNA (LACTAMME, 20150617084858). */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* 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 PONDERATION_OX_IMPLICITE \
FZERO
#define PONDERATION_OY_IMPLICITE \
FZERO
#define PONDERATION_OZ_IMPLICITE \
FZERO
/* Ponderation de selection des coordonnees apres transformation. */
#define EPSILON_DE_LA_SUBSTITUTION \
mgEPSILON \
/* Epsilon de selection de la substitution... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D E S F I C H I E R S D E C O O R D O N N E E S C A R T E S I E N N E S : */
/* */
/*************************************************************************************************************************************/
#include xrv/ARITHMET.1d.I"
/* Passage a l'allocation dynamique le 20060214185230... */
#include xrv/ARITHMET.21.I"
#include xrv/champs_5.41.I"
#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. */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D E S F I C H I E R S D E S U B S T I T U T I O N : */
/* */
/*************************************************************************************************************************************/
#define NOMBRE_MAXIMAL_DE_PERIODES_DE_LA_SIMULATION \
CENT_MILLE \
/* Definition du nombre d'elements de chacun des treize vecteurs suivants... */ \
/* */ \
/* ATTENTION : evidemment 'NOMBRE_MAXIMAL_DE_PERIODES_DE_LA_SIMULATION' est en fait le */ \
/* nombre maximal de substitutions et non pas un nombre maximal de periodes qui n'a pas */ \
/* de sens ici... */
#include xrq/particle.M2.I"
#include xrq/nucleon.L3.I"
#include xrq/nucleon.Lf.2.I"
dfTRANSFORMAT_31(liste_RECHERCHER_OX,fichier_RECHERCHER_OX,RECHERCHER_OX_IMPLICITE,FZERO)
dfTRANSFORMAT_31(liste_RECHERCHER_OY,fichier_RECHERCHER_OY,RECHERCHER_OY_IMPLICITE,FZERO)
dfTRANSFORMAT_31(liste_RECHERCHER_OZ,fichier_RECHERCHER_OZ,RECHERCHER_OZ_IMPLICITE,FZERO)
dfTRANSFORMAT_31(liste_SUBSTITUTION_OX,fichier_SUBSTITUTION_OX,SUBSTITUTION_OX_IMPLICITE,FZERO)
dfTRANSFORMAT_31(liste_SUBSTITUTION_OY,fichier_SUBSTITUTION_OY,SUBSTITUTION_OY_IMPLICITE,FZERO)
dfTRANSFORMAT_31(liste_SUBSTITUTION_OZ,fichier_SUBSTITUTION_OZ,SUBSTITUTION_OZ_IMPLICITE,FZERO)
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* S U B S T I T U T I O N D E C O O R D O N N E E S C A R T E S I E N N E S : */
/* */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
#include xrv/ARITHMET.22.I"
#include xci/valeurs.03.I"
#include xrv/champs_5.13.I"
DEFV(Float,INIT(ponderation_OX,PONDERATION_OX_IMPLICITE));
DEFV(Float,INIT(ponderation_OY,PONDERATION_OY_IMPLICITE));
DEFV(Float,INIT(ponderation_OZ,PONDERATION_OZ_IMPLICITE));
/* Ponderation de selection des coordonnees apres transformation. */
DEFV(Float,INIT(epsilon_de_la_substitution,EPSILON_DE_LA_SUBSTITUTION));
/* Epsilon de selection de la substitution... */
/*..............................................................................................................................*/
#include xrv/champs_5.1A.I"
iTRANSFORMAT_31(liste_RECHERCHER_OX,RECHERCHER_OX_IMPLICITE);
iTRANSFORMAT_31(liste_RECHERCHER_OY,RECHERCHER_OY_IMPLICITE);
iTRANSFORMAT_31(liste_RECHERCHER_OZ,RECHERCHER_OZ_IMPLICITE);
iTRANSFORMAT_31(liste_SUBSTITUTION_OX,SUBSTITUTION_OX_IMPLICITE);
iTRANSFORMAT_31(liste_SUBSTITUTION_OY,SUBSTITUTION_OY_IMPLICITE);
iTRANSFORMAT_31(liste_SUBSTITUTION_OZ,SUBSTITUTION_OZ_IMPLICITE);
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;
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
);
PROCESS_ARGUMENT_I("nombre_substitutions=""ns=",nombre_de_periodes_de_la_simulation
,BLOC(VIDE;)
,BLOC(
Bblock
PRINT_AVERTISSEMENT("'ns=' doit etre defini avant tout fichier");
Eblock
)
);
PROCESS_ARGUMENT_FICHIER("RECHERCHER_OX="
,fichier_RECHERCHER_OX
,liste_RECHERCHER_OX
,RECHERCHER_OX_IMPLICITE
,gTRANSFORMAT_31
);
PROCESS_ARGUMENT_FICHIER("RECHERCHER_OY="
,fichier_RECHERCHER_OY
,liste_RECHERCHER_OY
,RECHERCHER_OY_IMPLICITE
,gTRANSFORMAT_31
);
PROCESS_ARGUMENT_FICHIER("RECHERCHER_OZ="
,fichier_RECHERCHER_OZ
,liste_RECHERCHER_OZ
,RECHERCHER_OZ_IMPLICITE
,gTRANSFORMAT_31
);
PROCESS_ARGUMENT_FICHIER("SUBSTITUTION_OX="
,fichier_SUBSTITUTION_OX
,liste_SUBSTITUTION_OX
,SUBSTITUTION_OX_IMPLICITE
,gTRANSFORMAT_31
);
PROCESS_ARGUMENT_FICHIER("SUBSTITUTION_OY="
,fichier_SUBSTITUTION_OY
,liste_SUBSTITUTION_OY
,SUBSTITUTION_OY_IMPLICITE
,gTRANSFORMAT_31
);
PROCESS_ARGUMENT_FICHIER("SUBSTITUTION_OZ="
,fichier_SUBSTITUTION_OZ
,liste_SUBSTITUTION_OZ
,SUBSTITUTION_OZ_IMPLICITE
,gTRANSFORMAT_31
);
GET_ARGUMENT_F("epsilon_substitution=""epsub=",epsilon_de_la_substitution);
GET_ARGUMENT_F("px=""pX=""Pond1=",ponderation_OX);
/* A ne pas confondre avec 'v $xig/fonct$vv$DEF ENTREE_ARGUMENT_pasX'... */
GET_ARGUMENT_F("py=""pY=""Pond2=",ponderation_OY);
/* A ne pas confondre avec 'v $xig/fonct$vv$DEF ENTREE_ARGUMENT_pasY'... */
GET_ARGUMENT_F("pz=""pZ=""Pond3=",ponderation_OZ);
/* A ne pas confondre avec 'v $xig/fonct$vv$DEF ENTREE_ARGUMENT_pasZ'... */
PROCESS_ARGUMENTS_DE_PARAMETRAGE_DE_LA_GENERATION_DE_SUITE_DE_VALEURS_3;
PROCESS_ARGUMENTS_DE_PARAMETRAGE_DE_LA_GENERATION_DE_SUITE_DE_VALEURS_1;
PROCESS_ARGUMENTS_DE_PARAMETRAGE_DE_LA_GENERATION_DE_SUITE_DE_VALEURS_5;
/* Cette procedure fut introduite le 20211005105913... */
)
);
Test(IFGT(nombre_de_periodes_de_la_simulation,NOMBRE_MAXIMAL_DE_PERIODES_DE_LA_SIMULATION))
/* Test manquant introduit le 20150705003135... */
Bblock
PRINT_ERREUR("la simulation demandee est trop longue");
EGAL(nombre_de_periodes_de_la_simulation,NOMBRE_MAXIMAL_DE_PERIODES_DE_LA_SIMULATION);
/* Et on seuille le nombre de periodes... */
Eblock
ATes
Bblock
Eblock
ETes
gOPERATION_SUR_LES_FICHIERS(BLOC(
DEFV(Float,INIT(coordonnee_X,ELEMENT_DU_FICHIER_LISTE_X(index)));
DEFV(Float,INIT(coordonnee_Y,ELEMENT_DU_FICHIER_LISTE_Y(index)));
DEFV(Float,INIT(coordonnee_Z,ELEMENT_DU_FICHIER_LISTE_Z(index)));
/* Recuperation des coordonnees {X,Y,Z} courantes dans les fichiers. */
DEFV(Logical,INIT(chercher_une_substitution,VRAI));
DEFV(Int,INIT(numero_substitution_courante,NUMERO_DE_LA_PREMIERE_PERIODE_DE_LA_SIMULATION));
DEFV(Float,INIT(rechercher_X,FLOT__UNDEF));
DEFV(Float,INIT(rechercher_Y,FLOT__UNDEF));
DEFV(Float,INIT(rechercher_Z,FLOT__UNDEF));
DEFV(Float,INIT(substitution_X,FLOT__UNDEF));
DEFV(Float,INIT(substitution_Y,FLOT__UNDEF));
DEFV(Float,INIT(substitution_Z,FLOT__UNDEF));
Tant(IL_FAUT(chercher_une_substitution))
Bblock
EGAL(rechercher_X,sTRANSFORMAT_31(numero_substitution_courante,liste_RECHERCHER_OX));
EGAL(rechercher_Y,sTRANSFORMAT_31(numero_substitution_courante,liste_RECHERCHER_OY));
EGAL(rechercher_Z,sTRANSFORMAT_31(numero_substitution_courante,liste_RECHERCHER_OZ));
Test(IFEQ_Rpoints3D_a_peu_pres(coordonnee_X,coordonnee_Y,coordonnee_Z
,rechercher_X,rechercher_Y,rechercher_Z
,epsilon_de_la_substitution
)
)
Bblock
EGAL(substitution_X
,sTRANSFORMAT_31(numero_substitution_courante,liste_SUBSTITUTION_OX)
);
EGAL(substitution_Y
,sTRANSFORMAT_31(numero_substitution_courante,liste_SUBSTITUTION_OY)
);
EGAL(substitution_Z
,sTRANSFORMAT_31(numero_substitution_courante,liste_SUBSTITUTION_OZ)
);
EGAL(chercher_une_substitution,FAUX);
Eblock
ATes
Bblock
Test(IFLT(numero_substitution_courante
,LSTX(NUMERO_DE_LA_PREMIERE_PERIODE_DE_LA_SIMULATION
,nombre_de_periodes_de_la_simulation
)
)
)
Bblock
INCR(numero_substitution_courante,I);
/* Passage a la substitution suivante... */
Eblock
ATes
Bblock
PRINT_ERREUR("aucune substitution n'a pu etre selectionnee");
CAL1(Prer3("(le point en cause est {%+.^^^,%+.^^^,%+.^^^})\n"
,coordonnee_X
,coordonnee_Y
,coordonnee_Z
)
);
CAL1(Prer0("il est suggere d'augmenter 'epsilon_substitution='\n"));
EGAL(substitution_X,SUBSTITUTION_OX_IMPLICITE);
EGAL(substitution_Y,SUBSTITUTION_OY_IMPLICITE);
EGAL(substitution_Z,SUBSTITUTION_OZ_IMPLICITE);
EGAL(chercher_une_substitution,FAUX);
/* Et evidemment, on arrete d'iterer... */
Eblock
ETes
Eblock
ETes
Eblock
ETan
)
,LIZ3(ponderation_OX,substitution_X
,ponderation_OY,substitution_Y
,ponderation_OZ,substitution_Z
)
,EDITER_LA_VALEUR_RESULTANTE_DANS_gOPERATION_SUR_LES_FICHIERS
,nombre_d_exemplaires_du_resultat_de_l_operation_sur_les_valeurs_courantes
);
/* Substitution... */
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);
RETU_Commande;
Eblock
ECommande