#!/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.J2$Z                                                                                                  #
#                                                                                                                                     #
#                                                                                                                                     #
#         Author of '$xrq/proton.J2$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=1350
                                        # 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.68 attenuation_des_images=0.32 mode=0"

set       ralentissement="np=$Nimages ralentissement=0.1100 particules=3100 neq=22000 neaq=22000 neg=44000 nefqv=2400 nuages=VRAI"
                                        # 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="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 simultanees=$simultanees synchroniser=FAUX messages=FAUX parametres=VRAI"
                                        # Definition des arguments d'entrees-sorties.                                                 #

@         npA = $imageO

@         npE = $npA + $Nimages
@         npE = $npE - 1

@         npB = $npE * 166
@         npB = $npB / 1000

@         npC = $npE * 750
@         npC = $npC / 1000

@         npD = $npE * 1000
@         npD = $npD / 1000

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 dl1=0"
set       luminance = "$luminance ""npl2=$npB l2=1 dl2=0"
set       luminance = "$luminance ""npl3=$npC l3=1 dl3=0"
set       luminance = "$luminance ""npl4=$npD l4=1 dl4=0"
set       luminance = "$luminance ""npl5=$npE l5=1 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.65 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.000000 dtX1=00.00"
set       rot_OX    = "$rot_OX ""npX2=$npB tX2=0.000000 dtX2=00.00"
set       rot_OX    = "$rot_OX ""npX3=$npC tX3=4.712389 dtX3=09.00"
set       rot_OX    = "$rot_OX ""npX4=$npE tX4=6.283185 dtX4=11.00"
set       rot_OX    = "$rot_OX ""npX5=$npX tX5=0.000000 dtX5=00.00"

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   $ralentissement $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.