#!/bin/csh ####################################################################################################################################### # # # G E N E R A T I O N D U F I L M S U R L A D Y N A M I Q U E I N T E R N E D U M E S O N : # # # # # # Utilisation : # # # # $xrq/meson.L2$Z # # # # # # Author of '$xrq/meson.L2$Z' : # # # # Jean-Francois Colonna (LACTAMME, AAAAMMJJhhmmss). # # # ####################################################################################################################################### source $xrq/proton.K2.2$Y # Definition du choix des machines a utiliser pour generer le film. # source $xrq/nucleon.L4.1$Y # Preparation eventuelle de l'enregistrement... # source $xrq/nucleon.L4.2$Y # Quelques parametres... # set imageO=1 # Definition du numero de la premiere image. # set imageV=$imageO # Definition de la premiere image a visualiser. # set Nimages=1050 # Definition du nombre d'images a generer. # set simultanees=8 # Nombre d'images simultanees autorisees (autrefois, je prenais '32', mais depuis # # l'introduction de l'option 'Pal', je suis passe a '8'...). En fait, ce parametre n'a plus # # d'importance (voir 'Fstore_fichier_non_formatte(...)' dans 'v $xig/fonct$vv$FON'). # set positionnement="p0=$imageO pV=$imageV" set convolution="noyau_variable=FAUX cNOIR=FAUX convolution=1 facteur=0.100" set accumulation="trainees=VRAI renormaliser=VRAI attenuation_des_trainees=0.80 attenuation_des_images=0.20 mode=0" set evenements="graine=1789" set evenements="$evenements ""ralentissement=0.1100 particules=600" set evenements="$evenements ""auto_reguler=VRAI Eregulation=1 Cregulation=40.0" set evenements="$evenements ""injection=VRAI injectionI=FAUX injectionS=VRAI neq=22000 neaq=22000 neg=44000 nefqv=2400" set evenements="$evenements ""caracteristique=FAUX" # Definition des parametres fondamentaux. # set imageN = $imageO @ imageN = $imageN + $Nimages @ imageN = $imageN - 1 # Definition du numero de la derniere image. # set stereo0="0.00" set stereoD="0.04" set stereoG="-0.04" set stereo=$stereo0 set Stereo="stereo=$stereo" # Choix du mode stereoscopique. # # # # 'stereo0' --> absent, # # 'stereoD' --> DROITE, # # 'stereoG' --> GAUCHE. # set InomT="MESO" # On choisit un nom court afin de ne pas avoir de problemes avec la # # constante 'LONGUEUR_MAXIMALE_D_UN_NOM_RELATIF_DE_FICHIER'. # switch ("$stereo") # Definition du nom relatif des images. # case "$stereo0": breaksw case "$stereoD": set InomT="$InomT$DROITE" breaksw case "$stereoG": set InomT="$InomT$GAUCHE" breaksw default: EROR "Mode stereoscopique non reconnu." breaksw endsw source $xrq/proton.K2.1$Y # Definition du choix du directory de generation des images. # source $xrq/nucleon.L2.3$Y # Pour fixer ou modifier des parametres de derniere minute... # set images="$DnomT$InomT" set generation="R=$images simultanees=$simultanees synchroniser=FAUX trace=FAUX messages=FAUX parametres=VRAI chronometrer=FAUX" set generation="$generation ""randomiser=FAUX interieur=1.0 exterieur=1.0 seuil=0.9 vqR=VRAI vaqR=VRAI" set generation="$generation ""rqR=0.0280e-15 rqV=0.0280e-15 rg=0.0093e-15 nnsG=4 npsG=4 dvG=0.4" # Definition des arguments d'entrees-sorties ; plusieurs possibilites : # # # # nnsG=16 npsG=16 dvG=0.1 : bien esthetiquement, mais tres lent, # # nnsG=8 npsG=8 dvG=0.2 # # nnsG=4 npsG=4 dvG=0.4 : quatre fois plus rapide, et degradation acceptable... # # # @ npA = $imageO # Definition de 'npA' (numero de la premiere periode), # @ npX = $imageN # Definition de 'npX' (numero de la derniere periode). # @ npB = $npX * 10 @ npB = $npB / 42 @ npC = $npX * 30 @ npC = $npC / 42 @ npD = $npX * 42 @ npD = $npD / 42 if ($npB <= $npA) then @ npB = $npA + 1 else endif if ($npC <= $npB) then @ npC = $npB + 1 else endif if ($npD <= $npC) then @ npD = $npC + 1 else endif alias valeurs 'set valD=(\!:1) ; set valA=(\!:2) ; set Fval="\!:3" ; \\ set D1=1 ; set D2=`expr $D1 + 1` ; set D3=`expr $D2 + 1` ; \\ set A1=$D1 ; set A2=$D2 ; set A3=$D3 ; \\ set Depart = "D=$valD[$D1] vD=$valD[$D2] dD=$valD[$D3]" ; \\ set Arrivee = "A=$valA[$A1] vA=$valA[$A2] dA=$valA[$A3]" ; \\ $xci/valeurs_inte$X $Depart $Arrivee cubique=VRAI >>! $Fval ; \\ unset valD valA Fval D1 D2 D3 A1 A2 A3 Depart Arrivee' # Generation incrementale des fichiers des transformations par interpolation cubique. # # On notera que les valeurs generees par '$xci/valeurs_trig$X' seront translatees ensuite # # dans '$xrq/meson.L0$X' d'une quantite egale a 1.0 (representant le rayon). On veut avoir # # une variation pour les coordonnees du type (donnee pour 'X') : # # # # X = Xo + (Xo - Xn).sin(t) # # # # or : # # # # X = R + D # # # # ou : # # # # R = "rayon" de la particule, # # D = distance a la position standard de cette particule REELle. # # # # d'ou : # # # # Xo = R + Do # # Xn = R + Dn # # # # et : # # # # (R+D) = (R+Do) + [(R+Do) - (R+Dn)].sin(t) # # # # d'ou : # # # # D = Do + (Do - Dn).sin(t) # # # # ce que l'on identifie a : # # # # D = c + b.sin(t) + a.cos(t) # # # # d'ou : # # # # a = 0 # # b = Do - Dn # # c = Do # # # # ou encore : # # # # a = 0 # # b = Xo - Xn # # c = Xo - R # # # # Enfin, on n'oubliera pas les positions relatives du quark et de l'anti-quark REELs : # # # # _ # # Q # # . # # # # Q # # # set Rayon = 1.00 # Argument : # # # # R # set Gamma = 0.30 # Argument : # # # # c = Do # # c = Xo - R # # c = 1.3 - 1.0 # # c = 0.3 # set MDfinale = 0.35 set Dfinale = -$MDfinale # Argument : # # # # Dn = Xn - R # # Dn = 0.65 - 1.0 # # Dn = -0.35 # set Beta = 0.65 # B = Xo - Xn # # b = 1.3 - 0.65 # # b = 0.65 # alias oscille 'set valD=(\!:1) ; set valA=(\!:2) ; set Fval="\!:3" ; set rayon=\!:4 ; set beta=\!:5 ; set gamma=\!:6 ; \\ set D1=1 ; set D2=`expr $D1 + 1` ; set D3=`expr $D2 + 1` ; \\ set A1=$D1 ; set A2=$D2 ; set A3=$D3 ; \\ set Depart = "D=$valD[$D1] aD=$valD[$D2] daD=$valD[$D3]" ; \\ set Arrivee = "A=$valA[$A1] aA=$valA[$A2] daA=$valA[$A3]" ; \\ $xci/valeurs_trig$X $Depart $Arrivee rD=$rayon rA=$rayon a=0.0 b=$beta c=$gamma cubique=FAUX >>! $Fval ; \\ unset valD valA Fval rayon beta gamma D1 D2 D3 A1 A2 A3 Depart Arrivee' # Generation incrementale des fichiers des transformations par lignes trigonometriques. # set luminance = "$K_VIDE" set luminance = "$luminance ""$K_VIDE" set translate = "$K_VIDE" set translate = "$translate ""$K_VIDE" FileTmpB Fzoom set zoom1 = ($npA 1.000000 00.000000) set zoom2 = ($npB 1.000000 00.000000) set zoom3 = ($npC 0.750000 00.000000) set zoom4 = ($npD 0.100000 00.000000) valeurs $zoom1 $zoom2 $Fzoom valeurs $zoom2 $zoom3 $Fzoom valeurs $zoom3 $zoom4 $Fzoom set zoom = "$K_VIDE" set zoom = "$zoom ""ZOOM=$Fzoom" set rot_OX = "$K_VIDE" set rot_OX = "$rot_OX ""$K_VIDE" set rot_OY = "$K_VIDE" set rot_OY = "$rot_OY ""$K_VIDE" set rot_OZ = "$K_VIDE" set rot_OZ = "$rot_OZ ""$K_VIDE" FileTmpB FXquark set Xquark1 = ($npA 0.000000 00.000000) set Xquark21 = ($npC 4.712389 00.000000) set Xquark22 = ($npC $MDfinale 00.000000) set Xquark3 = ($npD $MDfinale 00.000000) oscille $Xquark1 $Xquark21 $FXquark $Rayon -$Beta -$Gamma valeurs $Xquark22 $Xquark3 $FXquark set Xquark = "$K_VIDE" set Xquark = "$Xquark ""X_quark_REEL=$FXquark" FileTmpB FYquark set Yquark1 = ($npA 0.000000 00.000000) set Yquark21 = ($npC 4.712389 00.000000) set Yquark22 = ($npC $MDfinale 00.000000) set Yquark3 = ($npD $MDfinale 00.000000) oscille $Yquark1 $Yquark21 $FYquark $Rayon -$Beta -$Gamma valeurs $Yquark22 $Yquark3 $FYquark set Yquark = "$K_VIDE" set Yquark = "$Yquark ""Y_quark_REEL=$FYquark" FileTmpB FXkrauq set Xkrauq1 = ($npA 0.000000 00.000000) set Xkrauq21 = ($npC 4.712389 00.000000) set Xkrauq22 = ($npC $Dfinale 00.000000) set Xkrauq3 = ($npD $Dfinale 00.000000) oscille $Xkrauq1 $Xkrauq21 $FXkrauq $Rayon $Beta $Gamma valeurs $Xkrauq22 $Xkrauq3 $FXkrauq set Xkrauq = "$K_VIDE" set Xkrauq = "$Xkrauq ""X_anti_quark_REEL=$FXkrauq" FileTmpB FYkrauq set Ykrauq1 = ($npA 0.000000 00.000000) set Ykrauq21 = ($npC 4.712389 00.000000) set Ykrauq22 = ($npC $Dfinale 00.000000) set Ykrauq3 = ($npD $Dfinale 00.000000) oscille $Ykrauq1 $Ykrauq21 $FYkrauq $Rayon $Beta $Gamma valeurs $Ykrauq22 $Ykrauq3 $FYkrauq set Ykrauq = "$K_VIDE" set Ykrauq = "$Ykrauq ""Y_anti_quark_REEL=$FYkrauq" set Lumiere = "$K_VIDE" set Lumiere = "$Lumiere ""Lx=1.000000e-15" set Lumiere = "$Lumiere ""Ly=1.000000e-15" set Lumiere = "$Lumiere ""Lz=1.000000e-15" # Definition de la source lumineuse, telle que pratiquement toutes les particules soient # # derriere elle par rapport a l'observateur... # set transformation= "$K_VIDE" set transformation="$transformation $luminance" set transformation="$transformation $translate" set transformation="$transformation $zoom" set transformation="$transformation $rot_OX $rot_OY $rot_OZ" set transformation="$transformation $Xquark $Yquark $Xkrauq $Ykrauq" # Definition de la suite des transformations. # Pal # Definition du format des images 'Pal'... # if ($Simulateur == $EXIST) then $DELETE_VALIDE $images* >& $nul # Et ce afin, en particulier de ne pas se tromper dans la synchronisation. # nohup $xrq/meson.L0$X np=$Nimages $evenements $transformation $convolution $accumulation $positionnement $Lumiere \ $Stereo $generation $formatI & # Le programme de simulation est lance en parallele, et se synchronise sur # # les etats d'espace disque insuffisant, quant au programme de calcul des # # trainees, il se synchronise sur l'existence de l'image (J). # else endif if ($Enregistreur == $EXIST) then if ("$mHOTE" == "$mDKVP") then set continuer=$EXIST set imageJ=$imageV # Premiere image a enregistrer (J). # set Tinit="Initialisation" # La premiere fois on fera une grande initialisation... # set compteur=1 # Compteur des images. # while ($continuer == $EXIST) set numero=`$xci/nombres$X p=$imageJ d=$imageJ` set Snumero=$Sep$numero # Numero de l'image J. # set attendre=$EXIST # Afin de pouvoir attendre l'image J. # while ($attendre == $EXIST) if ((-e $images$ROUGE$Snumero) && \ (-e $images$VERTE$Snumero) && \ (-e $images$BLEUE$Snumero)) then SIZE $images$ROUGE$Snumero @ tROUGE=$Fsize SIZE $images$VERTE$Snumero @ tVERTE=$Fsize SIZE $images$BLEUE$Snumero @ tBLEUE=$Fsize if (($tROUGE == $tailleI) && \ ($tVERTE == $tailleI) && \ ($tBLEUE == $tailleI)) then set attendre=$NEXIST # Des que l'image J existe (avec la bonne taille), on arrete d'attendre, et ainsi, et ainsi, # # on va pouvoir l'enregistrer. Cette mecanique est destinee a permettre certaines erreurs # # d'entrees-sorties (voir le probleme dans 'xig/fonct$vv$FON' avec 'NFS' dans la fonction # # 'Fstore_fichier_non_formatte(...)'). # else sleep $TEMPORISATION # Si l'image n'a pas la bonne taille, on attend un peu avant de relancer le test... # endif else sleep $TEMPORISATION # Si l'image n'existe pas, on attend un peu avant de relancer le test... # endif end if ($compteur == 1) then set mode=$debutS_DKVP else if ($compteur < $Nimages) then set mode=$ajoutS_DKVP else set mode=$finS_DKVP endif endif Pushd $DnomT # Ainsi on se place dans le directory des images a cause de '$xci/disk_video_P$Z'. # $MV $InomT$ROUGE$Snumero $InomT$Snumero$ROUGE $MV $InomT$VERTE$Snumero $InomT$Snumero$VERTE $MV $InomT$BLEUE$Snumero $InomT$Snumero$BLEUE # On notera que durant l'operation '$xci/disk_video_P$Z' les images '$InomT$ROUGE$Snumero', # # '$InomT$VERTE$Snumero' et '$InomT$BLEUE$Snumero' ont change de nom (permutation de # # l'indice de couleur et du numero) et qu'ainsi '$xrq/meson.L0$X' les considere comme # # inexistantes (voir l'option 'simultanees='), leur destruction reelle n'ayant lieu qu'apres. # $xci/disk_video_P$Z $InomT$Sep $numero $numero $RVB_DKVP \ $Disque $Face $Tinit $mode \ "$formatI" \ $Gamma_meson_LX # Enregistrement de l'image courante. # $DELETE_VALIDE $InomT$Snumero$ROUGE $DELETE_VALIDE $InomT$Snumero$VERTE $DELETE_VALIDE $InomT$Snumero$BLEUE # ATTENTION : ces trois destructions peuvent etre partiellement, voire totalement, # # ineffectives : c'est le cas ou ces images seraient sur un volume 'NFS', et que le # # serveur correspondant serait temporairement (durant l'un ou plusieurs des 'del') hors # # service (voir les coupures de courant, pour lesquelles 'LACT11' est plus sensible que # # les autres...). # Popd set Tinit="rien" # Les fois suivantes on ne fera rien ... # @ imageJ = $imageJ + 1 # Changement de premiere image a accumuler (J). # if ($imageJ > $imageN) then set continuer=$NEXIST # Et on a fini... # else endif $xci/feu_vert$X feu=$feu_meson_LX # Et on synchronise '$xrq/meson.L0$X' quelle que soit l'option 'simultanees=' # # dans '$generation'. # @ compteur = $compteur + 1 # Et comptage des images. # end $xci/feu_init$X feu=$feu_meson_LX $DELETE_VALIDE $images* >& $nul # Parce que l'on est propre... # else endif else endif sleep $MINUTE sleep $MINUTE # Cette attente avant la destruction est mise en place afin que dans le cas ou : # # # # set Simulateur=$NEXIST # # # # le programme de simulation ait le temps de lire les fichiers en cause... # FileTmpE Fzoom FileTmpE FXquark FileTmpE FYquark FileTmpE FXkrauq FileTmpE FYkrauq # Et elimination des fichiers des transformations... #