      PROGRAM etotr
*************************************************************************
* Conversion of dielectric function  to thin film transmission and      *
* reflection. The file etot.in should contain on a single line  :       *
*    inputfilename  (x y format)                                        *
*    teta wsamp wsub nsub                                               *
* teta in degree, sample thickness in cm, substrate thickness in cm,    *
* real part of substrate optical constant.                              *
* the standard input file must have the format x eps1 eps2              *
* The output comes as: x t^2 r^2                                        *
*************************************************************************
      parameter (nn=5000)
      REAL X(nn),e1,e2,nsub,wsamp,wsubs,teta,rr(nn),tr(nn)
      complex epsil(nn),eps0,epssub
      character*40 flin
      INTEGER I,mm    
      mm=nn 
      read(*,'(a40)') flin
      open(4,file=flin)
      read(*,*) teta,wsamp,wsubs,nsub
      epssub=nsub**2
      eps0=1.
      teta=teta*4.*atan(1.)/180.
      do 10 i=1,mm                                                  
       READ(4,*,END=11) X(i),e1,e2
       epsil(i)=cmplx(e1,e2)
10    continue   
11    mm=i-1
      CALL FRESNL(mm,WSAMP,WSUBS,TETA,RR,TR,x,EPS0,EPSIL,EPSSUB)     
      do 25 i=1,mm
       write(*,*) x(i),tr(i),rr(i)
25    continue
      close(4)
      END                                                              
                                                                       
********************************************************************** 
      SUBROUTINE FRESNL(NUM,WW1,WW2,TETA,RR,TR,NY,EPS0,EPS1,EPS2)      
      parameter (nn=5000)
      REAL KLAD,KW1,KW2,pi                                                
      REAL RR(nn),TR(nn),NY(nn),TETA,WW1,WW2                     
      COMPLEX EPS0,EPS1(nn),EPS2
      INTEGER I,NUM                                                    
      COMPLEX Q0,Q1,Q2,W1,A,B,SNT,R,T,TW1,CW1,SW1       
      pi=4.*atan(1.)
c      write(*,*) num,ww1,ww2,teta,eps0,eps2
      DO 100 I=1,NUM                      
c       write(*,*) ny(i),eps1(i)
       KW1=2*PI*WW1*NY(I)                                              
       KW2=2*PI*WW2*NY(I)                                              
       Q0=CMPLX(COS(TETA))                                             
       SNT=(1.,0.)-Q0**2                                               
       Q1=CSQRT(EPS1(I)/EPS0-SNT)                                      
       Q2=CSQRT(EPS2/EPS0-SNT)                                      
       W1=Q1*CMPLX(KW1)
c       write(*,*) 'kw1,kw2,w1 ',kw1,kw2,w1
       CW1=CCOS(W1)                                                    
       SW1=CSIN(W1)                                                    
       TW1=SW1/CW1 
c       write(*,*) 'q0,q1,q2,cw1,sw1,tw1 ',q0,q1,q2,icw1,sw1,tw1
       A=Q1*(Q0-Q2)-(Q0*Q2-Q1**2)*(0.,1.)*TW1                          
       B=Q1*(Q0+Q2)-(Q0*Q2+Q1**2)*(0.,1.)*TW1                          
       R=A/B                                                           
       T=Q0*((1.,0.)-R)/(Q2*CW1-(0.,1.)*Q1*SW1)   
c       write(*,*) 'a,b,r,t ',a,b,r,t
       RR(I)=(REAL(R))**2+(AIMAG(R))**2                                
       TR(I)=(REAL(T))**2+(AIMAG(T))**2                                
       A=2*Q2/(Q0+Q2)                                                  
       TR(I)=TR(I)*(REAL(A)**2+AIMAG(A)**2)                            
       KLAD=KW2*2*AIMAG(Q2)*(-1)                                       
       IF (KLAD.GT.-20) THEN                                           
        TR(I)=TR(I)*EXP( KLAD)                                         
       ELSE                                                            
        TR(I)=0.                                                       
       ENDIF                                                           
       IF (ABS(TR(I)) .LT. 1.E-12) TR(I)=0.                            
       IF (ABS(RR(I)) .LT. 1.E-12) RR(I)=0.      
c       write(*,*) tr(i),rr(i)
100   CONTINUE                                                         
      RETURN                                                           
      END                                                              
********************************************************************** 
                                                                       


