SUBROUTINE CAV1AS(KPROMA,KNBPT,KTASK,PSLN,PSP_CI,PESIG,PCAGUE,&
 & PGELAT,PGELAM,PGNORDL,PGNORDM,PGM)  
!****-------------------------------------------------------------------
!****   CAV1AS : ROUTINE GERANT L'EXECUTION DE L'ANALYSE DE VENT A 10M
!****-------------------------------------------------------------------
!***  ROUTINES APPELANTES: - CAPOTX -
!***  -------------------
!***  ARGUMENTS:  IN       KPROMA : surdimensionnement horizontal
!***  ---------   IN       KNBPT  : nombre reel de points traites
!***              IN       KTASK  : numero de la tache (multitasking)
!***              IN       PSLN   :
!***              IN/OUT   PSP_CI    : buffer des champs pdg de l'analyse
!***              IN       PESIG, PCAGUE, PGELAT, PGELAM
!***              IN       PGNORDL, PGNORDM, PGM

!     COMMONS: - QADOCK - CONTIENT LA TABLE DE CONTINGENCE
!     -------             PREDICTEURS/PREDICTANTS ET DES CONTRAINTES
!                         POUR LA SELECTION DES OBSERVATIONS.
!              - QAPAVU - DIMENSIONS ET INDICE RELATIFS A *QAVARA*.
!              - YOMDIM - DIMENSION DES TABLEAUX DE TRAVAIL.

!     EXTERNES: - CANEVA - ROUTINE EFFECTUANT L'ANALYSE.
!     --------
!****---------------------------------------------------------------------

USE PARKIND1  ,ONLY : JPIM     ,JPRB
USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK

USE PARDIMO  , ONLY : JPNOTP
USE YOMDIM   , ONLY : NFLEVG
USE QAPAVU   , ONLY : JPPXU1    ,JPPXV1  
USE QAPREX   , ONLY : NPREA    ,NBPREA   ,NAV1
USE QADOCK   , ONLY : QDSTVA   ,MINMA    ,QCORMIN  ,QDELPI
USE QADIAG   , ONLY : RCATSL
USE SURFACE_FIELDS_MIX, ONLY : YSP_CID, YSP_CI

IMPLICIT NONE

INTEGER(KIND=JPIM),INTENT(IN)    :: KPROMA 
INTEGER(KIND=JPIM),INTENT(IN)    :: KNBPT 
INTEGER(KIND=JPIM),INTENT(IN)    :: KTASK 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PSLN(KPROMA) 
REAL(KIND=JPRB)   ,INTENT(INOUT) :: PSP_CI(KPROMA,YSP_CID%NDIM) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PESIG(2*NFLEVG+5,KNBPT) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PCAGUE(2,KNBPT) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PGELAT(KNBPT) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PGELAM(KNBPT) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PGNORDL(KNBPT) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PGNORDM(KNBPT) 
REAL(KIND=JPRB)   ,INTENT(IN)    :: PGM(KNBPT) 
!     INM    : NOMBRE DE PREDICTEURS PAR PREDICTANT.
!     INBPR  : NOMBRE DE PREDICTEURS PAR POINTS D'ANALYSE.

REAL(KIND=JPRB) ::    ZDSTVA(JPNOTP)
INTEGER(KIND=JPIM) :: INM(2), INBPR(KNBPT), INXI(2), INLXI

!     ZETIRE : FONCTION DE STRETCHING POUR LES STATS HORIZONTALES
!     ZSIGPS : EN GENERAL, ECART TYPES D'ERREUR DE L'EBAUCHE
!     ZRESIA : RESIDUS ANALYSES.
!     ZSIGA  : ECART TYPES D'ERREUR D'ANALYSE.

REAL(KIND=JPRB) :: ZGNORDM(KNBPT), ZGNORDL(KNBPT)
REAL(KIND=JPRB) :: ZSIGPS(KNBPT*2)
REAL(KIND=JPRB) :: ZRESIA(KNBPT*2), ZSIGA(KNBPT*2)

INTEGER(KIND=JPIM) :: IANTY, IQUOI, Ixx(JPNOTP), JROF

REAL(KIND=JPRB) :: ZCORMIN, ZDELPI, Zxxx(JPNOTP)
REAL(KIND=JPRB) :: ZHOOK_HANDLE

#include "caneva.intfb.h"

!**----------------------------------------------------------------------
!**       1. Initialisations.
!**          ---------------

IF (LHOOK) CALL DR_HOOK('CAV1AS',0,ZHOOK_HANDLE)
RCATSL(:,1,KTASK) = 0.0_JPRB

ZGNORDM(:) = PGNORDM(:)/PGM(:)
ZGNORDL(:) = PGNORDL(:)/PGM(:)

!**---------------------------------------------------------------------
!**       2. Initialisation des statistiques de l'ebauche.
!**          --------------------------------------------

DO JROF = 1 , KNBPT
  ZSIGPS(JROF) = PESIG(2*NFLEVG+5,JROF)
  ZSIGPS(JROF+KNBPT) = PESIG(2*NFLEVG+5,JROF)
ENDDO

!**---------------------------------------------------------------------
!**       3. Initialisation des parametres.
!**          -----------------------------

IQUOI = -1
IANTY = 0

INLXI = 2
INXI(1) = JPPXU1
INXI(2) = JPPXV1

ZDELPI = QDELPI(NAV1)
ZCORMIN = QCORMIN(NAV1)

ZDSTVA = 0.0_JPRB

ZDSTVA(1) = QDSTVA(1)
ZDSTVA(4) = QDSTVA(4)
ZDSTVA(5) = QDSTVA(5)
ZDSTVA(6) = QDSTVA(6)

INM(1) = MINMA(NAV1)
INM(2) = MINMA(NAV1)

!**---------------------------------------------------------------------
!**       4. Lancement de l'analyse par interpolation optimale.
!**          -------------------------------------------------

CALL CANEVA(IQUOI, IANTY, KTASK,&
 & Zxxx, ZDSTVA(1), ZDELPI, Ixx, Ixx,&
 & ZCORMIN, PCAGUE, PGELAT, PGELAM,&
 & PSLN, KNBPT, 1,&
 & INXI(1), INLXI, NPREA(1,NAV1), NBPREA(NAV1), INM(1),&
 & ZSIGPS(1), ZRESIA(1), ZSIGA(1), INBPR(1))  

!**---------------------------------------------------------------------
!**       5. Calcul des champs analyses.
!**          --------------------------

DO JROF = 1 , KNBPT
  PSP_CI(JROF,YSP_CI%YCI(6)%MP0) = PSP_CI(JROF,YSP_CI%YCI(6)%MP0)&
   & + ZGNORDM(JROF) * ZRESIA(JROF      )&
   & + ZGNORDL(JROF) * ZRESIA(JROF+KNBPT)  
  PSP_CI(JROF,YSP_CI%YCI(7)%MP0) = PSP_CI(JROF,YSP_CI%YCI(7)%MP0)&
   & - ZGNORDL(JROF) * ZRESIA(JROF      )&
   & + ZGNORDM(JROF) * ZRESIA(JROF+KNBPT)  
  RCATSL(JROF,1,KTASK) = REAL(INBPR(JROF),JPRB)
ENDDO

!**---------------------------------------------------------------------
IF (LHOOK) CALL DR_HOOK('CAV1AS',1,ZHOOK_HANDLE)
END SUBROUTINE CAV1AS
