C $Id: startr.f 3304 2011-01-17 15:25:59Z brideout $ C SUBROUTINE STARTR(R1,R2,R3,B,ARC,V,TM) C C Private/Internal subroutine. Part of Apex coordinate computation C package. See COORD for public API. C C Input: C TM - time in years for desired field (e.g. 1971.25) C C Input, Output: C ARC - Altitudes in earth radii (array). C V - floating point array. C C Output: C R1,R2,R3 - field strength in geocentric directions. C B - Magnitude of field (array) C C .. Scalar Arguments .. DOUBLE PRECISION TM C .. C .. Array Arguments .. DOUBLE PRECISION ARC(200),B(200),R1(3),R2(3),R3(3),V(3,3) C .. C .. Local Scalars .. DOUBLE PRECISION AER,BP,BR,BT,COP,COT,DN,OER,RKM,SIP,SIT,SSQ INTEGER I,IS C .. C .. External Subroutines .. EXTERNAL MILMAG C .. C .. Intrinsic Functions .. INTRINSIC ABS,DCOS,DSIN C .. SIT = ABS(DSIN(V(2,2))) AER = V(1,2) SSQ = SIT*SIT OER = (6356.912D0+SSQ*(21.3677D0+.108D0*SSQ))/6371.2D0 V(1,2) = AER + OER 10 CONTINUE IF (V(3,2).LT.0) THEN V(3,2) = V(3,2) + 6.283185307D0 GO TO 10 END IF RKM = V(1,2)*6371.2D0 C if(model.eq.6) rkm=rkm+14.288-ssq*(21.3677+.108*ssq) COT = DCOS(V(2,2)) SIP = DSIN(V(3,2)) COP = DCOS(V(3,2)) CALL MILMAG(TM,RKM,SIT,COT,SIP,COP,BR,BT,BP,B(2)) R2(1) = BR/B(2) DN = B(2)*V(1,2) R2(2) = BT/DN R2(3) = BP/(DN*SIT) IS = 0 20 CONTINUE DO 30 I = 1,3 V(I,1) = V(I,2) - ARC(2)*R2(I) 30 CONTINUE SIT = ABS(DSIN(V(2,1))) 40 CONTINUE RKM = V(1,1)*6371.2D0 SSQ = SIT*SIT C if(model.eq.6) rkm=rkm+14.288-ssq*(21.3677+.108*ssq) COT = DCOS(V(2,1)) SIP = DSIN(V(3,1)) COP = DCOS(V(3,1)) CALL MILMAG(TM,RKM,SIT,COT,SIP,COP,BR,BT,BP,B(1)) IF (B(1).GE.B(2)) THEN R1(1) = BR/B(1) ARC(3) = ARC(2) DN = B(1)*V(1,1) R1(2) = BT/DN R1(3) = BP/(DN*SIT) DO 50 I = 1,3 V(I,1) = V(I,2) - ARC(2)*(R1(I)+R2(I))/2.D0 50 CONTINUE SIT = ABS(DSIN(V(2,1))) IS = IS + 1 IF (IS.EQ.1) GO TO 40 GO TO 60 END IF ARC(2) = -ARC(2) GO TO 20 60 CONTINUE DO 70 I = 1,3 V(I,3) = V(I,2) + ARC(3)*((1.5D0)*R2(I)-.5D0*R1(I)) 70 CONTINUE R3(1) = 0.0D0 R3(2) = 0.0D0 R3(3) = 0.0D0 RETURN C END