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