123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- ***********************************************************************
- c ORBEL_FGET.F
- ***********************************************************************
- * PURPOSE: Solves Kepler's eqn. for hyperbola using hybrid approach.
- *
- * Input:
- * e ==> eccentricity anomaly. (real scalar)
- * capn ==> hyperbola mean anomaly. (real scalar)
- * Returns:
- * orbel_fget ==> eccentric anomaly. (real scalar)
- *
- * ALGORITHM: Based on pp. 70-72 of Fitzpatrick's book "Principles of
- * Cel. Mech. ". Quartic convergence from Danby's book.
- * REMARKS:
- * AUTHOR: M. Duncan
- * DATE WRITTEN: May 11, 1992.
- * REVISIONS: 2/26/93 hfl
- ***********************************************************************
- real*8 function orbel_fget(e,capn)
- include '../swift.inc'
- c... Inputs Only:
- real*8 e,capn
- c... Internals:
- integer i,IMAX
- real*8 tmp,x,shx,chx
- real*8 esh,ech,f,fp,fpp,fppp,dx
- PARAMETER (IMAX = 10)
- c----
- c... Executable code
- c Function to solve "Kepler's eqn" for F (here called
- c x) for given e and CAPN.
- c begin with a guess proposed by Danby
- if( capn .lt. 0.d0) then
- tmp = -2.d0*capn/e + 1.8d0
- x = -log(tmp)
- else
- tmp = +2.d0*capn/e + 1.8d0
- x = log( tmp)
- endif
- orbel_fget = x
- do i = 1,IMAX
- call orbel_schget(x,shx,chx)
- esh = e*shx
- ech = e*chx
- f = esh - x - capn
- c write(6,*) 'i,x,f : ',i,x,f
- fp = ech - 1.d0
- fpp = esh
- fppp = ech
- dx = -f/fp
- dx = -f/(fp + dx*fpp/2.d0)
- dx = -f/(fp + dx*fpp/2.d0 + dx*dx*fppp/6.d0)
- orbel_fget = x + dx
- c If we have converged here there's no point in going on
- if(abs(dx) .le. TINY) RETURN
- x = orbel_fget
- enddo
- write(6,*) 'FGET : RETURNING WITHOUT COMPLETE CONVERGENCE'
- return
- end ! orbel_fget
- c------------------------------------------------------------------
|