86 lines
2.1 KiB
Fortran
86 lines
2.1 KiB
Fortran
!c****************************************************************
|
|
|
|
subroutine schbasis(ptm,r_sch,r_xyzschmat,r_schxyzmat)
|
|
|
|
!c****************************************************************
|
|
!c**
|
|
!c** FILE NAME: schbasis.f
|
|
!c**
|
|
!c** DATE WRITTEN: 10/01/97
|
|
!c**
|
|
!c** PROGRAMMER: Scott Hensley
|
|
!c**
|
|
!c** FUNCTIONAL DESCRIPTION: This routine computes the transformation
|
|
!c** matrix from xyz to a local sch frame.
|
|
!c**
|
|
!c** ROUTINES CALLED: matmat,tranmat
|
|
!c**
|
|
!c** NOTES: none
|
|
!c**
|
|
!c** UPDATE LOG:
|
|
!c**
|
|
!c*****************************************************************
|
|
|
|
implicit none
|
|
|
|
!c INPUT VARIABLES:
|
|
|
|
type :: pegtrans !peg transformation parameters
|
|
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_sch(3) !SCH position
|
|
|
|
!c OUTPUT VARIABLES:
|
|
|
|
real*8 r_xyzschmat(3,3)
|
|
real*8 r_schxyzmat(3,3)
|
|
|
|
!c LOCAL VARIABLES:
|
|
|
|
real*8 r_coss,r_cosc,r_sins,r_sinc
|
|
real*8 r_xyzv(3),r_llh(3),r_schhdg
|
|
real*8 r_matschxyzp(3,3)
|
|
|
|
!c DATA STATEMENTS: none
|
|
|
|
!C FUNCTION STATEMENTS:
|
|
|
|
!c PROCESSING STEPS:
|
|
|
|
!c compute transformation from a sch local basis to X'Y'Z' basis
|
|
|
|
r_coss = cos(r_sch(1)/ptm%r_radcur)
|
|
r_sins = sin(r_sch(1)/ptm%r_radcur)
|
|
|
|
r_cosc = cos(r_sch(2)/ptm%r_radcur)
|
|
r_sinc = sin(r_sch(2)/ptm%r_radcur)
|
|
|
|
r_matschxyzp(1,1) = -r_sins
|
|
r_matschxyzp(1,2) = -r_sinc*r_coss
|
|
r_matschxyzp(1,3) = r_coss*r_cosc
|
|
r_matschxyzp(2,1) = r_coss
|
|
r_matschxyzp(2,2) = -r_sinc*r_sins
|
|
r_matschxyzp(2,3) = r_sins*r_cosc
|
|
r_matschxyzp(3,1) = 0.0
|
|
r_matschxyzp(3,2) = r_cosc
|
|
r_matschxyzp(3,3) = r_sinc
|
|
|
|
!c compute sch to xyz matrix
|
|
|
|
call matmat(ptm%r_mat,r_matschxyzp,r_schxyzmat)
|
|
|
|
!c get the inverse
|
|
|
|
call tranmat(r_schxyzmat,r_xyzschmat)
|
|
|
|
end
|
|
|
|
|
|
|
|
|