#!/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.J0$Z                                                                                                  #
#                                                                                                                                     #
#                                                                                                                                     #
#         Nota :                                                                                                                      #
#                                                                                                                                     #
#                     Cette version est conservee pour des                                                                            #
#                   raisons de sentimentalite, mais est                                                                               #
#                   remplacee par '$xrq/proton.J1$Z'...                                                                               #
#                                                                                                                                     #
#                                                                                                                                     #
#         Author of '$xrq/proton.J0$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=1024
                                        # Definition du nombre d'images a generer.                                                    #
set       Ltrainees=16
                                        # Definition de la longueur des trainees.                                                     #
@         simultanees = 2 * $Ltrainees
                                        # Nombre d'images simultanees autorisees.                                                     #

set       positionnement="p0=$imageO pV=$imageV"

set       accumulation="pas=1 renormaliser=FAUX attenuation=0.847 fB=4.0"

set       ralentissement="np=$Nimages ralentissement=0.125 nefqv=2500 nuages=VRAI"
                                        # Definition des parametres fondamentaux.                                                     #

set       imageN=$imageO
@         imageN = $imageN + $Nimages
@         imageN = $imageN - 1
                                        # Definition du numero de la derniere image.                                                  #

source    $xrq/proton.J0.1$Y
                                        # Definition du choix du directory de generation des images.                                  #

set       generation="R=$images couleurs=VRAI trainees=FAUX simultanees=$simultanees synchroniser=FAUX messages=FAUX parametres=VRAI"
                                        # Definition des arguments d'entrees-sorties.                                                 #

@         npA = $imageO

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

@         npB = $npE / 8

@         npC = $npE / 2

@         npD = $npE * 6875
@         npD = $npD / 10000

@         npX = $npE + 1
@         npY = $npX + 1
@         npZ = $npY + 1

set       luminance = "$K_VIDE"
set       luminance = "$luminance ""npl1=$npA l1=1.000000 dl1=00.000000"
set       luminance = "$luminance ""npl2=$npB l2=1.000000 dl2=00.000000"
set       luminance = "$luminance ""npl3=$npC l3=1.000000 dl3=00.000000"
set       luminance = "$luminance ""npl4=$npD l4=1.000000 dl4=00.000000"
set       luminance = "$luminance ""npl5=$npE l5=1.000000 dl5=00.000000"

set       translate = "$K_VIDE"
set       translate = "$translate ""npOX1=$npA OX1=0.000000 dOX1=00.000000"
set       translate = "$translate ""npOX2=$npB OX2=0.000000 dOX2=00.000000"
set       translate = "$translate ""npOX3=$npC OX3=0.000000 dOX3=00.000000"
set       translate = "$translate ""npOX4=$npD OX4=0.000000 dOX4=00.000000"
set       translate = "$translate ""npOX5=$npE OX5=0.000000 dOX5=00.000000"
set       translate = "$translate ""npOY1=$npA OY1=0.000000 dOY1=00.000000"
set       translate = "$translate ""npOY2=$npB OY2=0.000000 dOY2=00.000000"
set       translate = "$translate ""npOY3=$npC OY3=0.000000 dOY3=00.000000"
set       translate = "$translate ""npOY4=$npD OY4=0.000000 dOY4=00.000000"
set       translate = "$translate ""npOY5=$npE OY5=0.000000 dOY5=00.000000"
set       translate = "$translate ""npOZ1=$npA OZ1=0.000000 dOZ1=00.000000"
set       translate = "$translate ""npOZ2=$npB OZ2=0.000000 dOZ2=00.000000"
set       translate = "$translate ""npOZ3=$npC OZ3=0.000000 dOZ3=00.000000"
set       translate = "$translate ""npOZ4=$npD OZ4=0.000000 dOZ4=00.000000"
set       translate = "$translate ""npOZ5=$npE OZ5=0.000000 dOZ5=00.000000"

set       zoom      = "$K_VIDE"
set       zoom      = "$zoom ""npr1=$npA r1=1.333333 dr1=00.000000"
set       zoom      = "$zoom ""npr2=$npC r2=1.333333 dr2=00.000000"
set       zoom      = "$zoom ""npr3=$npD r3=1.866666 dr3=00.000000"
set       zoom      = "$zoom ""npr4=$npE r4=1.333333 dr4=00.000000"
set       zoom      = "$zoom ""npr5=$npX r5=1.333333 dr5=00.000000"

set       rot_OX    = "$K_VIDE"
set       rot_OX    = "$rot_OX ""npX1=$npA tX1=0.000000 dtX1=00.000000"
set       rot_OX    = "$rot_OX ""npX2=$npB tX2=0.000000 dtX2=00.000000"
set       rot_OX    = "$rot_OX ""npX3=$npC tX3=3.141592 dtX3=12.500000"
set       rot_OX    = "$rot_OX ""npX4=$npD tX4=4.712389 dtX4=07.500000"
set       rot_OX    = "$rot_OX ""npX5=$npE tX5=6.283185 dtX5=00.000000"

set       rot_OY    = "$K_VIDE"
set       rot_OY    = "$rot_OY ""npY1=$npA tY1=0.000000 dtY1=00.000000"
set       rot_OY    = "$rot_OY ""npY2=$npB tY2=0.000000 dtY2=00.000000"
set       rot_OY    = "$rot_OY ""npY3=$npC tY3=0.000000 dtY3=00.000000"
set       rot_OY    = "$rot_OY ""npY4=$npD tY4=0.000000 dtY4=00.000000"
set       rot_OY    = "$rot_OY ""npY5=$npE tY5=0.000000 dtY5=00.000000"

