*
*   DEFINITION OF ADJOINTS OF THERMODYNAMIC  FUNCTIONS
*   CONSTANTS AS IN COMMON /CTESDYN/
*     NOTE: ALL  UNITS S.I.
*           I.E. PADES IN DEG K, PPRS EN PA, PQQQ EN KG/KG
*          ***C. Chouinard August 1998 ***
*
*    Revision:
*             S. Pellerin *ARMA/AES - Sept. 98
*                         -Adjoint of virtual temperature operator
*
*      ADJOINT OF LN SPECIFIC  HUM (PQQQ) DUE TO DEWPOINT DEPRESSION CORRECTIONS
*             - INPUT : PADES ,  ADJOINT OF DEWPOINT DEPRESSION
*                       PGAMMA,  ADOINT OF VAPOUR PRESSURE RELATIONSHIP
*                       PQQQ   , SPECIFIC HUMIDITY
*                       PPRS   , PRESSURE
*             - OUTPUT: FOEFQA, ADJOINT OF LN SPECIFIC HUMIDITY
*
      FOEFQA(PADES,PGAMMA,PQQQ,PPRS) = PADES*PGAMMA*EPS1*PPRS*PQQQ/
     $                               ((EPS1+EPS2*PQQQ)*(EPS1+EPS2*PQQQ))
*
*      ADJOINT OF SURFACE PRESSURE  DUE TO DEWPOINT DEPRESSION CORRECTIONS
*             - INPUT:  PADES ,  ADJOINT OF DEWPOINT DEPRESSION
*                       PGAMMA,  ADOINT OF VAPOUR PRESSURE RELATIONSHIP
*                       PQQQ   , SPECIFIC HUMIDITY
*                       PNETA   , VALUE OF NETA
*             - OUTPUT: FOEFQPSA, ADJOINT OF SURFACE PRESSURE
*
      FOEFQPSA(PADES,PGAMMA,PQQQ,PNETA) = PADES*PGAMMA*PQQQ*PNETA/
     $                                    (EPS1+EPS2*PQQQ)
*
*     function returning 0/1 depending on the minimum q branch condition
*     as discussed by Brunet (1996) to prevent getting a vapour pressure that exceeds
*     the total pressure p when q exceeds 1.
*
      FQBRANCH(PQQQ) = 0.5D0+SIGN(0.5D0,1.D0-(PQQQ))
*
*--------------------- Adjoint of virtual temperature operator -------------------------
*
*     fottva: Adjoint of temperature due to virtual temperature correction
*     pqqq:   background specific humidity
*     ptta:   adjoint variable of virtual temperature
*
      fottva(pqqq,ptva) = (1D0 + delta*pqqq)*ptva
*
*     folnqva: Adjoint of logarithm of specific humidity due to virtual temperature correction
*     pqqq:   background specific humidity
*     ptti:   background temperature
*     ptva:   adjoint variable of virtual temperature
*
      folnqva(pqqq,ptti,ptva) = delta*pqqq*ptti*ptva