|
|
C $Id: coordf.f 6710 2019-01-24 14:12:14Z brideout $
|
|
|
C
|
|
|
SUBROUTINE COORDF(SLATGD,SLON,SR,SLATGC,TM,AZ,EL,RANGE,GDLAT,GLON,
|
|
|
* GDALT,QDIAG,QSPHERICAL,RCOR)
|
|
|
C Calculates the listed coordinates of a specified point. the point
|
|
|
C may be specified either by slatgd, slon, sr, slatgc, tm, az, el,
|
|
|
C range (range .ge. 0.) or by gdlat, glon, gdalt, tm (range .lt.
|
|
|
C 0.). Most of the output parameters involve the geomagnetic field
|
|
|
C as specified by the International Geomagnetic Referenc eField
|
|
|
C (IGRF) fo the specified epoch (tm). Apex latitude and longitude,
|
|
|
C along with either gdalt or arc form a geomagnetic coordinate
|
|
|
C system within either hemisphere. This system is necessarily
|
|
|
C non-orthogonal which accounts for the complexity of many of the
|
|
|
C calculations in coord. Apex latitude is always positive which is
|
|
|
C appropriate when using apex latitude and longitude to label
|
|
|
C field lines.
|
|
|
C
|
|
|
C This is a faster version of coord.f used by getMag and faraday
|
|
|
C because coord is slower calculating parms not needed for
|
|
|
C those methods. RCOR(36-64) always return 0.
|
|
|
C
|
|
|
C Input:
|
|
|
C SLATGD - station geodetic latitude
|
|
|
C SLON - station longitude
|
|
|
C SR - radial distance of station from center of earth
|
|
|
C SLATGC - station geocentric latitude
|
|
|
C TM - time in years (e.g. 1975.2)
|
|
|
C AZ - radar azimuth
|
|
|
C EL - radar elevation
|
|
|
C RANGE - range to observation point
|
|
|
C QDIAG - Print diagnostic output on terminal if non-zero
|
|
|
C QSPHERICAL - Assume spherical coordinates instead of apex coordinates
|
|
|
C if non-zero. This helps verify the numerical
|
|
|
C nonorthogonal coordinate calculations because the
|
|
|
C spherical case also has an analytic solution.
|
|
|
C QDIAG and QSPHERICAL should be set to 0 except for development
|
|
|
C Input, output:
|
|
|
C GDLAT - geodetic latitude of observation point
|
|
|
C GLON - longitude of observation point
|
|
|
C GDALT - altitude above spheroid of observation point
|
|
|
C Output:
|
|
|
C RCOR(1) - az - radar azimuth
|
|
|
C RCOR(2) - el - radar elevation
|
|
|
C RCOR(3) - range - range to observation point
|
|
|
C RCOR(4) - gdlat - geodetic latitude of observation point
|
|
|
C RCOR(5) - glon - longitude of observation point
|
|
|
C RCOR(6) - gdalt - altitude above spheroid of observation point
|
|
|
C RCOR(7) - b - magnitude of geomagnetic field
|
|
|
C RCOR(8) - br - radial component of geomagnetic field
|
|
|
C RCOR(9) - bt - southward component of geomagnetic field
|
|
|
C RCOR(10) - bp - eastward component of geomagnetic field
|
|
|
C RCOR(11) - rlatm - dip latitude
|
|
|
C RCOR(12) - rlati - invariant latitude
|
|
|
C RCOR(13) - rl - magnetic l parameter
|
|
|
C RCOR(14) - alat - apex latitude
|
|
|
C RCOR(15) - alon - apex longitude
|
|
|
C
|
|
|
C RCOR(16) - g(1,1) magnetic coordinate system metric tensor,
|
|
|
C upper half stored row-wise
|
|
|
C RCOR(17) - g(2,1) " "
|
|
|
C RCOR(18) - g(2,1) " "
|
|
|
C RCOR(19) - g(2,1) " "
|
|
|
C
|
|
|
C RCOR(20) - ctab(1) - direction cosine of beam wrt geodetic
|
|
|
C south
|
|
|
C RCOR(21) - ctab(2) - direction cosine of beam wrt geodetic
|
|
|
C east
|
|
|
C RCOR(22) - ctab(3) - direction cosine of beam wrt geodetic
|
|
|
C altitude (up)
|
|
|
C
|
|
|
C RCOR(23) - ctab(4) - direction cosine of beam wrt apex
|
|
|
C latitude (northward)
|
|
|
C RCOR(24) - ctab(5) - direction cosine of beam wrt apex
|
|
|
C longitude (eastward)
|
|
|
C RCOR(25) - ctab(6) - direction cosine of beam wrt fieldline
|
|
|
C geomagnetic field (up)
|
|
|
C
|
|
|
C RCOR(26) - cost1 - x-direction cosine of a vector
|
|
|
C perpendicularto l.o.s. w/respect to apex
|
|
|
C coords.
|
|
|
C RCOR(27) - cost2 - y-direction cosine " "
|
|
|
C RCOR(28) - cost3 - z-direction cosine " "
|
|
|
C
|
|
|
C RCOR(29) - ainc - inclination of geomagnetic field
|
|
|
C RCOR(30) - dec - declination of geomagnetic field
|
|
|
C RCOR(31) - gclat - geocentric latitude
|
|
|
C RCOR(32) - aspct - aspect angle
|
|
|
C RCOR(33) - cplat - conjugate geocentric latitude
|
|
|
C RCOR(34) - gcdlat - conjugate geodetic latitude
|
|
|
C RCOR(35) - cplon conjugate longitude
|
|
|
C RCOR(36 - 64) are set to zero. Use coord.f for those
|
|
|
C
|
|
|
C .. Scalar Arguments ..
|
|
|
DOUBLE PRECISION AZ,EL,GDALT,GDLAT,GLON,RANGE,SLATGC,SLATGD,SLON,
|
|
|
* SR,TM
|
|
|
INTEGER QDIAG,QSPHERICAL
|
|
|
C ..
|
|
|
C .. Array Arguments ..
|
|
|
DOUBLE PRECISION RCOR(64)
|
|
|
C ..
|
|
|
C .. Local Scalars ..
|
|
|
DOUBLE PRECISION AINC,ALAT,ALON,ARAD,ARC,ASPCT,B,BB,BP,BPERPEASTM,
|
|
|
* BPERPSOUTHM,BR,BT,BX,BY,BZ,CALAT,CALON,CARAD,
|
|
|
* CARC,CASPCT,CGDALT,CGDLAT,
|
|
|
* COST1,COST2,COST3,CP,CPLAT,
|
|
|
* CPLON,CPRKM,CSP,CSR,CST,CT,CX,CY,CZ,D,DEC,
|
|
|
* DECGC,DTR,
|
|
|
* EASTM,EASTP,EASTR,EASTT,EASTX,
|
|
|
* EASTY,EASTZ,
|
|
|
* EFMAG,EFX,EFY,EFZ,
|
|
|
* GCALT,GCLAT,GDLATS,
|
|
|
* HB,HI,P,PERPEASTP,PERPEASTR,PERPEASTT,PERPSOUTHP,
|
|
|
* PERPSOUTHR,PERPSOUTHT,PFX,PFY,PFZ,PLAT,PLON,
|
|
|
* PRKM,PX,PY,PZ,RFP,RFR,RFT,RFX,RFY,RFZ,
|
|
|
* RKM,RL,RLATI,RLATM,RP,RR,RT,SOUTHM,SOUTHP,
|
|
|
* SOUTHR,SOUTHT,SOUTHX,SOUTHY,SOUTHZ,SP,ST,T,
|
|
|
* TM1,UPBP,UPBR,UPBT,UPP,UPR,UPT,UPX,UPY,
|
|
|
* UPZ,XB,XDUM,YB,ZB
|
|
|
INTEGER IER,INIT,ISTOP,NPR
|
|
|
C ..
|
|
|
C .. Local Arrays ..
|
|
|
DOUBLE PRECISION BF(3),BPERPEAST(3),BPERPSOUTH(3),CTAB(9),
|
|
|
* EAST(3),EAST2(3),
|
|
|
* EF(3),
|
|
|
* PERPEAST(3),PERPEAST2(3),
|
|
|
* PERPSOUTH(3),PERPSOUTH2(3),PF(3),Q0(3),
|
|
|
* RF(3),SOUTH(3),SOUTH2(3),UP(3),
|
|
|
* UP2(3),UPB(3),UPB2(3),ZEROM(3)
|
|
|
C ..
|
|
|
C .. External Functions ..
|
|
|
DOUBLE PRECISION SPROD,TPROD,VMAG
|
|
|
EXTERNAL SPROD,TPROD,VMAG
|
|
|
C ..
|
|
|
C .. External Subroutines ..
|
|
|
EXTERNAL CONVRT,CSCONV,GDV,GMET,GMETBV,INVAR,LINTRA,LOOK,MILMAG,
|
|
|
* MINV,MTRAN3,POINT,RPCART,UVECT,VCTCNV,VPROD,VRECIP
|
|
|
C ..
|
|
|
C .. Intrinsic Functions ..
|
|
|
INTRINSIC ABS,ACOS,ATAN,COS,DATAN2,DBLE,DSQRT,MAX,MIN,
|
|
|
* SIN,SQRT
|
|
|
C ..
|
|
|
C .. Statement Functions ..
|
|
|
DOUBLE PRECISION TAN
|
|
|
C ..
|
|
|
C .. Equivalences ..
|
|
|
EQUIVALENCE (RFX,RF(1)),(RFY,RF(2)),(RFZ,RF(3))
|
|
|
EQUIVALENCE (PFX,PF(1)),(PFY,PF(2)),(PFZ,PF(3))
|
|
|
EQUIVALENCE (BX,BF(1)),(BY,BF(2)),(BZ,BF(3))
|
|
|
EQUIVALENCE (EFX,EF(1)),(EFY,EF(2)),(EFZ,EF(3))
|
|
|
EQUIVALENCE (SOUTHX,SOUTH(1)),(SOUTHY,SOUTH(2)),(SOUTHZ,SOUTH(3))
|
|
|
EQUIVALENCE (EASTX,EAST(1)),(EASTY,EAST(2)),(EASTZ,EAST(3))
|
|
|
EQUIVALENCE (UPX,UP(1)),(UPY,UP(2)),(UPZ,UP(3))
|
|
|
C ..
|
|
|
C .. Data statements ..
|
|
|
DATA DTR/0.0174532925199D0/
|
|
|
C ..
|
|
|
C .. Constants
|
|
|
C err1 and err2 are error flags from geo-cgm.f
|
|
|
C .. Statement Function definitions ..
|
|
|
TAN(XDUM) = DSIN(XDUM)/(DCOS(XDUM)+1.D-38)
|
|
|
C ..
|
|
|
C .....Initialize.....
|
|
|
COST1 = 0.0D0
|
|
|
COST2 = 0.0D0
|
|
|
COST3 = 0.0D0
|
|
|
TM1 = ABS(TM)
|
|
|
IF (RANGE.LT.0.0D0) THEN
|
|
|
C
|
|
|
C .....Entry when gdlat,glon,gdalt are given.....
|
|
|
C .....Calculation fails when gdlat is too close to 0 or 90.....
|
|
|
GDLATS = GDLAT
|
|
|
GDLAT = MIN(GDLAT,89.99D0)
|
|
|
GDLAT = MAX(GDLAT,-89.99D0)
|
|
|
IF (ABS(GDLAT).LT.0.01D0) THEN
|
|
|
GDLAT = 0.01D0
|
|
|
END IF
|
|
|
CALL CONVRT(1,GDLAT,GDALT,GCLAT,RKM)
|
|
|
CALL LOOK(SR,SLATGC,SLON,RKM,GCLAT,GLON,AZ,EL,RANGE)
|
|
|
ELSE
|
|
|
C
|
|
|
C .....Entry when az, el, range are given.....
|
|
|
CALL POINT(SR,SLATGC,SLON,AZ,EL,RANGE,RKM,GCLAT,GLON)
|
|
|
CALL CONVRT(2,GDLAT,GDALT,GCLAT,RKM)
|
|
|
GDLATS = GDLAT
|
|
|
GDLAT = MIN(GDLAT,89.99D0)
|
|
|
GDLAT = MAX(GDLAT,-89.99D0)
|
|
|
IF (ABS(GDLAT).LT.0.01D0) THEN
|
|
|
GDLAT = 0.01D0
|
|
|
END IF
|
|
|
END IF
|
|
|
C
|
|
|
C .....We now have all needed information on station, radar beam
|
|
|
C and location of measurement point.....
|
|
|
C
|
|
|
IF (QSPHERICAL .NE. 0) THEN
|
|
|
SLATGD = SLATGC
|
|
|
GDLAT = GCLAT
|
|
|
GDALT = RKM - SR
|
|
|
END IF
|
|
|
C
|
|
|
IF (QDIAG .NE. 0) THEN
|
|
|
WRITE (6,'(''Locations of radar and measurement:'')')
|
|
|
WRITE (6,FMT='(''slatgd,slon,sr,slatgc,tm,az,el,range = '')')
|
|
|
WRITE (6,FMT='(8f9.2)') SLATGD,SLON,SR,SLATGC,TM,AZ,EL,RANGE
|
|
|
WRITE (6,FMT='(''gclat,glon,rkm = '')')
|
|
|
WRITE (6,FMT='(3f9.2)') GCLAT,GLON,RKM
|
|
|
WRITE (6,FMT='(''gdlat,glon,gdalt = '')')
|
|
|
WRITE (6,FMT='(3f9.2)') GDLAT,GLON,GDALT
|
|
|
WRITE (6,FMT='('' '')')
|
|
|
END IF
|
|
|
C
|
|
|
C .....Calculate magnetic field at observation point.....
|
|
|
T = DTR*(90.D0-GCLAT)
|
|
|
CT = DCOS(T)
|
|
|
ST = DSIN(T)
|
|
|
P = DTR*GLON
|
|
|
CP = DCOS(P)
|
|
|
SP = DSIN(P)
|
|
|
CALL MILMAG(TM1,RKM,ST,CT,SP,CP,BR,BT,BP,B)
|
|
|
IF (QSPHERICAL .NE. 0) THEN
|
|
|
BR = -1.0D0
|
|
|
BT = 0.0D0
|
|
|
BP = 0.0D0
|
|
|
END IF
|
|
|
CALL GDV(GDLAT,GCLAT,BR,BT,BP,XB,YB,ZB)
|
|
|
C
|
|
|
IF ((QDIAG .NE. 0) ) THEN
|
|
|
WRITE (6,FMT='(''b = '', 9F9.5)') BR,BT,BP,XB,YB,ZB,BX,BY,BZ
|
|
|
END IF
|
|
|
C
|
|
|
C .....Calculate inclination.....
|
|
|
HB = DSQRT(XB*XB+YB*YB)
|
|
|
AINC = DATAN2(ZB,HB)/DTR
|
|
|
C
|
|
|
C .....Calculate declination.....
|
|
|
DEC = DATAN2(YB,XB)/DTR
|
|
|
C
|
|
|
C .....Convert southward, eastward, outward components of magnetic
|
|
|
C field at observation point to earth centered cartesian
|
|
|
C coordinates.....
|
|
|
CALL VCTCNV(BX,BY,BZ,PX,PY,PZ,BR,BT,BP,RKM,90.D0-GCLAT,GLON,2)
|
|
|
C
|
|
|
C .....Compute unit vectors perpendicular to magnetic field and
|
|
|
C southward (bperpsouth) and eastward (bperpeast)
|
|
|
DECGC = DATAN2(BP,-BT)/DTR
|
|
|
IF (QSPHERICAL .NE. 0) THEN
|
|
|
AINC = 90.0D0
|
|
|
DECGC = 0.0D0
|
|
|
END IF
|
|
|
IF (QDIAG .NE. 0) THEN
|
|
|
WRITE (6,FMT='(''ainc,dec,decgc = '', 3f10.5)') AINC,DEC,DECGC
|
|
|
END IF
|
|
|
SOUTHR = 0.0D0
|
|
|
SOUTHT = COS(DTR*DECGC)
|
|
|
SOUTHP = -SIN(DTR*DECGC)
|
|
|
EASTR = 0.0D0
|
|
|
EASTT = SIN(DTR*DECGC)
|
|
|
EASTP = COS(DTR*DECGC)
|
|
|
UPR = 1.0D0
|
|
|
UPT = 0.0D0
|
|
|
UPP = 0.0D0
|
|
|
CALL VCTCNV(SOUTHX,SOUTHY,SOUTHZ,PX,PY,PZ,SOUTHR,SOUTHT,SOUTHP,
|
|
|
* RKM,90.D0-GCLAT,GLON,2)
|
|
|
CALL VCTCNV(EASTX,EASTY,EASTZ,PX,PY,PZ,EASTR,EASTT,EASTP,RKM,
|
|
|
* 90.D0-GCLAT,GLON,2)
|
|
|
CALL VCTCNV(UPX,UPY,UPZ,PX,PY,PZ,UPR,UPT,UPP,RKM,90.D0-GCLAT,GLON,
|
|
|
* 2)
|
|
|
SOUTHM = VMAG(SOUTH)
|
|
|
SOUTHX = SOUTHX/SOUTHM
|
|
|
SOUTHY = SOUTHY/SOUTHM
|
|
|
SOUTHZ = SOUTHZ/SOUTHM
|
|
|
EASTM = VMAG(EAST)
|
|
|
EASTX = EASTX/EASTM
|
|
|
EASTY = EASTY/EASTM
|
|
|
EASTZ = EASTZ/EASTM
|
|
|
CALL VPROD(BF,EAST,BPERPSOUTH)
|
|
|
BPERPSOUTHM = VMAG(BPERPSOUTH)
|
|
|
PERPSOUTH(1) = BPERPSOUTH(1)/BPERPSOUTHM
|
|
|
PERPSOUTH(2) = BPERPSOUTH(2)/BPERPSOUTHM
|
|
|
PERPSOUTH(3) = BPERPSOUTH(3)/BPERPSOUTHM
|
|
|
CALL VPROD(SOUTH,BF,BPERPEAST)
|
|
|
BPERPEASTM = VMAG(BPERPEAST)
|
|
|
PERPEAST(1) = BPERPEAST(1)/BPERPEASTM
|
|
|
PERPEAST(2) = BPERPEAST(2)/BPERPEASTM
|
|
|
PERPEAST(3) = BPERPEAST(3)/BPERPEASTM
|
|
|
UPB(1) = -BF(1)/VMAG(BF)
|
|
|
UPB(2) = -BF(2)/VMAG(BF)
|
|
|
UPB(3) = -BF(3)/VMAG(BF)
|
|
|
C
|
|
|
IF (QDIAG .NE. 0) THEN
|
|
|
WRITE (6,FMT='(''southr,southt,southp,eastr,eastt,eastp = '')')
|
|
|
WRITE (6,FMT='(3e13.5,3x,3e13.5)') SOUTHR,SOUTHT,SOUTHP,EASTR,
|
|
|
* EASTT,EASTP
|
|
|
WRITE (6,FMT='(''south = '', 4e13.5)') SOUTH,SPROD(SOUTH,SOUTH)
|
|
|
WRITE (6,FMT='('' east = '', 4e13.5)') EAST,SPROD(EAST,EAST)
|
|
|
WRITE (6,FMT='('' up = '', 4e13.5)') UP,SPROD(UP,UP)
|
|
|
SP = SPROD(SOUTH,EAST)
|
|
|
WRITE (6,FMT='(''sp = '', e13.5)') SP
|
|
|
CALL VPROD(SOUTH,EAST,ZEROM)
|
|
|
WRITE (6,FMT='(''zerom = '', 4e13.5)') ZEROM,SPROD(ZEROM,ZEROM)
|
|
|
CALL VPROD(UP,SOUTH,EAST2)
|
|
|
CALL VPROD(EAST,UP,SOUTH2)
|
|
|
CALL VPROD(SOUTH,EAST,UP2)
|
|
|
WRITE (6,FMT='(''south = '', 3e13.5)') SOUTH
|
|
|
WRITE (6,FMT='(''south2 = '', 3e13.5)') SOUTH2
|
|
|
WRITE (6,FMT='(''east = '', 3e13.5)') EAST
|
|
|
WRITE (6,FMT='(''east2 = '', 3e13.5)') EAST2
|
|
|
WRITE (6,FMT='(''up = '', 3e13.5)') UP
|
|
|
WRITE (6,FMT='(''up2 = '', 3e13.5)') UP2
|
|
|
WRITE (6,FMT='(''bperpsouth,bperpsouthm,perpsouth = '')')
|
|
|
WRITE (6,FMT='(7e13.5)') BPERPSOUTH,BPERPSOUTHM,PERPSOUTH
|
|
|
WRITE (6,FMT='(''bperpeast,bperpeastm,perpeast = '')')
|
|
|
WRITE (6,FMT='(7e13.5)') BPERPEAST,BPERPEASTM,PERPEAST
|
|
|
WRITE (6,FMT='(''bf,bfm,upb = '', 7e13.5)') BF,VMAG(BF),UPB
|
|
|
WRITE (6,FMT='(''perpsouth,perpeast,upb = '')')
|
|
|
WRITE (6,FMT='(2f8.2,3f8.4,2x,3f8.4,2x,3f8.4)') GCLAT,GLON,
|
|
|
* PERPSOUTH,PERPEAST,UPB
|
|
|
CALL VCTCNV(PERPSOUTH(1),PERPSOUTH(2),PERPSOUTH(3),PX,PY,PZ,
|
|
|
* PERPSOUTHR,PERPSOUTHT,PERPSOUTHP,RKM,90.0D0-GCLAT,
|
|
|
* GLON,1)
|
|
|
CALL VCTCNV(PERPEAST(1),PERPEAST(2),PERPEAST(3),PX,PY,PZ,
|
|
|
* PERPEASTR,PERPEASTT,PERPEASTP,RKM,90.0D0-GCLAT,
|
|
|
* GLON,1)
|
|
|
CALL VCTCNV(UPB(1),UPB(2),UPB(3),PX,PY,PZ,UPBR,UPBT,UPBP,RKM,
|
|
|
* 90.0D0-GCLAT,GLON,1)
|
|
|
WRITE (6,FMT='(3f8.4,2x,3f8.4,2x,3f8.4)') PERPSOUTHR,
|
|
|
* PERPSOUTHT,PERPSOUTHP
|
|
|
WRITE (6,FMT='(3f8.4,2x,3f8.4,2x,3f8.4)') PERPEASTR,PERPEASTT,
|
|
|
* PERPEASTP
|
|
|
WRITE (6,FMT='(3f8.4,2x,3f8.4,2x,3f8.4)') UPBR,UPBT,UPBP
|
|
|
CALL VPROD(UPB,PERPSOUTH,PERPEAST2)
|
|
|
WRITE (6,FMT='(''perpeast = '', 3e13.5)') PERPEAST
|
|
|
WRITE (6,FMT='(''perpeast2 = '', 3e13.5)') PERPEAST2
|
|
|
CALL VPROD(PERPEAST,UPB,PERPSOUTH2)
|
|
|
WRITE (6,FMT='(''perpsouth = '', 3e13.5)') PERPSOUTH
|
|
|
WRITE (6,FMT='(''perpsouth2 = '', 3e13.5)') PERPSOUTH2
|
|
|
CALL VPROD(PERPSOUTH,PERPEAST,UPB2)
|
|
|
WRITE (6,FMT='(''upb = '', 3e13.5)') UPB
|
|
|
WRITE (6,FMT='(''upb2 = '', 3e13.5)') UPB2
|
|
|
END IF
|
|
|
C
|
|
|
C .....Calculate l-shell parameter.....
|
|
|
GCALT = RKM - 6378.16D0/DSQRT(1.D0+.0067397D0*ST*ST)
|
|
|
CALL INVAR(TM1,GCLAT,GLON,GCALT,0.01D0,BB,RL)
|
|
|
RL = MAX(RL,1.0D0)
|
|
|
C
|
|
|
C .....Calculate dip latitude.....
|
|
|
RLATM = ATAN(.5D0*TAN(DTR*AINC))/DTR
|
|
|
C
|
|
|
C .....Calculate invariant latitude.....
|
|
|
RLATI = ACOS(DSQRT(1.0D0/RL))/DTR
|
|
|
C
|
|
|
C .....Convert radar propagation vector and observation point
|
|
|
C position to earth centered cartesian coordinates.....
|
|
|
CALL RPCART(SR,SLATGC,SLON,AZ,EL,RANGE,RFX,RFY,RFZ,PFX,PFY,PFZ)
|
|
|
C
|
|
|
C .....Calculate earth-centered cartestian components of unit vector
|
|
|
C perpendicular to radar propagation vector and geomagnetic
|
|
|
C geomagnetic field at observation point.....
|
|
|
CALL VPROD(RF,BF,EF)
|
|
|
EFMAG = VMAG(EF,EF)
|
|
|
EFX = EFX/EFMAG
|
|
|
EFY = EFY/EFMAG
|
|
|
EFZ = EFZ/EFMAG
|
|
|
C
|
|
|
C .....Calculate aspect angle.....
|
|
|
CASPCT = SPROD(RF,BF)/(VMAG(RF)*VMAG(BF))
|
|
|
CASPCT = MIN(MAX(CASPCT,-1.0D0),1.0D0)
|
|
|
ASPCT = ACOS(CASPCT)/DTR
|
|
|
C
|
|
|
C .....Calculate direction cosines of radar beam with respect to
|
|
|
C geocentric south, east, up.....
|
|
|
CALL VCTCNV(RFX,RFY,RFZ,PFX,PFY,PFZ,RFR,RFT,RFP,RR,RT,RP,1)
|
|
|
CST = RFT/RANGE
|
|
|
CSP = RFP/RANGE
|
|
|
CSR = RFR/RANGE
|
|
|
C
|
|
|
C .....Compute geodetic direction cosines. the direction cosines
|
|
|
C are with respect to south, east, up rather than x (north),
|
|
|
C y (east), z (down) as used in gdv.....
|
|
|
CALL GDV(GDLAT,GCLAT,CSR,CST,CSP,CX,CY,CZ)
|
|
|
CTAB(1) = -CX
|
|
|
CTAB(2) = CY
|
|
|
CTAB(3) = -CZ
|
|
|
C
|
|
|
IF (QDIAG .NE. 0) THEN
|
|
|
WRITE (6,FMT='(''rl,rlatm,rlati,aspct = '', 4f9.2)') RL,RLATM,
|
|
|
* RLATI,ASPCT
|
|
|
WRITE (6,FMT='(''rfx,rfy,rfz = '', 3f10.2)') RFX,RFY,RFZ
|
|
|
WRITE (6,FMT='(''cst,csp,csr = '', 3f9.5)') CST,CSP,CSR
|
|
|
WRITE (6,FMT='(''ctab = '', 3f9.5)') CTAB
|
|
|
END IF
|
|
|
C
|
|
|
C .....Calculate observation point apex coordinates.....
|
|
|
ISTOP = 0
|
|
|
NPR = 0
|
|
|
INIT = 0
|
|
|
D = 1.0D-6
|
|
|
CALL LINTRA(TM1,GCLAT,GLON,RKM,GDALT,0.0D0,PLAT,PLON,PRKM,ARC,
|
|
|
* ARAD,ALAT,ALON,ISTOP,NPR,INIT,IER)
|
|
|
Q0(1) = DTR*(90.0D0-ALAT)
|
|
|
Q0(2) = DTR*ALON
|
|
|
C
|
|
|
C .....Calculate arc length along field line from surface to
|
|
|
C observation point.....
|
|
|
ISTOP = -1
|
|
|
CALL LINTRA(TM1,GCLAT,GLON,RKM,GDALT,0.0D0,PLAT,PLON,PRKM,ARC,
|
|
|
* ARAD,ALAT,ALON,ISTOP,NPR,INIT,IER)
|
|
|
Q0(3) = ARC/6370.0D0
|
|
|
C
|
|
|
C .....Get conjugate point using lintra.....
|
|
|
HI = DBLE(GDALT)
|
|
|
C
|
|
|
C .....Tell lintra to find mag conj, not apex.....
|
|
|
ISTOP = 1
|
|
|
CALL LINTRA(TM,GCLAT,GLON,RKM,HI,GDALT,CPLAT,CPLON,CPRKM,CARC,
|
|
|
* CARAD,CALAT,CALON,ISTOP,NPR,INIT,IER)
|
|
|
C .....Get geodetic latitude of conjugate point.....
|
|
|
CALL CONVRT(2,CGDLAT,CGDALT,CPLAT,CPRKM)
|
|
|
IF (CPLON.LT.0.0D0) THEN
|
|
|
CPLON = CPLON + 360.0D0
|
|
|
END IF
|
|
|
C
|
|
|
C .....Fill rcor with calculated coordinates.....
|
|
|
GDLAT = GDLATS
|
|
|
RCOR(1) = AZ
|
|
|
RCOR(2) = EL
|
|
|
RCOR(3) = RANGE
|
|
|
RCOR(4) = GDLAT
|
|
|
RCOR(5) = GLON
|
|
|
RCOR(6) = GDALT
|
|
|
RCOR(7) = B
|
|
|
RCOR(8) = BR
|
|
|
RCOR(9) = BT
|
|
|
RCOR(10) = BP
|
|
|
RCOR(11) = RLATM
|
|
|
RCOR(12) = RLATI
|
|
|
RCOR(13) = RL
|
|
|
RCOR(14) = ALAT
|
|
|
RCOR(15) = ALON
|
|
|
c RCOR(16) = GF(1)
|
|
|
c RCOR(17) = GF(2)
|
|
|
c RCOR(18) = GF(3)
|
|
|
c RCOR(19) = GF(4)
|
|
|
RCOR(16) = 0.0
|
|
|
RCOR(17) = 0.0
|
|
|
RCOR(18) = 0.0
|
|
|
RCOR(19) = 0.0
|
|
|
RCOR(20) = CTAB(1)
|
|
|
RCOR(21) = CTAB(2)
|
|
|
RCOR(22) = CTAB(3)
|
|
|
RCOR(23) = 0.0
|
|
|
RCOR(24) = 0.0
|
|
|
RCOR(25) = 0.0
|
|
|
RCOR(26) = 0.0
|
|
|
RCOR(27) = 0.0
|
|
|
RCOR(28) = 0.0
|
|
|
RCOR(29) = AINC
|
|
|
RCOR(30) = DEC
|
|
|
RCOR(31) = GCLAT
|
|
|
RCOR(32) = ASPCT
|
|
|
RCOR(33) = CPLAT
|
|
|
RCOR(34) = CGDLAT
|
|
|
RCOR(35) = CPLON
|
|
|
RCOR(36) = 0.0
|
|
|
RCOR(37) = 0.0
|
|
|
RCOR(38) = 0.0
|
|
|
RCOR(39) = 0.0
|
|
|
RCOR(40) = 0.0
|
|
|
RCOR(41) = 0.0
|
|
|
RCOR(42) = 0.0
|
|
|
RCOR(43) = 0.0
|
|
|
RCOR(44) = 0.0
|
|
|
RCOR(45) = 0.0
|
|
|
RCOR(46) = 0.0
|
|
|
RCOR(47) = 0.0
|
|
|
RCOR(45) = 0.0
|
|
|
RCOR(46) = 0.0
|
|
|
RCOR(47) = 0.0
|
|
|
RCOR(48) = 0.0
|
|
|
RCOR(49) = 0.0
|
|
|
RCOR(50) = 0.0
|
|
|
RCOR(51) = 0.0
|
|
|
RCOR(52) = 0.0
|
|
|
RCOR(53) = 0.0
|
|
|
RCOR(54) = 0.0
|
|
|
C
|
|
|
RETURN
|
|
|
END
|
|
|
|