Compare commits
No commits in common. "414572133db8ff0d22a0df1d6ec3cb6b5de8a10d" and "101ae7c1e806af289dbc63db18f6d159df285af8" have entirely different histories.
414572133d
...
101ae7c1e8
@ -10,34 +10,26 @@ Lesquelles valeurs peuvent évoluer en fonction du temps.
|
||||
|
||||
## Description d'un bloub
|
||||
|
||||
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).
|
||||
|
||||
Attention cette description n'est qu'un exemple !
|
||||
|
||||
```
|
||||
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
|
||||
integer :: age
|
||||
end type t_bloubs
|
||||
```
|
||||
|
||||
C'est (preseque) simple, en fait.
|
||||
Le plus compliqué, c'est de savoir quoi faire de ce fatras
|
||||
de *bigdata*.
|
||||
C'est simple, en fait. Le plus compliqué, c'est de savoir quoi en faire.
|
||||
|
||||
On peut fabriquer des gazillions de bloubs, et ensuite
|
||||
On peut en fabriquer des gazillions, et ensuite
|
||||
les lacher dans un espace clôt, avec des parois
|
||||
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.
|
||||
|
||||
## Comment ça fonctionne ?
|
||||
|
||||
@ -51,7 +43,7 @@ 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
|
||||
pas optimal, mais c'est un cadre idéal pour les bricolages hasardeux.
|
||||
|
||||
Ces opérations agissent sur des fichiers de type `.blbs` qui sont,
|
||||
Ces opérations agissent sur des fichiers de type `.blsb` qui sont,
|
||||
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.
|
||||
|
||||
@ -59,7 +51,7 @@ de fichier qui va être modifié assez souvent, ne gardez pas d'archives.
|
||||
|
||||
Fabrication d'une population de bloubs plus ou moins aléatoires.
|
||||
Deux paramètres : le nom du fichier et le nombre de bloubs.
|
||||
Les règles de génération *devraient* être paramétrables.
|
||||
Les règles de génération devraient être paramétrables.
|
||||
|
||||
### movebloubs
|
||||
|
||||
@ -76,7 +68,6 @@ juste de passage dans un pipeline.
|
||||
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
|
||||
ce qu'il faut pour les différents moteurs de rendu.
|
||||
**Le format de sortie est susceptible de changer sans préavis.**
|
||||
|
||||
Bon, pour le moment, il n'y a que POVray, mais Gnuplot arrivera en second.
|
||||
|
||||
|
@ -21,8 +21,6 @@ program genbloubs
|
||||
write (0, '(A,I8,A)') &
|
||||
"*** generating ", nbbloubs, " bloubs to "//trim(filename)
|
||||
|
||||
call init_random_seed()
|
||||
|
||||
open(newunit=idu, file=trim(filename), &
|
||||
form='unformatted', &
|
||||
access="sequential", &
|
||||
|
@ -14,7 +14,9 @@ program mergebloubs
|
||||
integer :: inu, outu, errcode
|
||||
|
||||
type(t_bloubs), dimension(:), allocatable :: les_bloubs
|
||||
|
||||
integer :: i, idx, nbr_merge
|
||||
real :: rval
|
||||
logical :: merged
|
||||
|
||||
! --------------- check command line parameters
|
||||
if (IARGC() .ne. 2) then
|
||||
@ -26,8 +28,118 @@ program mergebloubs
|
||||
write(0, '(A, 2A20, I8)') "*** mergebloubs ", &
|
||||
trim(infile), trim(outfile), NB_MAX_BLOUBS
|
||||
|
||||
! --------------- allocate memory for the people
|
||||
|
||||
STOP '[done]'
|
||||
allocate (les_bloubs(NB_MAX_BLOUBS), stat=errcode)
|
||||
if (0 .NE. errcode) then
|
||||
STOP " : NO ENOUGH MEMORY"
|
||||
endif
|
||||
|
||||
do i = 1, NB_MAX_BLOUBS
|
||||
les_bloubs(i)%alive = .FALSE.
|
||||
enddo
|
||||
|
||||
! --------------- open / creat the files
|
||||
|
||||
open(newunit=inu, &
|
||||
file=trim(infile), form='unformatted', &
|
||||
iostat=errcode, &
|
||||
action='read', status='old')
|
||||
if (0 .ne. errcode) then
|
||||
STOP " : CAN'T OPEN FILE " // trim(infile)
|
||||
endif
|
||||
|
||||
open(newunit=outu, &
|
||||
file=trim(outfile), form='unformatted', &
|
||||
iostat=errcode, &
|
||||
action='write', status='replace')
|
||||
if (0 .ne. errcode) then
|
||||
STOP " : CAN'T OPEN " // trim(outfile) // "FOR WRITE"
|
||||
endif
|
||||
|
||||
! --------------- read the first bloub
|
||||
|
||||
idx = 1
|
||||
|
||||
read (unit=inu, iostat=errcode) bloub
|
||||
if (0 .ne. errcode) then
|
||||
STOP " : ERR READING FIRST BLOUB"
|
||||
endif
|
||||
call display_bloub (bloub, "first bloub")
|
||||
write(outu, iostat=errcode) bloub
|
||||
if (0 .ne. errcode) then
|
||||
STOP " : FIRST BLOUB, WRITE ERROR TO " // trim(outfile)
|
||||
endif
|
||||
|
||||
les_bloubs(idx) = bloub
|
||||
idx = idx + 1
|
||||
|
||||
! --------------- loop over the other bloubs
|
||||
nbr_merge = 0
|
||||
|
||||
do ! infinite loop
|
||||
|
||||
! print *, "============ PASS ", idx
|
||||
if (idx .EQ. NB_MAX_BLOUBS) then
|
||||
write(0, '(I8, A)') idx, " max number of bloubs reached"
|
||||
exit
|
||||
endif
|
||||
|
||||
! read the next bloub from input file
|
||||
read (unit=inu, iostat=errcode) bloub
|
||||
if (0 .ne. errcode) then
|
||||
exit
|
||||
endif
|
||||
!! call display_bloub (bloub, "next bloub")
|
||||
|
||||
if (.NOT. bloub%alive) then
|
||||
STOP " : I HAVE READ A DEAD BLOUB"
|
||||
endif
|
||||
|
||||
! check with all the previuous blobs
|
||||
merged = .FALSE.
|
||||
do i = 1, idx-1
|
||||
if (.NOT. les_bloubs(i)%alive) then
|
||||
! print *, "dead bloub at ", i, " on ", idx
|
||||
! call display_bloub(les_bloubs(i), "DEAD ? WTF ?")
|
||||
cycle
|
||||
endif
|
||||
rval = distance_of_bloubs(les_bloubs(i), bloub)
|
||||
if (rval .LT. (les_bloubs(i)%radius + bloub%radius)) then
|
||||
print *, "contact : ", i, idx, rval
|
||||
call merge_two_bloubs(les_bloubs(i), bloub, newbloub)
|
||||
les_bloubs(i)%alive = .FALSE.
|
||||
nbr_merge = nbr_merge + 1
|
||||
merged = .TRUE.
|
||||
endif
|
||||
enddo
|
||||
|
||||
if (merged) then
|
||||
les_bloubs(idx) = newbloub
|
||||
bloub = newbloub
|
||||
else
|
||||
! put old bloub in the list
|
||||
les_bloubs(idx) = bloub
|
||||
endif
|
||||
|
||||
write(outu, iostat=errcode) bloub
|
||||
if (0 .ne. errcode) then
|
||||
STOP " : WRITE ERROR TO " // trim(outfile)
|
||||
endif
|
||||
|
||||
idx = idx + 1
|
||||
|
||||
! print *, "idx = ", idx
|
||||
|
||||
enddo ! end of infinit... WHAT?
|
||||
|
||||
! --------------- is the job done ?
|
||||
|
||||
close(inu) ; close(outu)
|
||||
|
||||
write(0, '()')
|
||||
write(0, '(I5, A)') nbr_merge, " merges"
|
||||
write(0, '(A)') "--- mergebloubs . . . . . . . [done]"
|
||||
|
||||
! --------------------------------------------------------------
|
||||
contains
|
||||
@ -36,7 +148,7 @@ contains
|
||||
type(t_bloubs), intent(in) :: bla, blb
|
||||
type(t_bloubs), intent(out) :: blr
|
||||
|
||||
blr%nick = "merged "
|
||||
blr%nick = "newbie "
|
||||
blr%num = 0 ! ???
|
||||
|
||||
blr%px = (bla%px + blb%px) / 2.0
|
||||
|
@ -3,13 +3,13 @@ GFOPT = -Wall -Wextra -time -g -Imods/
|
||||
|
||||
# ---------------------------------------------
|
||||
|
||||
mods/spitpgm.o: mods/spitpgm.f90 Makefile
|
||||
gfortran $(GFOPT) -c $< -o $@
|
||||
spitpgm.o: spitpgm.f90 Makefile
|
||||
gfortran $(GFOPT) -c $<
|
||||
|
||||
fraktals.o: fraktals.f90 Makefile
|
||||
gfortran $(GFOPT) -c $<
|
||||
|
||||
OBJS = mods/spitpgm.o fraktals.o
|
||||
OBJS = spitpgm.o fraktals.o
|
||||
DOT_O = mods/points3d.o
|
||||
|
||||
# ---------------------------------------------
|
||||
@ -17,12 +17,9 @@ DOT_O = mods/points3d.o
|
||||
julia: julia.f90 Makefile $(OBJS)
|
||||
gfortran $(GFOPT) $< $(OBJS) -o $@
|
||||
|
||||
pickover: pickover.f90 Makefile $(OBJS) $(DOT_O)
|
||||
pickover: pickover.f90 Makefile $(OBJS)
|
||||
gfortran $(GFOPT) $< $(OBJS) $(DOT_O) -o $@
|
||||
|
||||
voxelize: voxelize.f90 Makefile $(OBJS)
|
||||
gfortran $(GFOPT) $< $(OBJS) -o $@
|
||||
|
||||
lorentz: lorentz.f90 Makefile $(OBJS)
|
||||
gfortran $(GFOPT) $< $(OBJS) -o $@
|
||||
|
||||
|
@ -1,73 +0,0 @@
|
||||
module spitpgm
|
||||
|
||||
implicit none
|
||||
|
||||
contains
|
||||
|
||||
!-----------------------------------------------------
|
||||
|
||||
subroutine spit_as_pgm(pic, fname)
|
||||
|
||||
integer, intent(in), dimension (:,:) :: pic
|
||||
character (len=*), intent(in) :: fname
|
||||
|
||||
integer :: io, foo
|
||||
integer :: ix, iy
|
||||
real :: fk, fpix
|
||||
|
||||
write(0, '(1X, A)') "> spit_as_pgm to " // trim(fname)
|
||||
|
||||
open(newunit=io, file=fname)
|
||||
write (io, '(a2)') "P2"
|
||||
write (io, '(i0," ",i0)') size(pic, 1), size(pic, 2)
|
||||
write (io, '(i0)') 65535
|
||||
|
||||
foo = MAXVAL(pic)
|
||||
if (foo .EQ. 0) then
|
||||
print *, " IS SOMETHING WRONG GOING TO HAPPEN ?"
|
||||
do ix = 1, size(pic)
|
||||
write (io, "(i0)") 0
|
||||
enddo
|
||||
else
|
||||
fk = float(foo) / 65535.0
|
||||
print *, " max pix value", foo, " fk = ", fk
|
||||
do iy = 1, ubound(pic, 2)
|
||||
do ix = 1, ubound(pic, 1)
|
||||
fpix = float(pic(ix, iy)) / fk
|
||||
write (io, "(i0)") int(fpix)
|
||||
end do
|
||||
end do
|
||||
endif
|
||||
close(io)
|
||||
|
||||
end subroutine
|
||||
!-----------------------------------------------------
|
||||
subroutine spit_as_pgm_8(pic, fname)
|
||||
|
||||
integer, intent(in), dimension (:,:) :: pic
|
||||
character (len=*), intent(in) :: fname
|
||||
|
||||
integer :: io, foo
|
||||
integer :: ix, iy
|
||||
|
||||
! XXX print *, "> spit_as_pgm_8 to ", fname
|
||||
foo = MAXVAL(pic)
|
||||
! XXX print *, " max = ", foo
|
||||
open(newunit=io, file=fname)
|
||||
write (io, '(a2)') "P2"
|
||||
write (io, '(i0," ",i0)') size(pic, 1), size(pic, 2)
|
||||
write (io, '(i0)') 255
|
||||
|
||||
do iy=1,ubound(pic, 2)
|
||||
do ix=1, ubound(pic, 1)
|
||||
foo = pic(ix, iy)
|
||||
if (foo .GT. 255) foo = 255
|
||||
write(io, "(i3)") foo
|
||||
enddo
|
||||
enddo
|
||||
close(io)
|
||||
|
||||
end subroutine
|
||||
!-----------------------------------------------------
|
||||
|
||||
end module spitpgm
|
Loading…
Reference in New Issue
Block a user