#!/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 P R O T O N : #
# #
# #
# Utilisation : #
# #
# $xrq/proton.J4$Z #
# #
# #
# Author of '$xrq/proton.J4$Z' : #
# #
# Jean-Francois Colonna (LACTAMME, AAAAMMJJhhmmss). #
# #
#######################################################################################################################################
echo "ATTENTION : ne surtout pas se deloguer sous peine de perdre l'initialisation graphique et X-Window..."
set kill_DKVP=$EXIST
source $Fdisk_video_P
unset kill_DKVP
# Initialisations diverses avec '$xcg/kill$Z', mais a noter que ce dernier ne #
# sera plus fait par la suite lors des appels a '$xci/disk_video_P$Z'. #
set Disque=000000001
set Face=1
# Definition du disque sur lequel ecrire. #
set Sep=$K_sepP
# Definition du separateur des composantes d'un nom. #
set imageO=1
# Definition du numero de la premiere image. #
set imageV=$imageO
# Definition de la premiere image a visualiser. #
set Nimages=355
# 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'...). #
set positionnement="p0=$imageO pV=$imageV"
set convolution="convolution=9 cNOIR=FAUX"
set accumulation="trainees=VRAI renormaliser=VRAI attenuation_des_trainees=0.90 attenuation_des_images=0.10 mode=0"
set evenements="np=$Nimages ralentissement=0.1100 particules=3100"
# Definition des parametres fondamentaux. #
set evenements="$evenements ""nefqv=120"
set evenements="$evenements ""nuages=VRAI neq=44000 neaq=44000 neg=88000 reduction=0.0"
set evenements="$evenements ""pq=0.0"
set evenements="$evenements ""paq=0.0"
set evenements="$evenements ""pg=0.0"
set evenements="$evenements ""p_GxGxGxG___V=0.0"
set evenements="$evenements ""p_GxGxG___V=0.0"
set evenements="$evenements ""p_QxAQxG___V=0.0"
set evenements="$evenements ""p_QxG___Q=0.0"
set evenements="$evenements ""p_AQxG___AQ=0.0"
set evenements="$evenements ""p_QxAQ___G=0.0"
set evenements="$evenements ""p_GxG___G=0.0"
# Definition des evenements possibles. #
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="PROT"
# 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.J1.1$Y
# Definition du choix du directory de generation des images. #
set images="$DnomT$InomT"
set generation="R=$images couleurs=VRAI vqr=FAUX simultanees=$simultanees synchroniser=FAUX messages=FAUX parametres=VRAI"
# Definition des arguments d'entrees-sorties. #
@ npA = $imageO
@ npC = $npA + $Nimages
@ npC = $npC - 1
@ npB = $npC * 335
@ npB = $npB / 355
@ npD = $npC + 1
@ npE = $npD + 1
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
if ($npE <= $npD) then
@ npE = $npD + 1
else
endif
@ npX = $npE + 1
@ npY = $npX + 1
@ npZ = $npY + 1
set luminance = "$K_VIDE"
set luminance = "$luminance ""npl1=$npA l1=1.000 dl1=0"
set luminance = "$luminance ""npl2=$npB l2=1.000 dl2=0"
set luminance = "$luminance ""npl3=$npC l3=0.125 dl3=0"
set luminance = "$luminance ""npl4=$npD l4=1.000 dl4=0"
set luminance = "$luminance ""npl5=$npE l5=1.000 dl5=0"
set translate = "$K_VIDE"
set translate = "$translate ""npOX1=$npA OX1=0 dOX1=0"
set translate = "$translate ""npOX2=$npB OX2=0 dOX2=0"
set translate = "$translate ""npOX3=$npC OX3=0 dOX3=0"
set translate = "$translate ""npOX4=$npD OX4=0 dOX4=0"
set translate = "$translate ""npOX5=$npE OX5=0 dOX5=0"
set translate = "$translate ""npOY1=$npA OY1=0 dOY1=0"
set translate = "$translate ""npOY2=$npB OY2=0 dOY2=0"
set translate = "$translate ""npOY3=$npC OY3=0 dOY3=0"
set translate = "$translate ""npOY4=$npD OY4=0 dOY4=0"
set translate = "$translate ""npOY5=$npE OY5=0 dOY5=0"
set translate = "$translate ""npOZ1=$npA OZ1=0 dOZ1=0"
set translate = "$translate ""npOZ2=$npB OZ2=0 dOZ2=0"
set translate = "$translate ""npOZ3=$npC OZ3=0 dOZ3=0"
set translate = "$translate ""npOZ4=$npD OZ4=0 dOZ4=0"
set translate = "$translate ""npOZ5=$npE OZ5=0 dOZ5=0"
set zoom = "$K_VIDE"
set zoom = "$zoom ""npr1=$npA r1=1.00 dr1=0.0"
set zoom = "$zoom ""npr2=$npB r2=1.00 dr2=0.0"
set zoom = "$zoom ""npr3=$npC r3=1.00 dr3=0.0"
set zoom = "$zoom ""npr4=$npE r4=1.00 dr4=0.0"
set zoom = "$zoom ""npr5=$npX r5=1.00 dr5=0.0"
set rot_OX = "$K_VIDE"
set rot_OX = "$rot_OX ""npX1=$npA tX1=0 dtX1=0"
set rot_OX = "$rot_OX ""npX2=$npB tX2=0 dtX2=0"
set rot_OX = "$rot_OX ""npX3=$npC tX3=0 dtX3=0"
set rot_OX = "$rot_OX ""npX4=$npE tX4=0 dtX4=0"
set rot_OX = "$rot_OX ""npX5=$npX tX5=0 dtX5=0"
set rot_OY = "$K_VIDE"
set rot_OY = "$rot_OY ""npY1=$npA tY1=0 dtY1=0"
set rot_OY = "$rot_OY ""npY2=$npB tY2=0 dtY2=0"
set rot_OY = "$rot_OY ""npY3=$npC tY3=0 dtY3=0"
set rot_OY = "$rot_OY ""npY4=$npD tY4=0 dtY4=0"
set rot_OY = "$rot_OY ""npY5=$npE tY5=0 dtY5=0"
set rot_OZ = "$K_VIDE"
set rot_OZ = "$rot_OZ ""npZ1=$npA tZ1=0 dtZ1=0"
set rot_OZ = "$rot_OZ ""npZ2=$npB tZ2=0 dtZ2=0"
set rot_OZ = "$rot_OZ ""npZ3=$npC tZ3=0 dtZ3=0"
set rot_OZ = "$rot_OZ ""npZ4=$npD tZ4=0 dtZ4=0"
set rot_OZ = "$rot_OZ ""npZ5=$npE tZ5=0 dtZ5=0"
# ATTENTION : la forme simplifiee des constantes flottantes ('1' a la place de '1.000000' #
# par exemple) est liee au fait que la valeur des variables du C-Shell a une longueur #
# limitee (4096 octets ?), et que pour eviter le message d'erreur "Word too long.", j'en #
# suis venu a ces extremites... #
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="$luminance $translate $zoom $rot_OX $rot_OY $rot_OZ"
# Definition de la suite des transformations. #
Pal
# Definition du format des images 'Pal'... #
$DELETE_VALIDE $images* >& $nul
# Et ce afin, en particulier de ne pas se tromper dans la synchronisation. #
nohup $xrq/nucleon.L0$X $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). #
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
set attendre=$NEXIST
# Des que l'image J existe, on arrete d'attendre, et ainsi, on va pouvoir l'enregistrer. #
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/nucleon.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_proton_JX
# Enregistrement de l'image courante. #
$DELETE_VALIDE $InomT$Snumero$ROUGE
$DELETE_VALIDE $InomT$Snumero$VERTE
$DELETE_VALIDE $InomT$Snumero$BLEUE
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_proton_JX
# Et on synchronise '$xrq/nucleon.L0$X' quelle que soit l'option 'simultanees=' #
# dans '$generation'. #
@ compteur = $compteur + 1
# Et comptage des images. #
end
$xci/feu_init$X feu=$feu_proton_JX
$DELETE_VALIDE $images* >& $nul
# Parce que l'on est propre... #
else
endif
Copyright © Jean-François Colonna, 2019-2021.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / Ecole Polytechnique, 2019-2021.