ISCE_INSAR/components/isceobj/Util/src/radar_to_xyz_nostruct.F

93 lines
2.3 KiB
FortranFixed
Raw Normal View History

2019-01-16 19:40:08 +00:00
c****************************************************************
subroutine radar_to_xyz(r_a,r_e2,r_lat0,r_lon0,r_hdg0,r_mat,r_ov)
c****************************************************************
c**
c** FILE NAME: radar_to_xyz.for
c**
c** DATE WRITTEN:1/15/93
c**
c** PROGRAMMER:Scott Hensley
c**
c** FUNCTIONAL DESCRIPTION:This routine computes the transformation
c** matrix and translation vector needed to get between radar (s,c,h)
c** coordinates and (x,y,z) WGS-84 coordinates.
c**
c** ROUTINES CALLED:euler,
c**
c** NOTES: none
c**
c** UPDATE LOG:
c**
c*****************************************************************
implicit none
c INPUT VARIABLES:
real*8 r_a !semimajor axis
real*8 r_e2 !eccentricity squared
real*8 r_lat0 !peg latitude
real*8 r_lon0 !peg longitude
real*8 r_hdg0 !peg heading
c OUTPUT VARIABLES:
real*8 r_mat(3,3) !rotation matrix
real*8 r_ov(3) !translation vector
c LOCAL VARIABLES:
integer i,i_type
real*8 r_radcur,r_h,r_p(3),r_slt,r_clt,r_clo,r_slo,r_up(3)
real*8 r_chg,r_shg,rdir
c DATA STATEMENTS:none
C FUNCTION STATEMENTS:
external rdir
c PROCESSING STEPS:
c first determine the rotation matrix
r_clt = cos(r_lat0)
r_slt = sin(r_lat0)
r_clo = cos(r_lon0)
r_slo = sin(r_lon0)
r_chg = cos(r_hdg0)
r_shg = sin(r_hdg0)
r_mat(1,1) = r_clt*r_clo
r_mat(1,2) = -r_shg*r_slo - r_slt*r_clo*r_chg
r_mat(1,3) = r_slo*r_chg - r_slt*r_clo*r_shg
r_mat(2,1) = r_clt*r_slo
r_mat(2,2) = r_clo*r_shg - r_slt*r_slo*r_chg
r_mat(2,3) = -r_clo*r_chg - r_slt*r_slo*r_shg
r_mat(3,1) = r_slt
r_mat(3,2) = r_clt*r_chg
r_mat(3,3) = r_clt*r_shg
c find the translation vector
r_radcur = rdir(r_a,r_e2,r_hdg0,r_lat0)
i_type = 1
r_h = 0.d0
c call latlon(r_a,r_e2,r_p,r_lat0,r_lon0,r_h,i_type)
call latlon_elp(r_a,r_e2,r_p,r_lat0,r_lon0,r_h,i_type)
r_clt = cos(r_lat0)
r_slt = sin(r_lat0)
r_clo = cos(r_lon0)
r_slo = sin(r_lon0)
r_up(1) = r_clt*r_clo
r_up(2) = r_clt*r_slo
r_up(3) = r_slt
do i=1,3
r_ov(i) = r_p(i) - r_radcur*r_up(i)
enddo
end