!-------------------------------------- LICENCE BEGIN ------------------------------------
!Environment Canada - Atmospheric Science and Technology License/Disclaimer,
!                     version 3; Last Modified: May 7, 2008.
!This is free but copyrighted software; you can use/redistribute/modify it under the terms
!of the Environment Canada - Atmospheric Science and Technology License/Disclaimer
!version 3 or (at your option) any later version that should be found at:
!http://collaboration.cmc.ec.gc.ca/science/rpn.comm/license.html
!
!This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
!without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
!See the above mentioned License/Disclaimer for more details.
!You should have received a copy of the License/Disclaimer along with this software;
!if not, you can write to: EC-RPN COMM Group, 2121 TransCanada, suite 500, Dorval (Quebec),
!CANADA, H9P 1J3; or send e-mail to service.rpn@ec.gc.ca
!-------------------------------------- LICENCE END --------------------------------------
!

      SUBROUTINE DD1 (PROSCA,N,M,DEPL,JMIN,JMAX,PRECON,ALPHA,YBAR, 1
     /     SBAR,IZS,RZS,DZS)
C---- 
C     
C     CALCULE LE PRODUIT H G OU
C     . H EST UNE MATRICE CONSTRUITE PAR LA FORMULE DE BFGS INVERSE 
C     A M MEMOIRES A PARTIR DE PRECON FOIS LA MATRICE UNITE DANS
C     UN ESPACE HILBERTIEN DONT LE PRODUIT SCALAIRE EST DONNE PAR
C     PROSCA
C     (CF. J. NOCEDAL, MATH. OF COMP. 35/151 (1980) 773-782)
C     . G EST UN VECTEUR DE DIMENSION N (EN GENERAL LE GRADIENT)
C     
C     LE FACTEUR PRECON APPARAIT DONC COMME UN PRECONDITIONNEUR
C     SCALAIRE.
C     
C     DEPL = G (EN ENTREE), = H G (EN SORTIE)
C     
C     LA MATRICE H EST MEMORISEE PAR LES VECTEURS DES TABLEAUX
C     YBAR, SBAR ET LES POINTEURS JMIN, JMAX.
C     
C     ALPHA(M) EST UNE ZONE DE TRAVAIL.
C     
C     IZS(1),RZS(1),DZS(1) SONT DES ZONES DE TRAVAIL POUR PROSCA
C     
C---- 
C     
C     ARGUMENTS
C     
      INTEGER N,M,JMIN,JMAX,IZS(1)
      REAL*8 DEPL(N),PRECON,ALPHA(M),YBAR(N,M),SBAR(N,M),RZS(1)
      DOUBLE PRECISION DZS(1)
      EXTERNAL PROSCA
C     
C     VARIABLES LOCALES
C     
      INTEGER JFIN,I,J,JP
      REAL*8 R
      DOUBLE PRECISION PS
C     
      JFIN=JMAX
      IF (JFIN.LT.JMIN) JFIN=JMAX+M
C     
C     PHASE DE DESCENTE
C     
      DO 100 J=JFIN,JMIN,-1
         JP=J
         IF (JP.GT.M) JP=JP-M
         CALL PROSCA (N,DEPL,SBAR(1,JP),PS,IZS,RZS,DZS)
         R=PS
         ALPHA(JP)=R
         DO 20 I=1,N
            DEPL(I)=DEPL(I)-R*YBAR(I,JP)
 20      CONTINUE
 100  CONTINUE
C     
C     PRECONDITIONNEMENT
C     
      DO 150 I=1,N
         DEPL(I)=DEPL(I)*PRECON
 150  CONTINUE
C     
C     REMONTEE
C     
      DO 200 J=JMIN,JFIN
         JP=J
         IF (JP.GT.M) JP=JP-M
         CALL PROSCA (N,DEPL,YBAR(1,JP),PS,IZS,RZS,DZS)
         R=ALPHA(JP)-PS
         DO 120 I=1,N
            DEPL(I)=DEPL(I)+R*SBAR(I,JP)
 120     CONTINUE
 200  CONTINUE
      RETURN
      END