Fortraneries/GravityField/essai.f90

80 lines
2.0 KiB
Fortran

!-----------------------------------------------------------------------
!-
! test program for the project "gravity field"
!-
!-----------------------------------------------------------------------
program essai
use realfield
use spitpgm ! XXX
implicit none
call init_random()
call essai_near_planet(256, 1024)
STOP 'BECAUSE YOLO'
contains
!-----------------------------------------------------------------------
!-
! computation of thr nearest planet
!-
subroutine essai_near_planet(nbplanets, szfield)
integer, intent(in) :: nbplanets, szfield
integer, dimension(:,:), allocatable :: map
integer :: ix, iy
real :: fx, fy, dx, dy
integer :: near, ipl, errcode
real :: curdist, smalldist
type(massbody) :: planets(nbplanets)
print *, "near planets test", nbplanets, szfield
allocate(map(szfield, szfield), stat=errcode)
map = -1
! create some random bodies
do ipl=1, nbplanets
planets(ipl)%posx = rand() * szfield
planets(ipl)%posy = rand() * szfield
planets(ipl)%serial = ipl
end do
! call save_bodies_to_txt_file(planets, "planets.txt")
! loop over all the location of the field
do ix=1, szfield
fx = real(ix)
do iy=1, szfield
fy = real(iy)
near = -1
smalldist = 1e37
! loop over all the planet's bodies
do ipl=1, nbplanets
! compute the "fake" distance
dx = fx - planets(ipl)%posx
dy = fy - planets(ipl)%posy
curdist = (dx*dx) + (dy*dy)
if (curdist .LT. smalldist) then
near = ipl
smalldist = curdist
endif
end do ! loop on ipl
map(ix, iy) = mod(near, 255)
enddo
write(0, *) "row", ix, " on", szfield
enddo
call spit_as_pgm_8(map, "nearest.pgm")
end subroutine
!-----------------------------------------------------------------------
end program