www.pudn.com > FrameTransfer.rar > frametrans.for


	Program frametransfer 
      implicit none 
 
	  integer ::  year, month, day, hour, minute, types 
	  real*8  ::  second 
	  real*8  ::  x_input,y_input,z_input 
     .           ,x_output,y_output,z_output,tx,ty,tz,ox,oy,oz 
 
	  x_input = 0 
	  y_input = 100 
	  z_input = 0 
 
	  write(*,*)  x_input,y_input,z_input 
	  call frametrans(2008,3,20, 0,0,0.0, 0 ,x_input,y_input,z_input 
     .                ,x_output,y_output,z_output) 
         
	  tx = x_output 
	  ty = y_output 
	  tz = z_output 
 
 	  write(*,*)  tx,ty,tz     
	  call frametrans(2008,3,20, 0,0,0.0, 1 ,tx,ty,tz 
     .                ,ox,oy,oz) 
 
	  write(*,*) ox,oy,oz 
      end program 
 
	subroutine frametrans( 
     .                     year,month,day          !观测日期,输入参数 
     .                    ,hour,minute,second      !观测时间,输入参数 
     .                    ,types                  !转换类型,0为从地固系转换到惯性系,1为从惯性系转换到地固系,输入参数  
     .					,x_input,y_input,z_input  !待转换的坐标值, 输入参数 
     .					,x_output,y_output,z_output  !经过转换后的坐标值,输出参数 
     .                     ) 
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc 
cc                         yang.z    2008.03.21                         cc 
cc      根据所选转换类型对输入的坐标在地固系和惯性系之间进行转换,      cc 
cc      惯性系参考历元为J2000.0(2000年1月1日12时),转换时历元为       cc 
cc      输入的观测时间,算法通过春分点、格林尼治子午线及经典的岁        cc 
cc      差章动矩阵实现坐标转换。参见《天文地球动力学原理》高布锡,      cc 
cc      《GPS相对定位的数学模型》 魏子卿,葛茂荣                        cc 
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc	 
	implicit none 
 
	integer ::  year, month, day, hour, minute, types 
	real*8  ::  second 
	real*8  ::  x_input,y_input,z_input,posin(3) 
     .           ,x_output,y_output,z_output,posout(3) 
 
      integer ::  yr,mo 
      real*8  ::  JD, MJD   !输入时间的儒略日、约化儒略日 
	real*8  ::  t_TDB  !观测时刻减参考历元(J2000.0)的儒略世纪数 
 
	integer ::  i,j,k  !循环变量 
 
	real*8  ::  kesiA,thitaA,zA   !岁差角 
	real*8  ::  epsilonA  !黄赤交角的变化   
 
	real*8  ::  deltaphi 
     .           ,deltepthilon 
 
	integer ::  KL(106)        !  L,L',F,D,OMG的系数 
     .           ,KLP(106) 
     .           ,KF(106) 
     .           ,KD(106) 
     .           ,KOMG(106) 
 
	real*8  ::  AI(106),AAI(106)  !黄经章动及变化率 
     .           ,BI(106),BBI(106)  !交角章动及变化率 
 
	real*8  ::  m_L, m_LP, m_F, m_D, m_OMG 
	real*8  ::  P(3,3), N(3,3), R(3,3), W(3,3) 
	real*8  ::  PRZZ(3,3), PRYTHITA(3,3), PRZKESI(3,3) 
     .           ,NRXEPTILON(3,3), NRZPHI(3,3), NRXEPTILON2(3,3) 
     .           ,BUFFERP(3,3), BUFFERN(3,3),WRXYP(3,3),WRYXP(3,3) 
     .           ,BUFPN(3,3),BUFPNR(3,3),CTSTOCIS(3,3),CISTOCTS(3,3) 
 
	real*8  ::  GST        !t时刻格林尼治真恒星时 
     .          , GMST 
     .          , GMST0 
     .          , gama       !恒星时与世界时之比 
     .          , deltaUT    !UT1-UTC 
     .          , UTC 
     .          , modangl 
     .          , pi 
 
	integer ::  control 
	integer ::  mm, dd 
	real*8  ::  XPOLE, YPOLE 
 
	character(len = 4)  :: t_year 
	character(len = 80) :: buffer 
 
	  pi = 3.141592657526 
 
