#!/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... #