/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N S D E S V E R I F I C A T I O N S D E C O H E R E N C E : */
/* */
/* */
/* Author of '$xrq/nucleon.LY.2$I' : */
/* */
/* Jean-Francois Colonna (LACTAMME, 1992??????????). */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* Q U E L Q U E S P E T I T E S " C O R R E C T I O N S " E V E N T U E L L E S : */
/* */
/*************************************************************************************************************************************/
#ifndef RANDOMISER_LA_VISUALISATION_DES_PARTICULES
# define RANDOMISER_LA_VISUALISATION_DES_PARTICULES \
LUNDEF
DEFV(Local,DEFV(Logical,INIT(randomiser_la_visualisation_des_particules,RANDOMISER_LA_VISUALISATION_DES_PARTICULES)));
/* Inutilise, mais du au choix entre '$xrq/nucleon.LS.1$I' et '$xrq/nucleon.LS.2$I'. */
#Aifndef RANDOMISER_LA_VISUALISATION_DES_PARTICULES
#Eifndef RANDOMISER_LA_VISUALISATION_DES_PARTICULES
#ifndef RAYON_INTERIEUR_RELATIF_D_UNE_PARTICULE
# define RAYON_INTERIEUR_RELATIF_D_UNE_PARTICULE \
FLOT__UNDEF
DEFV(Local,DEFV(Float,INIT(rayon_interieur_relatif_d_une_particule,RAYON_INTERIEUR_RELATIF_D_UNE_PARTICULE)));
/* Inutilise, mais du au choix entre '$xrq/nucleon.LS.1$I' et '$xrq/nucleon.LS.2$I'. */
#Aifndef RAYON_INTERIEUR_RELATIF_D_UNE_PARTICULE
#Eifndef RAYON_INTERIEUR_RELATIF_D_UNE_PARTICULE
#ifndef RAYON_EXTERIEUR_RELATIF_D_UNE_PARTICULE
# define RAYON_EXTERIEUR_RELATIF_D_UNE_PARTICULE \
FLOT__UNDEF
DEFV(Local,DEFV(Float,INIT(rayon_exterieur_relatif_d_une_particule,RAYON_EXTERIEUR_RELATIF_D_UNE_PARTICULE)));
/* Inutilise, mais du au choix entre '$xrq/nucleon.LS.1$I' et '$xrq/nucleon.LS.2$I'. */
#Aifndef RAYON_EXTERIEUR_RELATIF_D_UNE_PARTICULE
#Eifndef RAYON_EXTERIEUR_RELATIF_D_UNE_PARTICULE
#ifndef SEUIL_DE_RANDOMISATION_DES_PARTICULES
# define SEUIL_DE_RANDOMISATION_DES_PARTICULES \
FLOT__UNDEF
DEFV(Local,DEFV(Float,INIT(seuil_de_randomisation_des_particules,SEUIL_DE_RANDOMISATION_DES_PARTICULES)));
/* Inutilise, mais du au choix entre '$xrq/nucleon.LS.1$I' et '$xrq/nucleon.LS.2$I'. */
#Aifndef SEUIL_DE_RANDOMISATION_DES_PARTICULES
#Eifndef SEUIL_DE_RANDOMISATION_DES_PARTICULES
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* Q U E L Q U E S V E R I F I C A T I O N S D E C O H E R E N C E : */
/* */
/*************************************************************************************************************************************/
#if ( (defined(SYSTEME_SG4D20G_IRIX)) \
|| (defined(SYSTEME_SG4D25TG_IRIX)) \
|| (defined(SYSTEME_SG4D310VGX_IRIX)) \
|| (defined(SYSTEME_SG4D35TG_IRIX)) \
|| (defined(SYSTEME_SG4D85GT_IRIX)) \
|| (defined(SYSTEME_SGIND308_IRIX)) \
|| (defined(SYSTEME_SGIND324_IRIX)) \
|| (defined(SYSTEME_SGIND3GA_IRIX)) \
|| (defined(SYSTEME_SGIND408_IRIX)) \
|| (defined(SYSTEME_SGIND424_IRIX)) \
|| (defined(SYSTEME_SGIND4GA_IRIX)) \
|| (defined(SYSTEME_SGIND508_IRIX)) \
|| (defined(SYSTEME_SGIND524_IRIX)) \
|| (defined(SYSTEME_SGIND5GA_IRIX)) \
|| (defined(SYSTEME_SGIND808_IRIX)) \
|| (defined(SYSTEME_SGIND824_IRIX)) \
|| (defined(SYSTEME_SGIND8GA_IRIX)) \
|| (defined(SYSTEME_SGINDA08_IRIX)) \
|| (defined(SYSTEME_SGINDA24_IRIX)) \
|| (defined(SYSTEME_SGINDAGA_IRIX)) \
|| (defined(SYSTEME_SGO200A1_IRIX)) \
|| (defined(SYSTEME_SGO200A2_IRIX)) \
|| (defined(SYSTEME_SGO200A4_IRIX)) \
|| (defined(SYSTEME_SGO25224_IRIX)) \
|| (defined(SYSTEME_SGO252VA_IRIX)) \
|| (defined(SYSTEME_SGO252VN_IRIX)) \
|| (defined(SYSTEME_SGPCM801_IRIX)) \
|| (defined(SYSTEME_SGPCMA01_IRIX)) \
)
# define VERIFICATIONS_DES_FEUX \
Bblock \
/* Etant donnees les nouvelles definitions des feux (voir 'v $xiii/files$DEF'), valider ces */ \
/* derniers n'a plus d'interet ; la sequence correspondante est donc supprimee... */ \
Eblock
#Aif ( (defined(SYSTEME_SG4D20G_IRIX)) \
|| (defined(SYSTEME_SG4D25TG_IRIX)) \
|| (defined(SYSTEME_SG4D310VGX_IRIX)) \
|| (defined(SYSTEME_SG4D35TG_IRIX)) \
|| (defined(SYSTEME_SG4D85GT_IRIX)) \
|| (defined(SYSTEME_SGIND308_IRIX)) \
|| (defined(SYSTEME_SGIND324_IRIX)) \
|| (defined(SYSTEME_SGIND3GA_IRIX)) \
|| (defined(SYSTEME_SGIND408_IRIX)) \
|| (defined(SYSTEME_SGIND424_IRIX)) \
|| (defined(SYSTEME_SGIND4GA_IRIX)) \
|| (defined(SYSTEME_SGIND508_IRIX)) \
|| (defined(SYSTEME_SGIND524_IRIX)) \
|| (defined(SYSTEME_SGIND5GA_IRIX)) \
|| (defined(SYSTEME_SGIND808_IRIX)) \
|| (defined(SYSTEME_SGIND824_IRIX)) \
|| (defined(SYSTEME_SGIND8GA_IRIX)) \
|| (defined(SYSTEME_SGINDA08_IRIX)) \
|| (defined(SYSTEME_SGINDA24_IRIX)) \
|| (defined(SYSTEME_SGINDAGA_IRIX)) \
|| (defined(SYSTEME_SGO200A1_IRIX)) \
|| (defined(SYSTEME_SGO200A2_IRIX)) \
|| (defined(SYSTEME_SGO200A4_IRIX)) \
|| (defined(SYSTEME_SGO25224_IRIX)) \
|| (defined(SYSTEME_SGO252VA_IRIX)) \
|| (defined(SYSTEME_SGO252VN_IRIX)) \
|| (defined(SYSTEME_SGPCM801_IRIX)) \
|| (defined(SYSTEME_SGPCMA01_IRIX)) \
)
# define VERIFICATIONS_DES_FEUX \
Bblock \
/* Etant donnees les nouvelles definitions des feux (voir 'v $xiii/files$DEF'), valider ces */ \
/* derniers n'a plus d'interet ; la sequence correspondante est donc supprimee... */ \
Eblock
#Eif ( (defined(SYSTEME_SG4D20G_IRIX)) \
|| (defined(SYSTEME_SG4D25TG_IRIX)) \
|| (defined(SYSTEME_SG4D310VGX_IRIX)) \
|| (defined(SYSTEME_SG4D35TG_IRIX)) \
|| (defined(SYSTEME_SG4D85GT_IRIX)) \
|| (defined(SYSTEME_SGIND308_IRIX)) \
|| (defined(SYSTEME_SGIND324_IRIX)) \
|| (defined(SYSTEME_SGIND3GA_IRIX)) \
|| (defined(SYSTEME_SGIND408_IRIX)) \
|| (defined(SYSTEME_SGIND424_IRIX)) \
|| (defined(SYSTEME_SGIND4GA_IRIX)) \
|| (defined(SYSTEME_SGIND508_IRIX)) \
|| (defined(SYSTEME_SGIND524_IRIX)) \
|| (defined(SYSTEME_SGIND5GA_IRIX)) \
|| (defined(SYSTEME_SGIND808_IRIX)) \
|| (defined(SYSTEME_SGIND824_IRIX)) \
|| (defined(SYSTEME_SGIND8GA_IRIX)) \
|| (defined(SYSTEME_SGINDA08_IRIX)) \
|| (defined(SYSTEME_SGINDA24_IRIX)) \
|| (defined(SYSTEME_SGINDAGA_IRIX)) \
|| (defined(SYSTEME_SGO200A1_IRIX)) \
|| (defined(SYSTEME_SGO200A2_IRIX)) \
|| (defined(SYSTEME_SGO200A4_IRIX)) \
|| (defined(SYSTEME_SGO25224_IRIX)) \
|| (defined(SYSTEME_SGO252VA_IRIX)) \
|| (defined(SYSTEME_SGO252VN_IRIX)) \
|| (defined(SYSTEME_SGPCM801_IRIX)) \
|| (defined(SYSTEME_SGPCMA01_IRIX)) \
)
#ifdef __VERSION__GENERATION_D_UN_NUCLEON
# define VERIFICATIONS_DES_VITESSES \
Bblock \
Test(IFGE(longF3D(vitesse_initiale_du_quark_REEL_ROUGE),VITESSE_DE_LA_LUMIERE)) \
Bblock \
PRINT_ERREUR("la vitesse initiale du quark REEL ROUGE est [supra-]lumineuse"); \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
Test(IFGE(longF3D(vitesse_initiale_du_quark_REEL_VERTE),VITESSE_DE_LA_LUMIERE)) \
Bblock \
PRINT_ERREUR("la vitesse initiale du quark REEL VERTE est [supra-]lumineuse"); \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
Test(IFGE(longF3D(vitesse_initiale_du_quark_REEL_BLEUE),VITESSE_DE_LA_LUMIERE)) \
Bblock \
PRINT_ERREUR("la vitesse initiale du quark REEL BLEUE est [supra-]lumineuse"); \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
Eblock
#Aifdef __VERSION__GENERATION_D_UN_NUCLEON
#Eifdef __VERSION__GENERATION_D_UN_NUCLEON
#ifdef __VERSION__GENERATION_D_UN_MESON
# define VERIFICATIONS_DES_VITESSES \
Bblock \
Test(IFGE(longF3D(vitesse_initiale_du_quark_REEL),VITESSE_DE_LA_LUMIERE)) \
Bblock \
PRINT_ERREUR("la vitesse initiale du quark REEL est [supra-]lumineuse"); \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
Test(IFGE(longF3D(vitesse_initiale_de_l_anti_quark_REEL),VITESSE_DE_LA_LUMIERE)) \
Bblock \
PRINT_ERREUR("la vitesse initiale de l'anti-quark REEL est [supra-]lumineuse"); \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
Eblock
#Aifdef __VERSION__GENERATION_D_UN_MESON
#Eifdef __VERSION__GENERATION_D_UN_MESON
#ifdef __VERSION__GENERATION_D_UN_DI_ELECTRON
# define VERIFICATIONS_DES_VITESSES \
Bblock \
Test(IFGE(longF3D(vitesse_initiale_de_l_electron_1_REEL),VITESSE_DE_LA_LUMIERE)) \
Bblock \
PRINT_ERREUR("la vitesse initiale de l'electron 1 REEL est [supra-]lumineuse"); \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
Test(IFGE(longF3D(vitesse_initiale_de_l_electron_2_REEL),VITESSE_DE_LA_LUMIERE)) \
Bblock \
PRINT_ERREUR("la vitesse initiale de l'electron 2 REEL est [supra-]lumineuse"); \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
Test(IFGE(longF3D(vitesse_initiale_de_l_anti_electron_REEL),VITESSE_DE_LA_LUMIERE)) \
Bblock \
PRINT_ERREUR("la vitesse initiale de l'anti-electron REEL est [supra-]lumineuse"); \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
Test(IFGE(longF3D(vitesse_initiale_du_neutrino_REEL),VITESSE_DE_LA_LUMIERE)) \
Bblock \
PRINT_ERREUR("la vitesse initiale du neutrino REEL est [supra-]lumineuse"); \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
Eblock
#Aifdef __VERSION__GENERATION_D_UN_DI_ELECTRON
#Eifdef __VERSION__GENERATION_D_UN_DI_ELECTRON
#ifdef __VERSION__GENERATION_DU_VIDE
# define VERIFICATIONS_DES_VITESSES \
Bblock \
Eblock
#Aifdef __VERSION__GENERATION_DU_VIDE
#Eifdef __VERSION__GENERATION_DU_VIDE
#define ___QUELQUES_VERIFICATIONS_AU_DEBUT_DE_LA_SIMULATION \
Bblock \
\
VERIFICATIONS_DES_FEUX; \
\
Test(IFOU(IFNE(pasX,PasX),IFNE(pasY,PasY))) \
Bblock \
PRINT_ERREUR("le sous-echantillonnage des images n'est pas possible"); \
EGAL(pasX,PasX); \
EGAL(pasY,PasY); \
/* Et on corrige... */ \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
Test(IFOU(IFOU(IFNE(Xmin,Xmin_IMAGE),IFNE(Xmax,Xmax_IMAGE)) \
,IFOU(IFNE(Ymin,Ymin_IMAGE),IFNE(Ymax,Ymax_IMAGE)) \
) \
) \
Bblock \
PRINT_ERREUR("le format des images est incompatible avec le format de l'univers de la simulation"); \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
Test(IFET(IL_FAUT(generer_les_trainees) \
,IFNE(numero_de_la_periode_courante,numero_de_la_premiere_periode_a_visualiser) \
) \
) \
Bblock \
PRINT_ERREUR("il n'est pas possible de se repositionner et de calculer les trainees"); \
/* Malgre tout, on ne corrige pas, car en effet, cela peut servir quand meme... */ \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
Test(IFOU(IZLT(rayon_interieur_relatif_d_une_particule) \
,IFGT(rayon_interieur_relatif_d_une_particule,rayon_exterieur_relatif_d_une_particule) \
) \
) \
Bblock \
PRINT_ERREUR("les parametres de 'randomisation' sont incorrects"); \
/* Malgre tout, on ne corrige pas, car en effet, cela peut servir quand meme... */ \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
Test(I3ET(IL_FAUT(generer_les_trainees) \
,IFEQ(mode_de_generation_des_trainees,CALCUL_STANDARD_DES_TRAINEES) \
,IFNE_a_peu_pres_relatif(facteur_d_attenuation_des_images \
,COMP(facteur_d_attenuation_des_trainees) \
,FRA10(FRA10(FU)) \
) \
) \
) \
Bblock \
PRINT_ATTENTION("les trainees risquent d'etre saturees"); \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
Test(IFEXff(nombre_de_points_du_noyau_de_convolution \
,ABSENCE_DE_CONVOLUTION \
,NOMBRE_MAXIMAL_DE_POINTS_DU_NOYAU_DE_CONVOLUTION \
) \
) \
Bblock \
PRINT_ERREUR("le noyau de convolution est trop grand, il va etre corrige"); \
EGAL(nombre_de_points_du_noyau_de_convolution \
,MIN2(NOMBRE_MAXIMAL_DE_POINTS_DU_NOYAU_DE_CONVOLUTION \
,MAX2(ABSENCE_DE_CONVOLUTION \
,nombre_de_points_du_noyau_de_convolution \
) \
) \
); \
/* Lorsque le nombre de points du noyau de convolution est trop incorrect, on le corrige... */ \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
Test(I3OU(IFNE(NEGA(Xmin_ESPACE),Xmax_ESPACE) \
,IFNE(NEGA(Ymin_ESPACE),Ymax_ESPACE) \
,IFNE(NEGA(Zmin_ESPACE),Zmax_ESPACE) \
) \
) \
Bblock \
PRINT_ERREUR("la definition de l'espace doit etre symetrique par rapport a l'origine"); \
/* Cette validation est liee, en particulier, a la constante 'TRANSLATION_DE_CENTRAGE'. */ \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
Test(IFGT(nombre_de_periodes_de_la_simulation,NOMBRE_MAXIMAL_DE_PERIODES_DE_LA_SIMULATION)) \
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 \
\
VERIFICATIONS_DES_VITESSES; \
\
Test(IFLT(adolescence_d_une_particule \
,DIVI(voisinage_1_D1_D2 \
,MIN2(VITESSE_MOYENNE_DES_QUARKS_ET_DES_ANTI_QUARKS \
,VITESSE_DES_GLUONS \
) \
) \
) \
) \
Bblock \
PRINT_ATTENTION("des particules emises risquent d'etre immediatement reabsorbees"); \
/* Cette validation est liee aux tentatives d'evitement des reabsorbtions immediates de */ \
/* particules, immediatement apres une emission... */ \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
Test(IFLT(voisinage_1_D1_D2 \
,DISTANCE_PARCOURUE(MAX2(VITESSE_MOYENNE_DES_QUARKS_ET_DES_ANTI_QUARKS \
,VITESSE_DES_GLUONS \
) \
,PERIODE_COURANTE_DE_L_HORLOGE \
) \
) \
) \
Bblock \
PRINT_ATTENTION("des collisions du type 'cible visee' risquent d'etre manquees"); \
/* En effet, lorsqu'une particule (gluon en general) va a la rencontre d'une particule */ \
/* cible a la suite de 'RECHERCHE_D_UNE_PARTICULE(...)', la collision prevue va avoir lieu */ \
/* a un instant 'Tc' tres precis, et il n'y a que peu de chances que 'Tc' corresponde a un */ \
/* un instant d'echantillonnage temporel de la simulation (c'est-a-dire qu'en general, 'Tc' */ \
/* n'est pas un multiple de la periode 'PERIODE_COURANTE_DE_L_HORLOGE'). Dans ces conditions */ \
/* si 'voisinage_1_D1_D2' est trop petit, il y a de fortes chances que les deux particules */ \
/* "collisionnables" ne soient jamais vues suffisamment proches l'une de l'autre pour que la */ \
/* collision soit reellement detectee par 'COLLISION(...)'. */ \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
Eblock \
/* Quelques verifications sur la coherence des parametres au debut de la simulation... */
BFonctionI
DEFV(LoF,GENERE__Fonction__OPT(QUELQUES_VERIFICATIONS_AU_DEBUT_DE_LA_SIMULATION,U,___QUELQUES_VERIFICATIONS_AU_DEBUT_DE_LA_SIMULATION))
EFonctionI
#define ___QUELQUES_VERIFICATIONS_AU_COURS_DE_LA_SIMULATION \
Bblock \
\
Test(IFNE(nombre_instantane_de_particules \
,ADD2(ADD2(ADD2(ADD2(nombre_instantane_de_quarks_REELs,nombre_instantane_d_anti_quarks_REELs) \
,ADD2(nombre_instantane_de_quarks_VIRTUELs,nombre_instantane_d_anti_quarks_VIRTUELs) \
) \
,ADD2(nombre_instantane_de_gluons_REELs \
,nombre_instantane_de_gluons_VIRTUELs \
) \
) \
,ADD4(ADD2(ADD2(nombre_instantane_d_electrons_REELs,nombre_instantane_d_anti_electrons_REELs) \
,ADD2(nombre_instantane_d_electrons_VIRTUELs,nombre_instantane_d_anti_electrons_VIRTUELs) \
) \
,ADD2(nombre_instantane_de_neutrinos_REELs \
,nombre_instantane_de_neutrinos_VIRTUELs \
) \
,ADD2(nombre_instantane_de_photons_REELs \
,nombre_instantane_de_photons_VIRTUELs \
) \
,ADD2(nombre_instantane_de_z0s_REELs \
,nombre_instantane_de_z0s_VIRTUELs \
) \
) \
) \
) \
) \
Bblock \
PRINT_ERREUR("le nombre de particules est incoherent"); \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
Eblock \
/* Quelques verifications sur la coherence des variables au cours de la simulation... */
BFonctionI
DEFV(LoF,GENERE__Fonction__OPT(QUELQUES_VERIFICATIONS_AU_COURS_DE_LA_SIMULATION,U,___QUELQUES_VERIFICATIONS_AU_COURS_DE_LA_SIMULATION))
EFonctionI