!-----------------------! module systemparameters !-----------------------! implicit none real(8), parameter :: pi=3.141592653589793d0 ! pi real(8), parameter :: gme=3.9869598d14 ! G*M for earth real(8), parameter :: gmm=gme*0.0123d0 ! G*m for the moon real(8), parameter :: ts=86164d0 ! siderial day in seconds real(8), parameter :: rmoon=3.844d8 ! distance from earth to moon real(8), parameter :: wmoon=2.d0*pi/(ts*27.25d0) ! angular speed of moon real(8) :: incl ! inclination (radians) real(8) :: cinc ! cos(inclination) real(8) :: sinc ! sin(inclination) end module systemparameters !---------------------------! !---------------------! program geostationary !---------------------! use systemparameters; implicit none integer :: i,j,nper,nstp,wstp real(8) :: r,r0,dt,t,x,y,z,vx,vy,vz,tin,phi,phi0,theta,tmax write(*,*)'Inclination of moon orbit' read(*,*)incl incl=2.d0*pi*incl/360.d0 cinc=cos(incl) sinc=sin(incl) write(*,*)'Period of initial orbit; T/Ts' read(*,*)tin tin=tin*ts write(*,*)'Number of integration days, steps/day, write-frequency' read(*,*)nper,nstp,wstp tmax=ts*nper dt=ts/dble(nstp) x=0.d0 y=0.d0 z=0.d0 vx=0.d0 vy=0.d0 vz=0.d0 call gorbit(tin,x,vy) nper=0 phi0=0.d0 open(10,file='orb.dat',status='replace') do while (t<=tmax) call polarcoordinates(x,y,z,r,phi,theta) if (phi=0.d0) then phi=acos(x/r) else phi=2.d0*pi-acos(x/r) endif theta=asin(z/r) end subroutine polarcoordinates !--------------------------------! !----------------------------------------------------------------------! !Calculates the radius rgeo and velocity vgeo of an orbit with period t! !----------------------------------------------------------------------! subroutine gorbit(t,r,v) !------------------------! use systemparameters; implicit none real(8) :: t,r,v r=((gme*t**2)/(4.d0*pi**2))**(1.d0/3.d0) v=sqrt(gme/r) end subroutine gorbit !---------------------!