first bloubspace run done
This commit is contained in:
		
							parent
							
								
									91f7a07990
								
							
						
					
					
						commit
						c0c031f21a
					
				
							
								
								
									
										7
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -2,6 +2,13 @@ | ||||
| # Prerequisites | ||||
| *.d | ||||
| 
 | ||||
| #      added by tTh | ||||
| 
 | ||||
| 
 | ||||
| #      --- | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| # Compiled Object files | ||||
| *.slo | ||||
| *.lo | ||||
|  | ||||
							
								
								
									
										10
									
								
								BloubWorld/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								BloubWorld/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,10 @@ | ||||
| 
 | ||||
| bloubs.inc | ||||
| *.gif | ||||
| *.blbs | ||||
| frames/* | ||||
| 
 | ||||
| exportbloubs | ||||
| genbloubs | ||||
| movebloubs | ||||
| 
 | ||||
							
								
								
									
										33
									
								
								BloubWorld/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								BloubWorld/Makefile
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,33 @@ | ||||
| 
 | ||||
| 
 | ||||
| all:	genbloubs movebloubs exportbloubs | ||||
| 
 | ||||
| 
 | ||||
| GFOPT = -Wall -Wextra -g -time | ||||
| OBJS  = bloubspace.o povstuff.o | ||||
| # ------------------------------------------------------------
 | ||||
| 
 | ||||
| initial.blbs:	genbloubs Makefile | ||||
| 	./genbloubs $@ 1000 | ||||
| 
 | ||||
| # ------------------------------------------------------------
 | ||||
| 
 | ||||
| bloubspace.o:	bloubspace.f90 Makefile | ||||
| 	gfortran $(GFOPT) -c $< | ||||
| 
 | ||||
| povstuff.o:	povstuff.f90 Makefile | ||||
| 	gfortran $(GFOPT) -c $< | ||||
| 
 | ||||
| # ------------------------------------------------------------
 | ||||
| 
 | ||||
| genbloubs:	genbloubs.f90 Makefile $(OBJS) | ||||
| 	gfortran $(GFOPT) $(OBJS)  $< -o $@ | ||||
| 
 | ||||
| movebloubs:	movebloubs.f90 Makefile bloubspace.o | ||||
| 	gfortran $(GFOPT) $(OBJS)  $< -o $@ | ||||
| 
 | ||||
| exportbloubs:	exportbloubs.f90 Makefile bloubspace.o | ||||
| 	gfortran $(GFOPT) $(OBJS)  $< -o $@ | ||||
| 
 | ||||
| # ------------------------------------------------------------
 | ||||
| 
 | ||||
							
								
								
									
										29
									
								
								BloubWorld/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								BloubWorld/README.md
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,29 @@ | ||||
| # BloubWorld | ||||
| 
 | ||||
| C'est quoi ? | ||||
| 
 | ||||
| Le BloubWorld (que l'on appelle aussi BloubSpace) est un espace borné | ||||
| dans lequel se déplcent des **bloubs**, une sorte de particule | ||||
| munie de certaines propriétés. Lesquelles évoluent en fonction du temps. | ||||
| 
 | ||||
| ## Description d'un bloubs | ||||
| 
 | ||||
| ``` | ||||
|   type t_bloubs | ||||
|     character(8)         :: nick | ||||
|     integer              :: num | ||||
|     real                 :: px, py, pz | ||||
|     real                 :: vx, vy, vz | ||||
|     real                 :: radius | ||||
|     integer              :: seq | ||||
|   end type t_bloubs | ||||
| ``` | ||||
| 
 | ||||
| C'est simple, en fait. Le plus compliqué, c'est de savoir quoi en faire. | ||||
| 
 | ||||
| ## Comment ça fonctionne ? | ||||
| 
 | ||||
| Pas trop mal pour un premier jet. Il suffit de lire | ||||
| le script `runme.sh` pour avoir une idée de l'enchainement | ||||
| des opérations. | ||||
| 
 | ||||
							
								
								
									
										54
									
								
								BloubWorld/bloubspace.f90
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								BloubWorld/bloubspace.f90
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,54 @@ | ||||
| !  | ||||
| !          fonctions de base de gestion des bloubs | ||||
| !  | ||||
| 
 | ||||
| module bloubspace | ||||
| 
 | ||||
|   implicit none | ||||
| 
 | ||||
|   ! ---------------------------------------------------------------- | ||||
| 
 | ||||
|   type t_bloubs | ||||
|     character(8)         :: nick | ||||
|     logical              :: alive | ||||
|     integer              :: num | ||||
|     real                 :: px, py, pz | ||||
|     real                 :: vx, vy, vz | ||||
|     real                 :: radius | ||||
|     integer              :: seq | ||||
|   end type t_bloubs | ||||
| 
 | ||||
|   contains               ! ----------------------------------------- | ||||
| 
 | ||||
|   subroutine random_pv (blb) | ||||
| 
 | ||||
|     type(t_bloubs), intent (inout)  :: blb | ||||
| 
 | ||||
|     blb%px = rand() - 0.50 | ||||
|     blb%py = rand() * 0.25 | ||||
|     blb%pz = rand() - 0.50 | ||||
| 
 | ||||
|     blb%vx = (rand() - 0.5) / 5.000 | ||||
|     blb%vy = (rand() - 0.5) / 5.000 | ||||
|     blb%vz = (rand() - 0.5) / 5.000 | ||||
| 
 | ||||
|   end subroutine | ||||
| 
 | ||||
|   ! ---------------------------------------------------------------- | ||||
| 
 | ||||
|   subroutine move_bloub (blb, coef) | ||||
|     type(t_bloubs), intent (inout)  :: blb | ||||
|     real,           intent (in)     :: coef | ||||
|      | ||||
|     blb%px  = blb%px + (blb%vx * coef) | ||||
|     blb%py  = blb%py + (blb%vy * coef) | ||||
|     blb%pz  = blb%pz + (blb%vz * coef) | ||||
|     blb%seq = blb%seq + 1 | ||||
| 
 | ||||
|   end subroutine | ||||
|   ! ---------------------------------------------------------------- | ||||
| 
 | ||||
| end module | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
							
								
								
									
										41
									
								
								BloubWorld/exportbloubs.f90
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								BloubWorld/exportbloubs.f90
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,41 @@ | ||||
| program genbloubs | ||||
| 
 | ||||
|   use bloubspace | ||||
|   implicit none | ||||
| 
 | ||||
|   character(200)             :: filename | ||||
|   integer, parameter         :: idu = 33 | ||||
|   integer                    :: i, compte, errcode | ||||
|   type(t_bloubs)             :: bloub | ||||
| 
 | ||||
|   !       parsing command line | ||||
|   i = IARGC() | ||||
|   if (1 .ne. i) then | ||||
|     STOP ' :BAD COMMAND LINE' | ||||
|   endif | ||||
|   call getarg(1, filename) | ||||
|    | ||||
|   write (0, '(A, A)') "*** exporting from ", trim(filename) | ||||
| 
 | ||||
|   open(unit=idu, file=trim(filename), form='unformatted',     & | ||||
|                  iostat=errcode,                              & | ||||
|                  action='read', status='old') | ||||
| 
 | ||||
|   if (0 .ne. errcode) then | ||||
|     ! print *, 'errcode ', errcode | ||||
|     STOP " : CAN'T OPEN FILE " // trim(filename) | ||||
|   endif | ||||
| 
 | ||||
|   compte=0 | ||||
|   do | ||||
|     read (unit=idu, iostat=errcode) bloub | ||||
|     if (0 .ne. errcode) then | ||||
|       exit | ||||
|     endif | ||||
|     print *, bloub%px, bloub%py, bloub%pz, bloub%radius | ||||
|     compte = compte + 1 | ||||
|   enddo | ||||
|    | ||||
|   close(idu) | ||||
| 
 | ||||
| end program | ||||
							
								
								
									
										43
									
								
								BloubWorld/genbloubs.f90
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								BloubWorld/genbloubs.f90
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,43 @@ | ||||
| program genbloubs | ||||
| 
 | ||||
|   use bloubspace | ||||
| 
 | ||||
|   integer               :: nbbloubs | ||||
|   integer               :: i | ||||
|   character(200)        :: filename | ||||
|   character(30)         :: str | ||||
|   type(t_bloubs)        :: bloub | ||||
| 
 | ||||
|   integer, parameter    :: idu = 33 | ||||
| 
 | ||||
|   i = IARGC() | ||||
|   if (i .ne. 2) then | ||||
|     STOP ": BAD ARGS ON COMMAND LINE" | ||||
|   endif | ||||
| 
 | ||||
|   call getarg(1, filename) | ||||
|   call getarg(2, str) | ||||
|   read(str,*) nbbloubs | ||||
| 
 | ||||
|   write (0, '(A,I6,A)') & | ||||
|   "*** generating ", nbbloubs, " bloubs to "//trim(filename) | ||||
| 
 | ||||
|   ! print *, "generating ", nbbloubs, "bloubs to ", filename | ||||
| 
 | ||||
|   open(unit=idu, file=trim(filename), form='unformatted',     & | ||||
|                  action='write', status='replace') | ||||
| 
 | ||||
|   do i = 1, nbbloubs | ||||
|     bloub%nick = 'noname  ' | ||||
|     bloub%alive = .TRUE. | ||||
|     call random_pv(bloub) | ||||
|     bloub%radius = 0.009999 | ||||
|     bloub%seq    = 0 | ||||
| 
 | ||||
|     write(idu) bloub              ! no error control ? | ||||
| 
 | ||||
|   end do | ||||
| 
 | ||||
|   close(unit=idu) | ||||
| 
 | ||||
| end program | ||||
							
								
								
									
										68
									
								
								BloubWorld/movebloubs.f90
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								BloubWorld/movebloubs.f90
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,68 @@ | ||||
| program movebloubs | ||||
| 
 | ||||
|   use bloubspace | ||||
|   use povstuff | ||||
| 
 | ||||
|   implicit none | ||||
| 
 | ||||
|   character(200)           :: infile, outfile | ||||
|   integer                  :: inu, outu, errcode, i | ||||
|   type(t_bloubs)           :: bloub | ||||
|   double precision         :: bx, by, bz | ||||
| 
 | ||||
|   i = IARGC() | ||||
|   if (i .ne. 2) then | ||||
|     STOP ": BAD ARGS ON COMMAND LINE" | ||||
|   endif | ||||
|   call getarg(1, infile) | ||||
|   call getarg(2, outfile) | ||||
| 
 | ||||
|   inu  = 42 ;   outu = 51 | ||||
| 
 | ||||
|   write (0, '(A)') & | ||||
|   "*** moving bloubs from "//trim(infile)//" to "//trim(outfile) | ||||
| 
 | ||||
|   open(unit=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(unit=outu, file=trim(outfile), form='unformatted',     & | ||||
|                   iostat=errcode,                              & | ||||
|                   action='write', status='replace') | ||||
|   if (0 .ne. errcode) then | ||||
|     STOP " : CAN'T WRITE TO " // trim(outfile) | ||||
|   endif | ||||
| 
 | ||||
|   bx = 0.0;   by = 0.0;   bz = 0.0 | ||||
| 
 | ||||
|   do | ||||
|     read (unit=inu, iostat=errcode) bloub | ||||
|     if (0 .ne. errcode) then | ||||
|       exit | ||||
|     endif | ||||
| 
 | ||||
|     call move_bloub (bloub, 0.333) | ||||
| 
 | ||||
|     bx = bx + bloub%px | ||||
|     by = by + bloub%py | ||||
|     bz = bz + bloub%pz | ||||
| 
 | ||||
|     ! boundingbox action | ||||
|     if (0.0 .gt. bloub%py) then | ||||
|       bloub%vy = -1.0 * bloub%vy | ||||
|       bloub%py = 0.0 | ||||
|     endif | ||||
| 
 | ||||
|     write(outu) bloub     ! no error control ? | ||||
| 
 | ||||
| 
 | ||||
|   enddo | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|   close(inu)    ;    close(outu) | ||||
| 
 | ||||
| end program | ||||
							
								
								
									
										27
									
								
								BloubWorld/povstuff.f90
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								BloubWorld/povstuff.f90
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,27 @@ | ||||
| module povstuff | ||||
| 
 | ||||
|   implicit none | ||||
| 
 | ||||
|   ! ---------------------------------------------------------------- | ||||
|   type t_boundb | ||||
| 
 | ||||
|     real    :: BBminX, BBmaxX, BBminY, BBmaxY, BBminZ, BBmaxZ | ||||
|     integer :: id | ||||
| 
 | ||||
|   end type | ||||
| 
 | ||||
|   contains               ! ----------------------------------------- | ||||
| 
 | ||||
|   subroutine show_bbox( bbox ) | ||||
| 
 | ||||
|     type (t_boundb), intent(in)     :: bbox | ||||
| 
 | ||||
|     print *, bbox%bbminx, bbox%bbminy, bbox%bbminz | ||||
|     print *, bbox%bbmaxx, bbox%bbmaxy, bbox%bbmaxz | ||||
| 
 | ||||
|   end subroutine | ||||
| 
 | ||||
|   ! ---------------------------------------------------------------- | ||||
| 
 | ||||
| end module | ||||
| 
 | ||||
							
								
								
									
										58
									
								
								BloubWorld/runme.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										58
									
								
								BloubWorld/runme.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,58 @@ | ||||
| #!/bin/bash | ||||
| 
 | ||||
| # | ||||
| #    how to run this mess in a batch style | ||||
| # | ||||
| 
 | ||||
| 
 | ||||
| INCFILE="bloubs.inc" | ||||
| TMPPNG="/dev/shm/bloubs7.png" | ||||
| POVOPT="+Q9 -v -d -W640 -H480" | ||||
| DDIR="frames" | ||||
| 
 | ||||
| make all | ||||
| err=$? | ||||
| if [ $err -ne 0 ] ; then | ||||
| 	echo 'make error = ' $err | ||||
| 	exit 1 | ||||
| fi | ||||
| # | ||||
| #    first, we have to make a seminal buch of bloubs | ||||
| #    --> this function need to be paraletrizable | ||||
| # | ||||
| ./genbloubs in.blbs  10000 | ||||
| 
 | ||||
| for idx in $(seq 0 40) | ||||
| do | ||||
| 
 | ||||
| 	echo "======== run passe $idx =========" | ||||
| 
 | ||||
| 	./exportbloubs in.blbs | awk -f toinc.awk > $INCFILE | ||||
| 
 | ||||
| 	povray -Iscene.pov -K${idx} -O${TMPPNG} ${POVOPT} 2> toto | ||||
| 	grep "Trace Tim" toto | ||||
| 
 | ||||
| 	txt=$(date +'%F %R:%S') | ||||
| 	PNG=$(printf "%s/%05d.png" ${DDIR} $idx) | ||||
| 	echo $PNG $txt | ||||
| 
 | ||||
| 	convert		${TMPPNG}			\ | ||||
| 			-font fixed			\ | ||||
| 			-pointsize 12			\ | ||||
| 			-fill orange			\ | ||||
| 			-gravity south-east		\ | ||||
| 			-annotate +10+10 "$txt"		\ | ||||
| 			$PNG | ||||
| 
 | ||||
| 	./movebloubs in.blbs out.blbs | ||||
| 
 | ||||
| 	cp out.blbs in.blbs | ||||
| 
 | ||||
| 	sleep 2 ; echo  | ||||
| done | ||||
| 
 | ||||
| rm toto | ||||
| 
 | ||||
| convert -delay 10  -colors 32 $DDIR/*.png foo.gif | ||||
| 
 | ||||
| 
 | ||||
							
								
								
									
										40
									
								
								BloubWorld/scene.pov
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								BloubWorld/scene.pov
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,40 @@ | ||||
| /* | ||||
|  *		BLOUBSWORLD | ||||
|  *  new Sun 06 Feb 2022 01:33:39 PM CET, rue Ernest Renan | ||||
|  */ | ||||
| #version 3.7; | ||||
| 
 | ||||
