! ! project "gravity field" ! !----------------------------------------------------------------------- module realfield implicit none !----------------------------------------------------------------------- ! definition of structures ! type massbody real :: posx, posy real :: mass = 1.0 integer :: serial = 666 end type !----------------------------------------------------------------------- contains !----------------------------------------------------------------------- function compute_gravity(fx, fy, body) real, intent(in) :: fx, fy type(massbody), intent(in) :: body real :: compute_gravity real :: rx, ry, dist rx = fx - body%posx ry = fy - body%posy dist = sqrt( (rx*rx) + (ry*ry) ) if (dist .LT. 4.50) then write (0, *) "dist too small ", dist compute_gravity = 0e0 endif compute_gravity = body%mass / (dist ** 2) end function !----------------------------------------------------------------------- !- ! Compute the gravity field in a pre-allocated array relative ! to the massbody 'moon'. Nobody know where the magic number ! come from, sorry. !- subroutine compute_a_field(field, moon) real, dimension(:,:), intent(out) :: field type(massbody), intent(in) :: moon integer :: ix, iy real :: fx, fy real :: grav ! print *, "pic size ", ubound(field, 1), "W", ubound(field, 2), "H" ! print *, "mass body ", moon do ix=1, ubound(field, 1) fx = real(ix) do iy=1, ubound(field, 2) fy = real(iy) grav = compute_gravity(fx, fy, moon) field(ix,iy) = grav enddo enddo end subroutine !----------------------------------------------------------------------- !----------------------------------------------------------------------- end module