c**************************************************************** subroutine convert_sch_to_xyz(ptm,r_schv,r_xyzv,i_type) c**************************************************************** c** c** FILE NAME: convert_sch_to_xyz.for c** c** DATE WRITTEN:1/15/93 c** c** PROGRAMMER:Scott Hensley c** c** FUNCTIONAL DESCRIPTION: This routine applies the affine matrix c** provided to convert the sch coordinates xyz WGS-84 coordintes or c** the inverse transformation. c** c** ROUTINES CALLED:latlon,matvec c** c** NOTES: none c** c** UPDATE LOG: c** c***************************************************************** implicit none c INPUT VARIABLES: c structure /pegtrans/ !transformation parameters c real*8 r_mat(3,3) c real*8 r_matinv(3,3) c real*8 r_ov(3) c real*8 r_radcur c end structure c record /pegtrans/ ptm type pegtrans sequence real (8) r_mat(3,3) real (8) r_matinv(3,3) real (8) r_ov(3) real (8) r_radcur end type pegtrans type (pegtrans) ptm real*8 r_schv(3) !sch coordinates of a point real*8 r_xyzv(3) !WGS-84 coordinates of a point integer i_type !i_type = 0 sch => xyz ; !i_type = 1 xyz => sch c OUTPUT VARIABLES: see input c LOCAL VARIABLES: integer i_t real*8 r_schvt(3),r_llh(3) c structure /ellipsoid/ c real*8 r_a c real*8 r_e2 c end structure c record /ellipsoid/ sph type ellipsoid sequence real (8) r_a real (8) r_e2 end type ellipsoid type (ellipsoid) sph c DATA STATEMENTS: C FUNCTION STATEMENTS:none c PROCESSING STEPS: c compute the linear portion of the transformation sph%r_a = ptm%r_radcur sph%r_e2 = 0.0d0 if(i_type .eq. 0)then r_llh(1) = r_schv(2)/ptm%r_radcur r_llh(2) = r_schv(1)/ptm%r_radcur r_llh(3) = r_schv(3) i_t = 1 call latlon(sph,r_schvt,r_llh,i_t) call matvec(ptm%r_mat,r_schvt,r_xyzv) call lincomb(1.d0,r_xyzv,1.d0,ptm%r_ov,r_xyzv) elseif(i_type .eq. 1)then call lincomb(1.d0,r_xyzv,-1.d0,ptm%r_ov,r_schvt) call matvec(ptm%r_matinv,r_schvt,r_schv) i_t = 2 call latlon(sph,r_schv,r_llh,i_t) r_schv(1) = ptm%r_radcur*r_llh(2) r_schv(2) = ptm%r_radcur*r_llh(1) r_schv(3) = r_llh(3) endif end