| global_settings { | ||||
|                 ambient_light rgb <0.02, 0.02, 0.09> | ||||
|                 assumed_gamma 1.0 | ||||
|                 } | ||||
| 
 | ||||
| #include  "colors.inc" | ||||
| 
 | ||||
| #include  "bloubs.inc" | ||||
| 
 | ||||
| object	{ | ||||
| 	Bloubs | ||||
| 	texture { | ||||
| 		pigment { color Gray50 }  | ||||
| 		finish { phong 0.58 metallic 0.45 } | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| plane	{ | ||||
| 	<0, 1, 0>, 0 | ||||
| 	texture { | ||||
| 		pigment { color Gray10 }  | ||||
| 		finish { phong 0.58 metallic 0.45 } | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| light_source { <4, 1, -9> color White } | ||||
| light_source { <4, 9,  9> color White } | ||||
| 
 | ||||
| camera  { | ||||
| 	location   <1, 3, -5> | ||||
| 	look_at    <0, 0, 0> | ||||
| 	right           x*image_width/image_height | ||||
| 	angle		48 | ||||
| 	} | ||||
							
								
								
									
										22
									
								
								BloubWorld/toinc.awk
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								BloubWorld/toinc.awk
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,22 @@ | ||||
| 
 | ||||
| # | ||||
| #            this code is (C) 2022 tTh | ||||
| # | ||||
| 
 | ||||
| BEGIN	{ | ||||
| 	count = 0 | ||||
| 	print "// GENERATED FILE, DON'T TOUCH IT !" | ||||
| 	print "#declare Bloubs = object\n{" | ||||
| 	print "union\t{" | ||||
| 	} | ||||
| 
 | ||||
| 	{ | ||||
| 	printf "\t\tsphere { <%f, %f, %f>, %f }\n",		\ | ||||
| 			  $1, $2, $3,  $4 | ||||
| 	count++ | ||||
| 	} | ||||
| 
 | ||||
| END	{ | ||||
| 	print "\t}  // end of union\n}\n" | ||||
| 	print "#declare Nb_Bloubs = ", count, ";\n" | ||||
| 	} | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 tth
						tth