c
c........|.........|.........|.........|.........|.........|.........|..
c
c Generic program to run routine Rmatrix, which finds the R/T
c coefficient matrices for a stack of anisotropic layers.
c
c Except where otherwise acknowldeged, rmatrix was written by
c C. J. Thomson.
c
c This version allows only real elasticity.
c
c C. J. Thomson, started August 1993.
c Modified for complex horizontal slowness and frequency, February 1995.
c
c
c
c........|.........|.........|.........|.........|.........|.........|..
c........|.........|.........|.........|.........|.........|.........|..
c
c Rmatrix and associated programs may be used freely by University
c researchers and teachers. Commercial parties interested in using
c the program should contact C. J. Thomson.
c
c........|.........|.........|.........|.........|.........|.........|..
c........|.........|.........|.........|.........|.........|.........|..
c
c Copyright (c) 1996 C. J. Thomson.
c All rights reserved by the author.

      program rmatrix1

      implicit real*8(a-h,o-z)

      complex*16 px,py,omega

c overal r/t matrices for stack

      complex*16 tus(3,3),rus(3,3),tds(3,3),rds(3,3)

c overal r/t matrices for stack with reversed slowness (primed)
      complex*16 tuspr(3,3),ruspr(3,3),tdspr(3,3),rdspr(3,3)
c and the e-values and vectors for symmetry testing
      complex*16 evalsf(6,2),evecsf(6,6,2)

c
c COMMON BLOCKS to be INCLUDEd
c
c max number of layers ---    1 = half-space above or top layer
c    in the stack                 just below free surface
c                          nlay = half-space below
c
      parameter (nlaymx=30)
c
c Earth model
c
      common /elast/isoflg(nlaymx),thickn(nlaymx),a(3,3,3,3,nlaymx),
     .              rho(nlaymx)
c
      complex*16 evals,evecs
      common /evprob/evals(6,nlaymx),evecs(6,6,nlaymx)

      complex*16 q11i,q12i,q21i,q22i
      complex*16 tui,rui,tdi,rdi
      common /intfce/q11i(3,3,nlaymx),q12i(3,3,nlaymx),
     .               q21i(3,3,nlaymx),q22i(3,3,nlaymx),
     .               tui(3,3,nlaymx),rui(3,3,nlaymx),
     .               tdi(3,3,nlaymx),rdi(3,3,nlaymx)

      complex*16 tusi,rusi,tdsi,rdsi
      common /stackrt/tusi(3,3,nlaymx),rusi(3,3,nlaymx),
     .                tdsi(3,3,nlaymx),rdsi(3,3,nlaymx)

c
c symmetry testing data
c
      complex*16 diag1,j2cst1,j2cstn
      common /symts/diag1(6,nlaymx)
      common /symts2/j2cst1(3,3),j2cstn(3,3)
c
c END OF COMMON BLOCKS
c

c open i/o files

      open(unit=10,file='rmatrix.inp',form='FORMATTED')
      open(unit=11,file='rmatrix.out',form='FORMATTED')

c-LK: Originally the second line of the input data is now read here
c-LK: as the first line of the input data:
      read(10,*)omega,px,py
c-LK
c-LK: Input logical unit number 10 added as the first argument,
c-LK: arguments PX,PY,OMEGA discarded:
      call input(10,nlay,ifree)


c call rmatrix for px, py pair just selected... and free surface
c not considered here

       iter=1
       print *,'iter=',iter
       call rmatrix(px,py,omega,nlay,ifree,tus,rus,tds,rds,iter)

       iter=2
       print *,'iter=',iter
       call rmatrix(px,py,omega,nlay,ifree,tus,rus,tds,rds,iter)

c test reversal symmetry ...
c first store eigenvector matrices at top and bottom

       call trnsf6(evalsf(1,1),evals(1,1),evecsf(1,1,1),evecs(1,1,1))
       call trnsf6(evalsf(1,2),evals(1,nlay),
     .                   evecsf(1,1,2),evecs(1,1,nlay))

       iter=1
       px=-px
       py=-py
       call rmatrix(px,py,omega,nlay,ifree,tuspr,ruspr,tdspr,rdspr,iter)

       call jprtst(evalsf,evecsf,nlay,
     .               tus,rus,tds,rds,tuspr,ruspr,tdspr,rdspr)

       iter=2
       call rmatrix(px,py,omega,nlay,ifree,tuspr,ruspr,tdspr,rdspr,iter)

       call jprtst(evalsf,evecsf,nlay,
     .               tus,rus,tds,rds,tuspr,ruspr,tdspr,rdspr)


      close(10)
      close(11)


      stop
      end
c
c........|.........|.........|.........|.........|.........|.........|..
c