c	  year  = 2002 
c	  month = 1 
c	  day   = 3 
 
	  data KL /0,0,0,0,0,1,0,0,1,0,1,0,-1,1,0,-1,-1,1,2,-2,0,2,2,1,0 
     .          ,0,-1,0,0,-1,0,1,0,2,-1,1,0,0,1,0,-2,0,2,1,1,0,0,2,1,1 
     .          ,0,0,1,2,0,1,1,-1,0,1,3,-2,1,-1,1,-1,0,-2,2,3,1,0,1,1,1 
     .          ,0,0,0,1,1,1,1,2,0,0,-2,2,0,0,0,0,1,3,-2,-1,0,0,-1,2,2 
     .          ,2,2,1,-1,-1,0/ 
 
	  data KLP /0,0,0,0,1,0,1,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 
     .           ,0,0,2,2,0,1,0,-1,0,0,0,-1,0,1,1,0,0,0,0,0,0,-1,0,-1,0 
     .           ,0,1,0,0,1,1,-1,-1,-1,-1,0,0,0,0,0,0,-2,0,0,0,1,0,0,0,1 
     .           ,1,1,1,0,0,0,0,0,0,0,0,0,-1,0,0,1,1,0,0,0,0,1,0,1,0 
     .           ,0,0,-1,0,-1,0/ 
 
	  data KF /0,2,2,0,0,0,2,2,2,2,0,2,2,0,0,2,0,2,0,2,2,2,0,2,2 
     .          ,2,2,0,2,0,0,0,0,-2,2,2,2,2,0,2,0,0,2,0,2,0,2,2,0,0 
     .          ,0,0,-2,0,2,0,0,2,2,2,2,2,2,2,0,2,2,0,0,0,2,2,0,2,0 
     .          ,0,2,-2,-2,-2,2,0,0,2,2,2,2,2,-2,4,0,2,2,2,0,-2,2,4,0,0 
     .          ,2,-2,0,0,0,0/ 
 
	  data KD /0,-2,0,0,0,0,-2,0,0,-2,-2,-2,0,0,2,2,0,0,-2,0 
     .          ,2,0,0,-2,0,-2,0,0,-2,2,0,-2,0,0,2,2,0,2,-2,0 
     .          ,2,2,-2,2,-2,-2,-2,0,0,-1,1,-2,0,-2,-2,0,-1,2,2,0 
     .          ,0,0,0,4,0,-2,-2,0,0,0,0,1,2,2,-2,2,-2,2,2,-2 
     .          ,-2,-4,-4,4,-1,4,2,0,0,-2,0,-2,-2,2,0,2,0,0,-2,2 
     .          ,-2,0,-2,1,2,1/ 
 
	  data KOMG /1,2,2,2,0,0,2,1,2,2,0,1,2,1,0,2,1,1,0,1,2,2,0,2,0 
     .            ,0,1,0,2,1,1,1,1,0,1,2,2,1,0,2,1,1,2,0,1,1,1,1,0,0 
     .            ,0,0,0,1,1,0,0,2,2,2,2,2,0,2,2,1,1,1,1,0,2,2,1,1,1 
     .            ,0,0,0,0,0,0,0,0,2,2,2,2,1,1,2,2,2,2,2,2,1,1,2,0,0 
     .            ,1,1,0,1,1,0/ 
 
	  data AI/-17.1996,-1.3187,-0.2274, 0.2062, 0.1426, 0.0712,-0.0517 
     .          ,-0.0386,-0.0301, 0.0217,-0.0158, 0.0129, 0.0123, 0.0063 
     .          , 0.0063,-0.0059,-0.0058,-0.0051, 0.0048, 0.0046,-0.0038 
     .          ,-0.0031, 0.0029, 0.0029, 0.0026,-0.0022, 0.0021, 0.0017 
     .          ,-0.0016, 0.0016,-0.0015,-0.0013,-0.0012, 0.0011,-0.0010 
     .          ,-0.0008,-0.0007,-0.0007,-0.0007, 0.0007,-0.0006,-0.0006 
     .          , 0.0006, 0.0006, 0.0006,-0.0005,-0.0005,-0.0005, 0.0005 
     .          ,-0.0004,-0.0004,-0.0004, 0.0004, 0.0004, 0.0004,-0.0003 
     .          ,-0.0003,-0.0003,-0.0003,-0.0003,-0.0003,-0.0003, 0.0003 
     .          ,-0.0002,-0.0002,-0.0002,-0.0002,-0.0002, 0.0002, 0.0002 
     .          , 0.0002, 0.0002,-0.0001,-0.0001,-0.0001,-0.0001,-0.0001 
     .          ,-0.0001,-0.0001,-0.0001,-0.0001,-0.0001,-0.0001,-0.0001 
     .          ,-0.0001,-0.0001,-0.0001,-0.0001,-0.0001, 0.0001, 0.0001 
     .          , 0.0001, 0.0001, 0.0001, 0.0001, 0.0001, 0.0001, 0.0001 
     .          , 0.0001, 0.0001, 0.0001, 0.0001, 0.0001, 0.0001, 0.0001 
     .          , 0.0001/ 
 
	  data AAI /-0.01742,-0.00016,-0.00002, 0.00002,-0.00034,0.00001 
     .           , 0.00012,-0.00004,     0.0,-0.00005,     0.0,0.00001 
     .           ,     0.0, 0.00001,     0.0,     0.0,-0.00001,    0.0 
     .           ,     0.0,     0.0,     0.0,     0.0,     0.0,    0.0 
     .           ,     0.0,     0.0,     0.0,-0.00001, 0.00001,    0.0 
     .           ,     0.0,     0.0,     0.0,     0.0,     0.0,    0.0 
     .           ,     0.0,     0.0,     0.0,     0.0,     0.0,    0.0 
     .           ,     0.0,     0.0,     0.0,     0.0,     0.0,    0.0 
     .           ,     0.0,     0.0,     0.0,     0.0,     0.0,    0.0 
     .           ,     0.0,     0.0,     0.0,     0.0,     0.0,    0.0 
     .           ,     0.0,     0.0,     0.0,     0.0,     0.0,    0.0 
     .           ,     0.0,     0.0,     0.0,     0.0,     0.0,    0.0 
     .           ,     0.0,     0.0,     0.0,     0.0,     0.0,    0.0 
     .           ,     0.0,     0.0,     0.0,     0.0,     0.0,    0.0 
     .           ,     0.0,     0.0,     0.0,     0.0,     0.0,    0.0 
     .           ,     0.0,     0.0,	   0.0,		0.0,	 0.0,	 0.0 
     .		   ,	 0.0,	  0.0,	   0.0,		0.0,	 0.0,	 0.0 
     .		   ,	 0.0,	  0.0,	   0.0,     0.0/ 
 
	  data BI /9.2025,0.5736,0.0977,-0.0895,0.0054,-0.0007,0.0224,0.02 
     .          ,0.0129,-0.0095,-0.0001,-0.007,-0.0053,-0.0033,-0.0002 
     .          ,0.0026,0.0032,0.0027,0.0001,-0.0024,0.0016,0.0013 
     .          ,-0.0001,-0.0012,-0.0001,0.0,-0.001,0.0,0.0007,-0.0008 
     .          ,0.0009,0.0007,0.0006,0.0,0.0005,0.0003,0.0003,0.0003 
     .          ,0.0,-0.0003,0.0003,0.0003,-0.0003,0.0,-0.0003,0.0003 
     .          ,0.0003,0.0003,0.0,0.0,0.0,0.0,0.0,-0.0002,-0.0002,0.0 
     .          ,0.0,0.0001,0.0001,0.0001,0.0001,0.0001,0.0,0.0001 
     .          ,0.0001,0.0001,0.0001,0.0001,-0.0001,0.0,-0.0001,-0.0001 
     .          ,0.0,0.0001,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 
     .          ,0.0001,0.0,0.0,0.0,0.0,0.0,-0.0001,0.0,-0.0001,-0.0001 
     .          ,0.0,0.0,0.0,0.0,0.0,-0.0001,0.0,0.0,0.0,0.0,0.0/ 
 
	  data BBI /0.00089,-0.00031,-0.00005,0.00005,-0.00001,0.0 
     .           ,-0.00006,0.0,-0.00001,0.00003,0.0,0.0,0.0,0.0,0.0,0.0 
     .           ,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 
     .           ,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 
     .           ,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 
     .           ,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 
     .           ,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 
     .           ,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 
     .           ,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0/ 
 
