SUBROUTINE CAT2AS(KPROMA,KNBPT,KTASK,PSLN,PT2INC,PSP_CI,&
 & PESIG,PCAGUE,PGELAT,PGELAM)  
!****-------------------------------------------------------------------
!****   CAT2AS : ROUTINE GERANT L'EXECUTION DE L'ANALYSE DE TEMPERATURE A 2M
!****-------------------------------------------------------------------
!***  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   PT2INC :
!***              IN/OUT   PSP_CI    : buffer des champs pdg de l'analyse
!***              IN       PESIG, PCAGUE, PGELAT, PGELAM :

!     COMMONS: - QADOCK - CONTIENT LA TABLE DE CONTINGENCE
!     -------             PREDICTEURS/PREDICTANTS ET DES CONTRAINTES
!                         POUR LA SELECTION DES OBSERVATIONS.
!              - QAPAVU - DIMENSIONS ET INDICE RELATIFS A *QAVARA*.
!              - QADIAG - CHAMPS POINTS DE GRILLE SPECIAUX DE L'ANALYSE.
!              - YOMDIM - DIMENSION DES TABLEAUX DE TRAVAIL.
!              - YOMCST - CONSTANTES FONDAMENTALES D'ARPEGE.

!     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 : JPPXT2
USE QAPREX   , ONLY : NPREA    ,NBPREA   ,NAT2
USE QADOCK   , ONLY : QDSTVA   ,MINMA    ,QCORMIN  ,QDELPI
USE QADIAG   , ONLY : RCATSL   ,RCARES   ,RCASIG
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(OUT)   :: PT2INC(KNBPT) 
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) 
!     INM    : NOMBRE DE PREDICTEURS PAR PREDICTANT.
!     INBPR  : NOMBRE DE PREDICTEURS PAR POINTS D'ANALYSE.

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

!     ZSIGPS : EN GENERAL, ECART TYPES D'ERREUR DE L'EBAUCHE
!     ZRESIA : RESIDUS ANALYSES.
!     ZSIGA  : ECART TYPES D'ERREUR D'ANALYSE.

REAL(KIND=JPRB) :: ZSIGPS(KNBPT), ZRESIA(KNBPT), ZSIGA(KNBPT)

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('CAT2AS',0,ZHOOK_HANDLE)
RCATSL(:,1,KTASK) = 0.0_JPRB
RCARES(:,1,KTASK) = 0.0_JPRB
RCASIG(:,1,KTASK) = 1.0_JPRB

ZSIGPS(:) = PESIG(2*NFLEVG+3,:)

IQUOI = -1
IANTY = 0

INLXI = 1
INXI(1) = JPPXT2

ZDELPI = QDELPI(NAT2)
ZCORMIN = QCORMIN(NAT2)

ZDSTVA = 0.0_JPRB

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

INM(1) = MINMA(NAT2)

!**---------------------------------------------------------------------
!**       2. 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,NAT2), NBPREA(NAT2), INM(1),&
 & ZSIGPS(1), ZRESIA(1), ZSIGA(1), INBPR(1))  

!**---------------------------------------------------------------------
!**       3. Calcul du champ de TEMPERATURE a 2M analyse.
!**          -------------------------------------------

DO JROF = 1 , KNBPT
  RCATSL(JROF,1,KTASK) = REAL(INBPR(JROF),JPRB)
  RCARES(JROF,1,KTASK) = ZRESIA(JROF)
  RCASIG(JROF,1,KTASK) = ZSIGA(JROF)/ZSIGPS(JROF)
  PSP_CI(JROF,YSP_CI%YCI(4)%MP0)  = PSP_CI(JROF,YSP_CI%YCI(4)%MP0)+ZRESIA(JROF)
  PT2INC(JROF)         = ZRESIA(JROF)
ENDDO

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