SUBROUTINE OBSERVATIONS 5,4
 
      IMPLICIT NONE
      include 'champ.cdk'
      include 'chobs.cdk'
 
      INTEGER :: CMP,IR
      INTEGER :: KCOUPE,KTRES
      REAL    :: AMRA,RA(10000)
      REAL(KIND=double)  :: KX,KY,KWW
      logical llexist

C
C     Observations are generated from a true trajectory
C     as wind components at grid-points
C     AMRA: controls the size of the observation error being added
C
      write(6,*)'  --> Entering Subroutine Observations'
      AMRA   = 0.
      KCOUPE = 0
      KTRES  = 5
C
      inquire(file='./files/random.io',exist=llexist)
      if (llexist) then
         write(6,*) '    Reading file ./files/random.io'
         open(1,file='./files/random.io',status='old')
         read(1,101) (ra(ikx),ikx=1,10000)
      else
         write(6,*)' File ./files/obs.io not found'
         stop
      endif           
      close(1)
 101  format(8f10.7)
C
C
      inquire(file='./files/obs.io',exist=llexist)
      if (llexist) then
         write(6,*)'   Reading file ./files/obs.io NTRAJ = ',ntraj
         open (16,file='./files/obs.io',form='unformatted')
         DO NT=1,NTRAJ
            if(mod(nt,1).eq.0) write(6,*)'write obs. time ',NT
            read(16) ((UOBS(IW,JW,NT),IW=1,N),JW=1,N)
            read(16) ((WOBS(IW,JW,NT),IW=1,N),JW=1,N)
         ENDDO
         close(16)
      else
         write(6,*)' File ./files/obs.io not found'
         stop
      endif
C
      write(6,*)'    -- Lecture de Obs.io completee'
      IR=0
      DO NT=1,NTRAJ
         DO IW=1,N
            DO JW=1,N
               IR=IR+1
               UOBS(IW,JW,NT) = UOBS(IW,JW,NT) + AMRA*RA(IR)
               IR=IR+1
               WOBS(IW,JW,NT) = WOBS(IW,JW,NT) + AMRA*RA(IR)
               IR=IR+1
               IF(IR.GT.9995) IR=0
            END DO
         END DO
      END DO
C     
C     Observation covariance error
C     ----------------------------
      IR = 0
       DO IR =1,2*N*N
c        sigmao(IR) = 0.064
          sigmao(IR) = 0.064
      END DO
C     ----------------------------------------------------------------
C     POUR OBSERVATIONS TRONQUEES A KTRES DANS L'ESPACE SPECTRAL
C     ----------------------------------------------------------------
      IF(KCOUPE.EQ.1) THEN

         NT = NSTOP
         DO IW=1,N
            DO JW=1,N
               UR(IW,JW) = UOBS(IW,JW,NT)
               WR(IW,JW) = WOBS(IW,JW,NT)
            ENDDO
         ENDDO

         CALL RK(UR,UK,KTX,KTY,IKTX,IKTY,N,N2,LWRK,
     .        FF1,FF2,FF3,WORK,TRIGS,IFAX,ZI)
         CALL RK(WR,WK,KTX,KTY,IKTX,IKTY,N,N2,LWRK,
     .        FF1,FF2,FF3,WORK,TRIGS,IFAX,ZI)

         DO IKX=1,IKTX
            KX=FLOAT(IKX-1)
            DO IKY=1,IKTY
               KY=FLOAT(IKY-KTY-1)
               KWW=SQRT(KX*KX+KY*KY)
               IF(KWW.GT.FLOAT(KTRES)-0.5) THEN
                  UK(IKX,IKY)=CMPLX(0.,0.)
                  WK(IKX,IKY)=CMPLX(0.,0.)
               ENDIF
            ENDDO
         ENDDO

         CALL KR(UK,UR,KTX,KTY,IKTX,IKTY,N,N2,LWRK,
     .        FF1,FF2,FF3,WORK,TRIGS,IFAX,ZI)
         CALL KR(WK,WR,KTX,KTY,IKTX,IKTY,N,N2,LWRK,
     .        FF1,FF2,FF3,WORK,TRIGS,IFAX,ZI)

         DO IW=1,N 
            DO JW=1,N
               UOBS(IW,JW,NT) = UR(IW,JW)
               WOBS(IW,JW,NT) = WR(IW,JW)
            ENDDO
         ENDDO
         
      END IF
C
C     Choose which observation network 
C     --------------------------------

      
      inquire(file='./files/station.dat',exist=llexist)
      write(6,*)'   -- Observation Station. LLEXIST =',llexist
      llexist= .T.
      if (llexist) then
         write(6,*)' Reading file ./files/station.dat '
         OPEN(1,file='station.dat',status='replace')
         CMP=0
         DO NT =1,NTRAJ
            IR=0
            DO IKX=1,N
               DO IKY=1,N
                  PZ(IKX,IKY,NT) = 1.0
                  IR=IR+1
                  IF(MOD(IKX,8).EQ.0.AND.MOD(IKY,8).EQ.0) THEN
                     PZ(IKX,IKY,NT) = 1.0
                     CMP=CMP+1
                  ENDIF
                  IF(NT.EQ.1) THEN
                     IF(PZ(IKX,IKY,1).NE.0.0) WRITE(1,987) IKX,IKY
 987                 FORMAT(2I10)
                  ENDIF
                  IF(IR.GT.9998) IR=0
               ENDDO
            ENDDO
         ENDDO         
         CLOSE(1)
      else
         write(6,*)' File ./files/station.dat not found'
C     stop
      endif
      write(6,*) ' --- Check-point Charlie passed'        
C
C     Observation vector y
C     --------------------
C
      IR = 0
      DO NT = 1,NTRAJ
         DO IW= 1,N
            DO JW = 1,N
               dl_y(IR+1) = UOBS(IW,JW,NT)*PZ(IW,JW,NT)
               dl_y(IR+2) = WOBS(IW,JW,NT)*PZ(IW,JW,NT)
               IR = IR+2
            END DO 
         END DO
      ENDDO

      RETURN
      END SUBROUTINE