set       rot_OZ    = "$K_VIDE"
set       rot_OZ    = "$rot_OZ ""npZ1=$npA tZ1=0.000000 dtZ1=00.000000"
set       rot_OZ    = "$rot_OZ ""npZ2=$npC tZ2=0.000000 dtZ2=00.000000"
set       rot_OZ    = "$rot_OZ ""npZ3=$npD tZ3=0.500000 dtZ3=00.500000"
set       rot_OZ    = "$rot_OZ ""npZ4=$npE tZ4=0.523599 dtZ4=00.000000"
set       rot_OZ    = "$rot_OZ ""npZ5=$npX tZ5=0.000000 dtZ5=00.000000"

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.                    #
$xrq/nucleon.L0$X   $ralentissement $transformation $generation $positionnement $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+L-1).                             #

set       continuer=$EXIST
set       imageJ=$imageV
                                        # Premiere image a accumuler (J).                                                             #
set       imageJpL=$imageO
                                        # Derniere image a accumuler (J+L-1).                                                         #
@         imageJ_JpL = $imageO + $Ltrainees
@         imageJ_JpL = $imageJ_JpL - 1
                                        # Pour savoir a partir de quand incrementer 'imageJ'.                                         #

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=$imageJpL d=$imageJpL`
          set       Snumero=$Sep$numero
                                        # Numero de l'image J+L-1.                                                                    #
          set       attendre=$EXIST
                                        # Afin de pouvoir attendre l'image J+L-1.                                                     #
          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+L-1 existe, on arrete d'attendre, et ainsi, on va pouvoir                 #
                                        # lancer le calcul des trainees sur la sequence (J,J+1,...,J+L-1).                            #
                    else
                    sleep     $TEMPORISATION
                                        # Si l'image n'existe pas, on attend un peu avant de relancer le test...                      #
                    endif
          end

          set       DnomT=$xT
          set       InomT="PROTON"
          set       RnomT=$DnomT$K_sepS$InomT
          set       nomT=$RnomT$Snumero
                                        # Nom des images contenant l'accumulation courante, mais on notera que                        #
                                        # contrairement a d'habitude, on n'utilise pas '`Getmp`', car en effet,                       #
                                        # sinon, les noms generes sont trop longs...                                                  #
          if        (-e "$nomT$ROUGE") then
                    $DELETE_VALIDE      $nomT$ROUGE
          else
          endif
          if        (-e "$nomT$VERTE") then
                    $DELETE_VALIDE      $nomT$VERTE
          else
          endif
          if        (-e "$nomT$BLEUE") then
                    $DELETE_VALIDE      $nomT$BLEUE
          else
          endif

          $xci/accumule.01$X  A=$images$ROUGE$Sep premiere=$imageJ derniere=$imageJpL $accumulation R=$nomT$ROUGE $formatI
          $xci/accumule.01$X  A=$images$VERTE$Sep premiere=$imageJ derniere=$imageJpL $accumulation R=$nomT$VERTE $formatI
          $xci/accumule.01$X  A=$images$BLEUE$Sep premiere=$imageJ derniere=$imageJpL $accumulation R=$nomT$BLEUE $formatI
                                        # Calcul des trainees sur la sequence (J,J+1,...,J+L-1).                                      #

          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'.            #

          $xci/disk_video_P$Z $InomT$Sep $numero $numero $RVB_DKVP $Disque $Face $Tinit $mode "$formatI" $Gamma_proton_JX
                                        # Enregistrement de la trainee courante (J,J+1,...,J+L-1).                                    #

          Popd
          set       Tinit="rien"
                                        # Les fois suivantes on ne fera rien ...                                                      #

          if        (-e "$nomT$ROUGE") then
                    $DELETE_VALIDE      $nomT$ROUGE
          else
          endif
          if        (-e "$nomT$VERTE") then
                    $DELETE_VALIDE      $nomT$VERTE
          else
          endif
          if        (-e "$nomT$BLEUE") then
                    $DELETE_VALIDE      $nomT$BLEUE
          else
          endif

          if        ($imageJpL >= $imageJ_JpL) then
                                        # Cas ou l'on a fait au moins 'Ltrainees' images :                                            #
                    $DELETE_VALIDE      $images$ROUGE$Sep`$xci/nombres$X p=$imageJ d=$imageJ`
                    $DELETE_VALIDE      $images$VERTE$Sep`$xci/nombres$X p=$imageJ d=$imageJ`
                    $DELETE_VALIDE      $images$BLEUE$Sep`$xci/nombres$X p=$imageJ d=$imageJ`
                                        # Destruction de l'image (J).                                                                 #
                    @         imageJ = $imageJ + 1
                                        # Changement de premiere image a accumuler (J).                                               #
          else
                                        # Cas ou l'on a fait moins de 'Ltrainees' images : on est au debut, on ne touche              #
                                        # donc ni a 'imageJ', ni a l'image (J).                                                       #
          endif
          @         imageJpL = $imageJpL + 1
                                        # Changement de derniere image a accumuler (J+L-1).                                           #
          if        ($imageJpL > $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...                                                                #



Copyright © Jean-François Colonna, 2019-2021.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / Ecole Polytechnique, 2019-2021.