cc    根据输入时间计算儒略日、儒略世纪数 
        if(month.LE.2) then 
          yr = year - 1 
	    mo = month + 12 
	  else 
          yr = year 
          mo = month 
        end if 
  
  	  JD = int(365.25*yr) + int(30.6001*(mo+1)) + day + hour/24.d0 
     .     + minute/1440.d0 + second/86400.d0 + 1720981.5 
	  MJD = JD - 2400000.5 
	  t_TDB = (JD - 2451545.0)/36525.d0 
cc    计算月亮平近点角m_L,太阳平近点角m_LP,月亮平交点距m_F,月亮离开太阳的平经差m_D, 
cc        月亮升交点平黄经m_OMG(单位为度) 
c	  m_L = (134.d0+57/60.d0+46.733/3600.d0) 
c     .      + (1325*360.d0 + 198.d0+52/60.d0+2.633/3600.d0)*t_TDB 
c     .      + (31.31/3600.d0)*t_TDB**2 + (0.064/3600.d0)*t_TDB**3 
c 
c        m_LP = (357.d0+31/60.d0+39.804/3600.d0) 
c     .       + (99*360.d0 + 359.d0+3/60.d0+1.244/3600.d0)*t_TDB 
c     .       - (0.577/3600.d0)*t_TDB**2 - (0.012/3600.d0)*t_TDB**3 
ccc 
c	  m_F = (93.d0+16/60.d0+18.877/3600.d0) 
c     .      + (1342*360.d0 + 82.d0+1/60.d0+3.137/3600.d0)*t_TDB 
c     .      - (13.257/3600.d0)*t_TDB**2 + (0.011/3600.d0)*t_TDB**3 
c 
c	  m_D = (297.d0+51/60.d0+1.307/3600.d0) 
c     .      + (1236*360.d0 + 307.d0+6/60.d0+41.328/3600.d0)*t_TDB 
c     .      - (6.891/3600.d0)*t_TDB**2 + (0.019/3600.d0)*t_TDB**3 
c 
c	  m_OMG = (125.d0+2/60.d0+40.28/3600.d0) 
c     .        - (5*360.d0 + 134.d0+8/60.d0+10.539/3600.d0)*t_TDB 
c     .        + (7.455/3600.d0)*t_TDB**2 + (0.008/3600.d0)*t_TDB**3 
 
