C $Id: convrt.f 3304 2011-01-17 15:25:59Z brideout $ C SUBROUTINE CONVRT(I,GDLAT,GDALT,GCLAT,RKM) C C jmh - 11/79 ans fortran 66 C C Converts between geodetic and geocentric coordinates. the C reference geoid is that adopted by the iau in 1964. a=6378.16, C b=6356.7746, f=1/298.25. the equations for conversion from C geocentric to geodetic are from astron. j., vol 66, 1961, p. 15. C C Input: C I - 1 geodetic to geocentric, 2 geocentric to geodetic C Input, Output: C GDLAT - geodetic latitude (degrees) C GDALT - altitude above geoid (km) C GCLAT - geocentric latitude (degrees) C RKM - geocentric radial distance (km) C C .. Scalar Arguments .. DOUBLE PRECISION GCLAT,GDALT,GDLAT,RKM INTEGER I C .. C .. Local Scalars .. DOUBLE PRECISION A,A2,A4,A6,A8,AB2,C2CL,C4CL,CCL,CL2,COSBET, * COSLAT,DLTCL,DTR,EP2,GCL,GDL,RER,RGEOID,S2CL, * S4CL,S6CL,S8CL,SB2,SCL,SINBET,SINLAT,SL2,X,Y C .. C .. Intrinsic Functions .. INTRINSIC DATAN2,DCOS,DMIN1,DSIN,DSQRT C .. C .. Data statements .. C DATA A/6378.16D0/,AB2/1.0067397D0/,EP2/.0067397D0/ DATA DTR/.0174532925199D0/ C .. C IF (I.EQ.2) THEN C C .....geocentic to geodetic..... RER = RKM/A A2 = ((-1.4127348D-8/RER+.94339131D-8)/RER+.33523288D-2)/RER A4 = (((-1.2545063D-10/RER+.11760996D-9)/RER+.11238084D-4)/RER- * .2814244D-5)/RER A6 = ((54.939685D-9/RER-28.301730D-9)/RER+3.5435979D-9)/RER A8 = (((320.D0/RER-252.D0)/RER+64.D0)/RER-5.D0)/RER* * .98008304D-12 GCL = DTR*GCLAT CCL = DCOS(GCL) SCL = DSIN(GCL) S2CL = 2.D0*SCL*CCL C2CL = 2.D0*CCL*CCL - 1.D0 S4CL = 2.D0*S2CL*C2CL C4CL = 2.D0*C2CL*C2CL - 1.D0 S8CL = 2.D0*S4CL*C4CL S6CL = S2CL*C4CL + C2CL*S4CL DLTCL = S2CL*A2 + S4CL*A4 + S6CL*A6 + S8CL*A8 GDLAT = GCLAT + DLTCL/DTR GDALT = RKM - A/DSQRT(1.D0+EP2*SCL*SCL) ELSE C C .....geodetic to geocentric..... GDL = DTR*GDLAT SINLAT = DSIN(GDL) COSLAT = DCOS(GDL) SL2 = SINLAT*SINLAT CL2 = AB2*COSLAT CL2 = CL2*CL2 SINBET = SINLAT/DSQRT(SL2+CL2) SB2 = DMIN1(SINBET*SINBET,1.D0) COSBET = DSQRT(1.D0-SB2) RGEOID = A/DSQRT(1.D0+EP2*SB2) X = RGEOID*COSBET + GDALT*COSLAT Y = RGEOID*SINBET + GDALT*SINLAT RKM = DSQRT(X*X+Y*Y) GCLAT = DATAN2(Y,X)/DTR END IF RETURN C END