43 lines
1.0 KiB
Fortran
43 lines
1.0 KiB
Fortran
|
!
|
||
|
! project "gravity field"
|
||
|
!
|
||
|
!-----------------------------------------------------------------------
|
||
|
module realfield
|
||
|
implicit none
|
||
|
|
||
|
!-----------------------------------------------------------------------
|
||
|
|
||
|
type massbody
|
||
|
real :: posx, posy
|
||
|
real :: mass
|
||
|
integer :: serial
|
||
|
end type
|
||
|
|
||
|
!-----------------------------------------------------------------------
|
||
|
contains
|
||
|
|
||
|
function compute_gravity(ix, iy, body)
|
||
|
|
||
|
integer, intent(in) :: ix, iy
|
||
|
type(massbody), intent(in) :: body
|
||
|
real :: compute_gravity
|
||
|
real :: rx, ry, dist
|
||
|
|
||
|
rx = real(ix) - body%posx
|
||
|
ry = real(iy) - body%posy
|
||
|
|
||
|
dist = sqrt( (rx*rx) + (ry*ry) )
|
||
|
if (dist .LT. 0.15) then
|
||
|
write (0, *) "dist too small ", dist
|
||
|
compute_gravity = 0e0
|
||
|
endif
|
||
|
|
||
|
compute_gravity = body%mass * (dist ** 2)
|
||
|
|
||
|
end function
|
||
|
|
||
|
!-----------------------------------------------------------------------
|
||
|
!-----------------------------------------------------------------------
|
||
|
|
||
|
end module
|