cc    《天文地球动力学原理》中附录F公式 
	 
	  m_L   = 134.96 + 13.064993*(MJD - 51544.5) 
	  m_LP  = 357.53 + 0.985600*(MJD - 51544.5) 
	  m_F   = 93.27 + 13.22935*(MJD - 51544.5) 
	  m_D   = 297.85 + 12.190749*(MJD - 51544.5) 
	  m_OMG = 125.04 - 0.052954*(MJD - 51544.5) 
 
cc    求解黄经章动和交角章动(单位为角秒) 
	  deltaphi = 0.d0 
	  deltepthilon = 0.d0 
	  do i = 1,106 
	    modangl = mod((KL(i)*m_L + KLP(i)*m_LP + KF(i)*m_F 
     .                    + KD(i)*m_D + KOMG(i)*m_OMG), 360.d0 ) 
		deltaphi = deltaphi + (AI(i) + AAI(i)*t_TDB) 
     .             * dsind(modangl) 
		deltepthilon = deltepthilon + (BI(i) + BBI(i)*t_TDB) 
     .                 * dcosd(modangl)		 
	  end do 
	 
c	deltaphi = (-6.857 - 0.007*t_TDB)*dsind(mod(m_OMG,360.d0))  
c     .          + 0.083 * dsind(mod(2*m_OMG,360.d0))  
c     .          - 0.506 * dsind(mod(2*m_LP,360.d0)) 
c     .          - 0.081 * dsind(mod(2*m_L,360.d0)) 
	   
