Compare commits
3 Commits
2b7012667a
...
60dac4d948
Author | SHA1 | Date | |
---|---|---|---|
|
60dac4d948 | ||
|
bf487c389c | ||
|
34da09281e |
@ -7,36 +7,15 @@ dans lequel se déplacent des **bloubs**, lesquels sont
|
|||||||
des sortes de particule
|
des sortes de particule
|
||||||
munie de certaines propriétés (age, grosseur, vitesses, etc...).
|
munie de certaines propriétés (age, grosseur, vitesses, etc...).
|
||||||
Lesquelles valeurs peuvent évoluer en fonction du temps.
|
Lesquelles valeurs peuvent évoluer en fonction du temps.
|
||||||
|
Tout est expliqué dans ce [document](doc/what-is-a-bloub.md).
|
||||||
|
|
||||||
## Description d'un bloub
|
la structure d'un bloub est (presque) simple, en fait.
|
||||||
|
|
||||||
Attention cette description n'est qu'un exemple, mais les points
|
|
||||||
essentiels de la première étape sont là.
|
|
||||||
Les caractériques dynamiques : position et vélocités.
|
|
||||||
Coté physique : l'age en bloubcycle (avec un maximum), la taille,
|
|
||||||
un petit nom, et un état (coucou la FSM).
|
|
||||||
|
|
||||||
|
|
||||||
```
|
|
||||||
type t_bloubs
|
|
||||||
character(8) :: nick
|
|
||||||
logical :: alive
|
|
||||||
integer :: state
|
|
||||||
integer :: num ! ???
|
|
||||||
real :: px, py, pz
|
|
||||||
real :: vx, vy, vz
|
|
||||||
real :: radius
|
|
||||||
integer :: age, agemax
|
|
||||||
end type t_bloubs
|
|
||||||
```
|
|
||||||
|
|
||||||
C'est (preseque) simple, en fait.
|
|
||||||
Le plus compliqué, c'est de savoir quoi faire de ce fatras
|
Le plus compliqué, c'est de savoir quoi faire de ce fatras
|
||||||
de *bigdata*.
|
de *bigdata*.
|
||||||
|
|
||||||
On peut fabriquer des gazillions de bloubs, et ensuite
|
On peut fabriquer des gazillions de bloubs, et ensuite
|
||||||
les lacher dans un espace clôt, avec des parois
|
les lacher dans un espace clôt, avec des parois
|
||||||
rebondissantes. Chaque choc va un peu les user, et au bout d'un moment,
|
rebondissantes.
|
||||||
|
Chaque choc va un peu les user, et au bout d'un moment,
|
||||||
ils vont mourir. C'est comme ça, c'est la vie des bloubs.
|
ils vont mourir. C'est comme ça, c'est la vie des bloubs.
|
||||||
|
|
||||||
## Comment ça fonctionne ?
|
## Comment ça fonctionne ?
|
||||||
@ -45,8 +24,6 @@ Pas trop mal pour un premier jet. Il suffit de lire
|
|||||||
le script `runme.sh` pour avoir une idée de l'enchainement
|
le script `runme.sh` pour avoir une idée de l'enchainement
|
||||||
des opérations. Lequel enchainement est décrit plus bas.
|
des opérations. Lequel enchainement est décrit plus bas.
|
||||||
|
|
||||||
## Les logiciels
|
|
||||||
|
|
||||||
Pour le moment, l'ensemble des opérations est gérée par un script shell
|
Pour le moment, l'ensemble des opérations est gérée par un script shell
|
||||||
qui enchaine des opérations plus élémentaires. Oui, je sais, ce n'est
|
qui enchaine des opérations plus élémentaires. Oui, je sais, ce n'est
|
||||||
pas optimal, mais c'est un cadre idéal pour les bricolages hasardeux.
|
pas optimal, mais c'est un cadre idéal pour les bricolages hasardeux.
|
||||||
@ -55,11 +32,16 @@ Ces opérations agissent sur des fichiers de type `.blbs` qui sont,
|
|||||||
vu du fortran, des dumps séquentiels du type t_bloubs. Un format
|
vu du fortran, des dumps séquentiels du type t_bloubs. Un format
|
||||||
de fichier qui va être modifié assez souvent, ne gardez pas d'archives.
|
de fichier qui va être modifié assez souvent, ne gardez pas d'archives.
|
||||||
|
|
||||||
|
## Les logiciels
|
||||||
|
|
||||||
|
|
||||||
### genbloubs
|
### genbloubs
|
||||||
|
|
||||||
Fabrication d'une population de bloubs plus ou moins aléatoires.
|
Fabrication d'une population de bloubs plus ou moins aléatoires.
|
||||||
Deux paramètres : le nom du fichier et le nombre de bloubs.
|
Deux paramètres : le nom du fichier (extention `.blbs`)
|
||||||
|
et le nombre de bloubs désirés.
|
||||||
Les règles de génération *devraient* être paramétrables.
|
Les règles de génération *devraient* être paramétrables.
|
||||||
|
[source](genbloubs.f90)
|
||||||
|
|
||||||
### movebloubs
|
### movebloubs
|
||||||
|
|
||||||
@ -67,9 +49,9 @@ Le cœur actif du système : c'est lui qui, à chaque tick, va déplacer
|
|||||||
les bloubs, gérer les rebonds avec la boudary-box, éliminer les
|
les bloubs, gérer les rebonds avec la boudary-box, éliminer les
|
||||||
bloubs usés par les chocs, et faire naitre de nouveaux bloubs
|
bloubs usés par les chocs, et faire naitre de nouveaux bloubs
|
||||||
si le besoin s'en fait sentir.
|
si le besoin s'en fait sentir.
|
||||||
|
Seul problème, il n'a pas de notion directe du temps, parce qu'il est juste de passage dans un pipeline.
|
||||||
|
[source](movebloubs.f90)
|
||||||
|
|
||||||
Seul problème, il n'a pas de notion directe du temps, parce qu'il est
|
|
||||||
juste de passage dans un pipeline.
|
|
||||||
|
|
||||||
### exportbloubs
|
### exportbloubs
|
||||||
|
|
||||||
@ -77,13 +59,16 @@ Sortie sur `stdout` de certaines propriétes des bloubs, qui seront
|
|||||||
reprise par un (ou des) scripts écrits en `awk`, afin de générer
|
reprise par un (ou des) scripts écrits en `awk`, afin de générer
|
||||||
ce qu'il faut pour les différents moteurs de rendu.
|
ce qu'il faut pour les différents moteurs de rendu.
|
||||||
**Le format de sortie est susceptible de changer sans préavis.**
|
**Le format de sortie est susceptible de changer sans préavis.**
|
||||||
|
Bon, pour le moment, dans les formats il n'y a que POVray,
|
||||||
|
mais Gnuplot et/ou Rdata arriveront bien un de ces jours.[source](exportbloubs.f90)
|
||||||
|
|
||||||
|
|
||||||
Bon, pour le moment, il n'y a que POVray, mais Gnuplot arrivera en second.
|
|
||||||
|
|
||||||
### mergebloubs
|
### mergebloubs
|
||||||
|
|
||||||
Alors, celui-ci, il n'est pas vraiment au point. Il faut tout ré-écrire
|
Alors, celui-ci, il n'est pas vraiment au point. Il faut tout ré-écrire
|
||||||
et faire gaffe à l'explosion quadratique.
|
et faire gaffe à l'explosion quadratique.
|
||||||
|
[source](mergebloubs.f90)
|
||||||
|
|
||||||
## TODO
|
## TODO
|
||||||
|
|
||||||
|
@ -17,6 +17,7 @@ module bloubspace
|
|||||||
real :: vx, vy, vz
|
real :: vx, vy, vz
|
||||||
real :: radius
|
real :: radius
|
||||||
integer :: age, agemax
|
integer :: age, agemax
|
||||||
|
integer :: red, green, blue
|
||||||
end type t_bloubs
|
end type t_bloubs
|
||||||
|
|
||||||
type t_boundingbox
|
type t_boundingbox
|
||||||
@ -37,7 +38,7 @@ module bloubspace
|
|||||||
integer :: fd, errcode
|
integer :: fd, errcode
|
||||||
character(200) :: message
|
character(200) :: message
|
||||||
|
|
||||||
print *, "try to load ", infile
|
print *, "try to load ", infile, " name ", name
|
||||||
|
|
||||||
! put some default values
|
! put some default values
|
||||||
where%id = "default"
|
where%id = "default"
|
||||||
@ -68,7 +69,7 @@ module bloubspace
|
|||||||
|
|
||||||
! ----------------------------------------------------------------
|
! ----------------------------------------------------------------
|
||||||
|
|
||||||
subroutine random_pv (blb)
|
subroutine make_a_random_bloub(blb)
|
||||||
type(t_bloubs), intent (out) :: blb
|
type(t_bloubs), intent (out) :: blb
|
||||||
|
|
||||||
blb%px = 3.57 * (rand() - 0.50)
|
blb%px = 3.57 * (rand() - 0.50)
|
||||||
|
@ -2,14 +2,24 @@
|
|||||||
|
|
||||||
## Philosophie
|
## Philosophie
|
||||||
|
|
||||||
Bonne question, mais nous n'avons pas le temps, point suivant ?
|
Bonne question, mais nous n'avons pas le temps, point
|
||||||
|
suivant ? En fait, si, il est tard, mais j'ai envie de
|
||||||
|
raconter des conneries.
|
||||||
|
|
||||||
En fait, si, il est tard, mais j'ai envie de raconter des
|
Un bloub est une entité mathématique qui vit
|
||||||
conneries.
|
dans un espace cartésien abstrait, bien que normé.
|
||||||
|
Il peut aussi être borné, soit en mode "boite", soit
|
||||||
|
en mode "tore". La notion de champ de gravité est
|
||||||
|
ignoré, parce qu'un bloub se moque d'avoir une masse.
|
||||||
|
Par contre les bloubs peuvent interagir entre eux
|
||||||
|
de divers manières : rebond (genre billard), échange
|
||||||
|
de données, fusion volumique...
|
||||||
|
|
||||||
## Technique
|
## Technique
|
||||||
|
|
||||||
Voici la version du _Sat 19 Feb 2022 12:37:42 AM CET_
|
Voici la version du _Sat 19 Feb 2022 12:37:42 AM CET_,
|
||||||
|
c'est à dire complètement différente de l'état actuel
|
||||||
|
du logiciel.
|
||||||
|
|
||||||
```
|
```
|
||||||
type t_bloubs
|
type t_bloubs
|
||||||
@ -23,17 +33,28 @@ Voici la version du _Sat 19 Feb 2022 12:37:42 AM CET_
|
|||||||
end type t_bloubs
|
end type t_bloubs
|
||||||
```
|
```
|
||||||
|
|
||||||
Certains champs sont assez explicites, comme le nick, la position
|
Certains champs sont assez explicites, comme le *nick*,
|
||||||
dans l'espace, le rayon (pour nous, un bloub est
|
la position dans l'espace, le rayon (pour nous, un bloub est
|
||||||
une entité abstraite assimilable à une bubulle)
|
une entité abstraite assimilable à une bubulle) ou la vitesse
|
||||||
ou la vitesse sur les trois axes.
|
sur les trois directions de l'espace bloubeux.
|
||||||
D'autres, comme `alive`, sont
|
D'autres, comme `alive`, sont plus délicates à expliquer,
|
||||||
plus délicates à expliquer, sauf si l'on considère que les
|
sauf si l'on considère que les bloubs sont zombifiables.
|
||||||
bloubs sont zombifiables.
|
|
||||||
|
|
||||||
D'autres, comme l'age, sont bien plus sujettes à de diverses
|
D'autres, comme l'age, sont bien plus sujettes à de diverses
|
||||||
interprétations. doit-on incrémenter l'age à chaque tick d'horloge
|
interprétations. doit-on incrémenter l'age à chaque tick d'horloge
|
||||||
ou à chaque évènement discret ? Et à quel age un bloub devient-il
|
ou à chaque évènement discret ? Et à quel age un bloub devient-il
|
||||||
trop vieux, à quel age va-t-il mourir ?
|
trop vieux, à quel age va-t-il mourir ?
|
||||||
|
|
||||||
|
## Et pour la suite ?
|
||||||
|
|
||||||
|
Au fil du temps, le bloub évolue et se complexifie.
|
||||||
|
La prochaine itération sera dotée d'un attribut de couleur et
|
||||||
|
d'amusantes fonctions pour mixer ces couleurs si deux bloubs
|
||||||
|
se trouvent à fusionner.
|
||||||
|
On peut aussi envisager de les munir d'un spin non entier
|
||||||
|
dans le but assumé d'augmenter la complexité des rencontres
|
||||||
|
interbloubs.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -39,7 +39,7 @@ program exportbloubs
|
|||||||
endif
|
endif
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
write(0, '(1X, I8, A)') compte, " bloubs exported"
|
write(0, '(1X, I0, A)') compte, " bloubs exported"
|
||||||
|
|
||||||
close(idu)
|
close(idu)
|
||||||
|
|
||||||
|
@ -33,7 +33,7 @@ program genbloubs
|
|||||||
|
|
||||||
bloub%nick = 'noname '
|
bloub%nick = 'noname '
|
||||||
bloub%num = i + 41
|
bloub%num = i + 41
|
||||||
call random_pv(bloub)
|
call make_a_random_bloub(bloub)
|
||||||
bloub%radius = 0.035 + (0.03*rand())
|
bloub%radius = 0.035 + (0.03*rand())
|
||||||
|
|
||||||
write(idu) bloub ! no error control ?
|
write(idu) bloub ! no error control ?
|
||||||
|
@ -54,7 +54,7 @@ program mergebloubs
|
|||||||
enddo
|
enddo
|
||||||
|
|
||||||
call spit_bloubs_to_file (outfile, bloubs, nbgot)
|
call spit_bloubs_to_file (outfile, bloubs, nbgot)
|
||||||
print *, contacts, "contacts pour ", nbgot, "bloubs"
|
! print *, contacts, "contacts pour ", nbgot, "bloubs"
|
||||||
|
|
||||||
! STOP 'mergebloubs [done]'
|
! STOP 'mergebloubs [done]'
|
||||||
|
|
||||||
|
@ -83,28 +83,28 @@ program movebloubs
|
|||||||
|
|
||||||
enddo ! end of main loop
|
enddo ! end of main loop
|
||||||
|
|
||||||
write(0, '(I5,1X,A)') compteur, "bloubs processed"
|
write(0, '(1X,I0,1X,A)') compteur, "bloubs processed"
|
||||||
|
|
||||||
! ok, we have read all the bloubs in the input file
|
! ok, we have read all the bloubs in the input file
|
||||||
|
|
||||||
! insert some fancy conditional here
|
! insert some fancy conditional here
|
||||||
if (compteur .LT. 200) then
|
if (compteur .LT. 200) then
|
||||||
call add_more_bloubs(outu, 4, 0.1056)
|
call add_more_bloubs(outu, 4, 0.026)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
! insert some very fancy conditional here
|
! insert some very fancy conditional here
|
||||||
if (compteur .LT. 800) then
|
if (compteur .LT. 800) then
|
||||||
rnd = rand()
|
rnd = rand()
|
||||||
write (0, '(A,1X,F9.6)') "try to add bloubs, rnd is", rnd
|
! write (0, '(A,1X,F9.6)') "try to add bloubs, rnd is", rnd
|
||||||
if (rnd .LT. 0.0604) then
|
if (rnd .LT. 0.0604) then
|
||||||
call add_more_bloubs(outu, 11, 0.099)
|
call add_more_bloubs(outu, 11, 0.019)
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
close(inu) ; close(outu)
|
close(inu) ; close(outu)
|
||||||
|
|
||||||
if (killed .GT. 0) then
|
if (killed .GT. 0) then
|
||||||
write (0, '(I5,A)') killed, " bloubs killed"
|
write (0, '(1X,I0,A)') killed, " bloubs killed"
|
||||||
endif
|
endif
|
||||||
|
|
||||||
bx = bx / dble(compteur)
|
bx = bx / dble(compteur)
|
||||||
@ -127,8 +127,8 @@ contains
|
|||||||
do foo=1, count
|
do foo=1, count
|
||||||
|
|
||||||
bloub%nick = 'newbie '
|
bloub%nick = 'newbie '
|
||||||
call random_pv(bloub)
|
call make_a_random_bloub(bloub)
|
||||||
bloub%radius = rayon + (0.15*rand())
|
bloub%radius = rayon + (0.05*rand())
|
||||||
bloub%age = 1
|
bloub%age = 1
|
||||||
bloub%alive = .TRUE.
|
bloub%alive = .TRUE.
|
||||||
bloub%num = mod(irand(), 42)
|
bloub%num = mod(irand(), 42)
|
||||||
|
@ -7,16 +7,16 @@
|
|||||||
|
|
||||||
INCFILE="WS/bloubs.inc"
|
INCFILE="WS/bloubs.inc"
|
||||||
TMPPNG="/dev/shm/bloubs7.png"
|
TMPPNG="/dev/shm/bloubs7.png"
|
||||||
POVOPT="+Q9 +a -v -d -W1600 -H1200 -WT2"
|
POVOPT="+Q9 -a -v -d -W1600 -H1200 -WT2"
|
||||||
DDIR="frames/a"
|
DDIR="frames/a"
|
||||||
LOGERR="log.error"
|
LOGERR="log.error"
|
||||||
TXTCOLOR="GreenYellow"
|
TXTCOLOR="#db7000"
|
||||||
|
|
||||||
# --- put the work file in ramdisk
|
# --- put the work file in ramdisk
|
||||||
BLBS_IN="/dev/shm/in.blbs"
|
BLBS_IN="/dev/shm/in.blbs"
|
||||||
BLBS_OUT="/dev/shm/out.blbs"
|
BLBS_OUT="/dev/shm/out.blbs"
|
||||||
|
|
||||||
NBIMG=3000
|
NBIMG=120
|
||||||
|
|
||||||
make all
|
make all
|
||||||
err=$?
|
err=$?
|
||||||
@ -31,7 +31,7 @@ printf "\n#declare NbImg = %d;\n" $NBIMG > WS/nbimg.inc
|
|||||||
# first, we have to make a seminal buch of bloubs
|
# first, we have to make a seminal buch of bloubs
|
||||||
# --> this function need to be parametrizable
|
# --> this function need to be parametrizable
|
||||||
#
|
#
|
||||||
./genbloubs ${BLBS_IN} 3
|
./genbloubs ${BLBS_IN} 50
|
||||||
|
|
||||||
for idx in $(seq 0 $((NBIMG-1)) )
|
for idx in $(seq 0 $((NBIMG-1)) )
|
||||||
do
|
do
|
||||||
@ -43,11 +43,11 @@ do
|
|||||||
povray -Iscene.pov -K${idx} -O${TMPPNG} ${POVOPT} 2> $LOGERR
|
povray -Iscene.pov -K${idx} -O${TMPPNG} ${POVOPT} 2> $LOGERR
|
||||||
if [ 0 -ne $? ] ; then
|
if [ 0 -ne $? ] ; then
|
||||||
tail -15 $LOGERR
|
tail -15 $LOGERR
|
||||||
sleep 30
|
sleep 90
|
||||||
fi
|
fi
|
||||||
|
|
||||||
td=$(date +'%F %R:%S')
|
td=$(date -u +'%F %R:%S' | tr '01' 'ol')
|
||||||
hi=$(printf "#%05d" $idx)
|
hi=$(printf "#%05d" $idx | tr '01' 'ol')
|
||||||
count=$(tail -1 "WS/log.nb_bloubs")
|
count=$(tail -1 "WS/log.nb_bloubs")
|
||||||
|
|
||||||
PNG=$(printf "%s/%05d.png" ${DDIR} $idx)
|
PNG=$(printf "%s/%05d.png" ${DDIR} $idx)
|
||||||
|
@ -29,20 +29,23 @@ object {
|
|||||||
finish { phong 0.57 specular 0.57 }
|
finish { phong 0.57 specular 0.57 }
|
||||||
}
|
}
|
||||||
|
|
||||||
object {
|
#declare La_Boite = object
|
||||||
union {
|
{
|
||||||
|
union {
|
||||||
plane { <1, 0, 0>, -37 }
|
plane { <1, 0, 0>, -37 }
|
||||||
plane { <1, 0, 0>, 37 }
|
plane { <1, 0, 0>, 37 }
|
||||||
plane { <0, 1, 0>, -27 }
|
plane { <0, 1, 0>, -27 }
|
||||||
plane { <0, 1, 0>, 27 }
|
plane { <0, 1, 0>, 27 }
|
||||||
plane { <0, 0, 1>, 69 }
|
plane { <0, 0, 1>, 69 }
|
||||||
|
|
||||||
texture {
|
texture {
|
||||||
pigment { color srgb <0.125, 0.144, 0.111> }
|
pigment { color srgb <0.225, 0.244, 0.211> }
|
||||||
finish { phong 0.18 metallic 0.25 reflection 0.35 }
|
finish { phong 0.18 metallic 0.25 reflection 0.35 }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
plane { y, 0 pigment { color White } translate -4.20*y}
|
||||||
|
|
||||||
|
|
||||||
// object { cylinder { <0, 0, 0>, <10, 0, 0>, 0.05 pigment { color Cyan } } }
|
// object { cylinder { <0, 0, 0>, <10, 0, 0>, 0.05 pigment { color Cyan } } }
|
||||||
|
|
||||||
@ -56,7 +59,7 @@ object {
|
|||||||
{
|
{
|
||||||
merge {
|
merge {
|
||||||
cylinder { <0, BV, 0>, <0, -BV, 0>, BR }
|
cylinder { <0, BV, 0>, <0, -BV, 0>, BR }
|
||||||
cylinder { <0, 0.014, 0>, <0, -0.014, 0>, BR*4 }
|
cylinder { <0, 0.018, 0>, <0, -0.018, 0>, BR*3 }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -109,8 +112,8 @@ union {
|
|||||||
}
|
}
|
||||||
// ----------------------------------------------------------
|
// ----------------------------------------------------------
|
||||||
|
|
||||||
light_source { <19, -12+NormClock, -17> color Gray80 }
|
light_source { <19, 12+NormClock, -17> color Gray80 }
|
||||||
light_source { <11, 14-NormClock, 9> color Gray60 }
|
light_source { <11, 10-NormClock, -29> color Gray60 }
|
||||||
|
|
||||||
#declare XCAM = 8 - ( 15 * NormClock);
|
#declare XCAM = 8 - ( 15 * NormClock);
|
||||||
#declare YCAM = -1.1 + (0.95 * NormClock);
|
#declare YCAM = -1.1 + (0.95 * NormClock);
|
||||||
|
Loading…
Reference in New Issue
Block a user