cc    岁差分量计算(单位为角秒) 
	  kesiA    = 2306.2181 * t_TDB + 0.30188 * t_TDB**2  
     .           + 0.017998 * t_TDB**3 
	  thitaA   = 2004.2181 * t_TDB - 0.42665 * t_TDB**2  
     .           - 0.041833 * t_TDB**3 
	  zA       = 2306.2181 * t_TDB + 1.09468 * t_TDB**2 
     .           + 0.018203 * t_TDB**3 
cc    观测瞬间的平黄赤交角(单位为角秒) 
	  epsilonA = 84381.448 - 46.815 * t_TDB - 0.00059 * t_TDB**2 
     .           + 0.001813 * t_TDB**3 
cc	计算章动矩阵 
 
	  NRXEPTILON(1,1) = 1.d0 
	  NRXEPTILON(2,1) = 0.d0 
	  NRXEPTILON(3,1) = 0.d0 
	  NRXEPTILON(1,2) = 0.d0 
	  NRXEPTILON(2,2) = dcosd((-epsilonA)/3600.d0) 
	  NRXEPTILON(3,2) = dsind((-epsilonA)/3600.d0) 
	  NRXEPTILON(1,3) = 0.d0 
	  NRXEPTILON(2,3) = -dsind((-epsilonA)/3600.d0) 
	  NRXEPTILON(3,3) = dcosd((-epsilonA)/3600.d0) 
 
	  NRZPHI(1,1) = dcosd(deltaphi/3600.d0) 
	  NRZPHI(2,1) = dsind(deltaphi/3600.d0) 
	  NRZPHI(3,1) = 0.d0 
	  NRZPHI(1,2) = -dsind(deltaphi/3600.d0) 
	  NRZPHI(2,2) = dcosd(deltaphi/3600.d0) 
	  NRZPHI(3,2) = 0.d0 
	  NRZPHI(1,3) = 0.d0 
	  NRZPHI(2,3) = 0.d0 
	  NRZPHI(3,3) = 1.d0 
 
	  NRXEPTILON2(1,1) = 1.d0 
	  NRXEPTILON2(2,1) = 0.d0 
	  NRXEPTILON2(3,1) = 0.d0 
	  NRXEPTILON2(1,2) = 0.d0 
	  NRXEPTILON2(2,2) = dcosd((epsilonA + deltepthilon)/3600.d0) 
	  NRXEPTILON2(3,2) = dsind((epsilonA + deltepthilon)/3600.d0) 
	  NRXEPTILON2(1,3) = 0.d0 
	  NRXEPTILON2(2,3) = -dsind((epsilonA + deltepthilon)/3600.d0) 
	  NRXEPTILON2(3,3) = dcosd((epsilonA + deltepthilon)/3600.d0) 
 
	  BUFFERN = matmul(NRXEPTILON, NRZPHI) 
	  N       = matmul(BUFFERN, NRXEPTILON2) 
 
cc    计算岁差矩阵 
         
	  PRZZ(1,1) = dcosd(-zA/3600.d0) 
	  PRZZ(2,1) = dsind(-zA/3600.d0) 
	  PRZZ(3,1) = 0.d0 
	  PRZZ(1,2) = -dsind(-zA/3600.d0) 
	  PRZZ(2,2) = dcosd(-zA/3600.d0) 
	  PRZZ(3,2) = 0.d0 
	  PRZZ(1,3) = 0.d0 
	  PRZZ(2,3) = 0.d0 
	  PRZZ(3,3) = 1.d0 
 
	  PRYTHITA(1,1) = dcosd(-thitaA/3600.d0) 
	  PRYTHITA(2,1) = 0.d0 
	  PRYTHITA(3,1) = -dsind(-thitaA/3600.d0) 
	  PRYTHITA(1,2) = 0.d0 
	  PRYTHITA(2,2) = 1.d0 
	  PRYTHITA(3,2) = 0.d0 
	  PRYTHITA(1,3) = dsind(-thitaA/3600.d0) 
	  PRYTHITA(2,3) = 0.d0 
	  PRYTHITA(3,3) = dcosd(-thitaA/3600.d0) 
 
	  PRZKESI(1,1) = dcosd(-kesiA/3600.d0) 
	  PRZKESI(2,1) = dsind(-kesiA/3600.d0) 
	  PRZKESI(3,1) = 0.d0 
	  PRZKESI(1,2) = -dsind(-kesiA/3600.d0) 
	  PRZKESI(2,2) = dcosd(-kesiA/3600.d0) 
	  PRZKESI(3,2) = 0.d0 
	  PRZKESI(1,3) = 0.d0 
	  PRZKESI(2,3) = 0.d0 
	  PRZKESI(3,3) = 1.d0 
 
	  BUFFERP = matmul(PRZZ, PRYTHITA) 
	  P       = matmul(BUFFERP, PRZKESI) 
cc    根据日期读取相应ERP文件,(1986.1.1--2008.3.20),提取XPOLE, YPOLE, UT1-UTC 
	  open(unit = 32, file = "temp") 
	  write(32,"(I4.4)") year 
	  close(32) 
	  open(unit = 32, file = "temp") 
        read(32,"(A4)") t_year 
	  close(32,status = 'delete') 
	  open(unit = 101, file = "C04_"//t_year//".ERP") 
	  read(101,"(//////A80)") buffer 
	  control = 0 
	  do while(control.EQ.0) 
	    read(101,"(5X,I2,X,I2,7X,D8.5,X,D8.5,X,D9.6)")  
     .        mm, dd, XPOLE, YPOLE, deltaUT 
          if((mm.EQ.month).AND.(dd.EQ.day)) then 
		   control = -1 
		end if 
	  end do  
	  close(101) 
 
	  WRXYP(1,1) = 1.d0 
	  WRXYP(2,1) = 0.d0 
	  WRXYP(3,1) = 0.d0 
	  WRXYP(1,2) = 0.d0 
	  WRXYP(2,2) = dcosd(YPOLE/3600.d0) 
	  WRXYP(3,2) = dsind(YPOLE/3600.d0) 
	  WRXYP(1,3) = 0.d0 
	  WRXYP(2,3) = -dsind(YPOLE/3600.d0) 
	  WRXYP(3,3) = dcosd(YPOLE/3600.d0) 
 
	  WRYXP(1,1) = dcosd(XPOLE/3600.d0) 
	  WRYXP(2,1) = 0.d0 
	  WRYXP(3,1) = -dsind(XPOLE/3600.d0) 
	  WRYXP(1,2) = 0.d0 
	  WRYXP(2,2) = 1.d0 
	  WRYXP(3,2) = 0.d0 
	  WRYXP(1,3) = dsind(XPOLE/3600.d0) 
	  WRYXP(2,3) = 0.d0 
	  WRYXP(3,3) = dcosd(XPOLE/3600.d0) 
 
	  W = matmul(WRXYP,WRYXP) 
 
	  GMST0 = 6*3600.d0 + 41*60.d0 + 50.54841 + 8640184.812866*t_TDB 
     .        + 0.093104*t_TDB**2 - 6.2d-6*t_TDB**3 
 
	  gama = 1.002737909350795 + 5.9006d-11*t_TDB - 5.9d-15*t_TDB**2 
 
	  GMST = GMST0 + gama*(deltaUT + hour*3600 + minute*60 + second) 
 
	  GST = 2*pi*(GMST + deltaphi*dcosd(epsilonA/3600.d0)  
     .      + 0.00264*dsind(m_OMG) + 0.00063*dsind(2*m_OMG))/86400.d0 
 
	  R(1,1) = dcos(-GST) 
	  R(2,1) = dsin(-GST) 
	  R(3,1) = 0.d0 
	  R(1,2) = -dsin(-GST) 
	  R(2,2) = dcos(-GST) 
	  R(3,2) = 0.d0 
	  R(1,3) = 0.d0 
	  R(2,3) = 0.d0 
	  R(3,3) = 1.d0 
 
	  BUFPN = matmul(P,N) 
	  BUFPNR = matmul(BUFPN,R) 
 
	  CTSTOCIS = matmul(BUFPNR,W) 
	  CISTOCTS = transpose(CTSTOCIS) 
 
        posin(1) = x_input 
	  posin(2) = y_input 
	  posin(3) = z_input 
 
	  if(types.EQ.0) then 
	    posout = matmul(CTSTOCIS,posin) 
	  else 
	    posout = matmul(CISTOCTS,posin) 
	  end if 
 
        x_output = posout(1) 
        y_output = posout(2) 
        z_output = posout(3) 
	end subroutine