SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/OFFLIN/oi_cacsts.F90
Go to the documentation of this file.
00001 !option! -O nomove
00002 !****---------------------------------------------------------------------------
00003 !****   CACSTS : INITIALISE LES CHAMPS DE SURFACE
00004 !****   ------
00005 !****  Auteurs :   CB 01/91, BU 05/92, VC 05/93, DG 03/94, PA 09/95, DG 05/96
00006 !****      Mod : E. Bazile 01/97 Soustraction du biais moyen de temperature
00007 !****                            et/ou d'humidite pour les increments utilises
00008 !****                            pour l'analyse de l'eau du sol
00009 !****      Mod : D. Giard  03/99 ACSOL -> ACSOLW
00010 !****            E. Bazile , F. Bouyssel : Remplacement du logique LLLACW par
00011 !****                une fonction continue ZDACW (LSOLV).
00012 !****      Mod : F. Taillefer 09/02 : mise a jour constantes surface selon SST
00013 !****      Mod : F. Bouyssel 02/04 : Seuil utilisant l'angle zenithal solaire
00014 !****      Mod : E. Bazile 01/2007 : Parametre pour la correction PSNS et WPI
00015 !        A.Trojakova   27-Jun-2007 bugfixing ZV10M (surface pointers)
00016 !        F. Bouyssel    27-Mar-2011  Use of REPS2 instead of REPS3 for ZNEIG
00017 !****---------------------------------------------------------------------------
00018 !
00019 SUBROUTINE OI_CACSTS(KNBPT,PT2INC,PH2INC,PWGINC,PWS_O,                        &
00020                        IDAT,NSSSSS,                                           &
00021                        PTP,PWP,PTL,PSNS,PTS,PWS,                              &
00022                        PTCLS,PHCLS,PUCLS,PVCLS,PSSTC,PWPINC1,PWPINC2,PWPINC3, &
00023                        PT2MBIAS,PH2MBIAS,                                     &
00024                        PRRCL,PRRSL,PRRCN,PRRSN,PATMNEB,PEVAP,PEVAPTR,         &
00025                        PITM,PVEG,PALBF,PEMISF,PZ0F,                           &
00026                        PIVEG,PARG,PD2,PSAB,PLAI,PRSMIN,PZ0H,                  &
00027                        PTSC,PTPC,PWSC,PWPC,PSNC,PGELAT,PGELAM,PGEMU)  
00028 !
00029 !****---------------------------------------------------------------------------
00030 !**  BUT : INITIALISE LES CHAMPS DE SURFACE PROGNOSTIQUES
00031 !**  ---
00032 !**  SEQUENCE D'APPEL :
00033 !**  ----------------
00034 !**        CALL CACSTS(....)
00035 
00036 !**  ARGUMENTS D'ENTREE :
00037 !**  ------------------        
00038 !**                               
00039 !**        - EXPLICITE - 
00040 !**                      KNBPT  : nombre reel de points traites
00041 !**                      PT2INC : increment d'analyse de T2m
00042 !**                      PH2INC : increment d'analyse de Hu2m
00043 !**                      PSP_SB,PSP_SG,PSP_RR,PSD_VF,PSD_VV,PSD_VX,PSP_CI,PSP_X2    : 
00044 !**                      buffer des champs pdg de l'analyse
00045 !**                      PGELAM, PGELAT, PGEMU : coordonnees geographiques
00046 
00047 !**  ARGUMENTS DE SORTIE : 
00048 !**  -------------------
00049 !**  EXTERNES : CAVEGI (FCTVEG) - ACSOLW - TSL
00050 !**  --------
00051 
00052 !**  ALGORITHME : - INITIALISE LA TEMPERATURE DE SURFACE.
00053 !**  ----------   - INITIALISE LA TEMPERATURE PROFONDE.
00054 !**               - INITIALISE LE RESERVOIR DE SURFACE.
00055 !**               - INITIALISE LE RESERVOIR PROFOND.
00056 !**               - CORRIGE LA QUANTITE DE NEIGE.
00057 !***-----------------------------------------------------------------
00058 !
00059 USE MODD_CSTS,       ONLY : XG, XTT, XRHOLW, XDAY
00060 USE MODD_SURF_PAR,   ONLY : XUNDEF
00061 USE MODD_ASSIM
00062 !
00063 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00064 USE PARKIND1  ,ONLY : JPRB
00065 !
00066 USE MODI_OI_CAVEGI
00067 USE MODI_OI_ACSOLW
00068 USE MODI_OI_JACOBIANS
00069 USE MODI_OI_TSL
00070 USE MODI_OI_FCTVEG
00071 USE MODI_OI_KALMAN_GAIN
00072 !
00073 IMPLICIT NONE
00074 !
00075 INTEGER,INTENT(IN)    :: KNBPT, IDAT, NSSSSS
00076 !
00077 REAL   ,INTENT(IN)    :: PT2INC(KNBPT) 
00078 REAL   ,INTENT(IN)    :: PH2INC(KNBPT) 
00079 REAL   ,INTENT(IN)    :: PWGINC(KNBPT)
00080 REAL   ,INTENT(IN)    :: PWS_O(KNBPT)
00081 REAL   ,INTENT(INOUT) :: PTP(KNBPT)
00082 REAL   ,INTENT(INOUT) :: PWP(KNBPT)
00083 REAL   ,INTENT(INOUT) :: PTL(KNBPT)
00084 REAL   ,INTENT(INOUT) :: PSNS(KNBPT)
00085 REAL   ,INTENT(INOUT) :: PTS(KNBPT)
00086 REAL   ,INTENT(INOUT) :: PWS(KNBPT)
00087 REAL   ,INTENT(INOUT) :: PTCLS(KNBPT) 
00088 REAL   ,INTENT(INOUT) :: PHCLS(KNBPT) 
00089 REAL   ,INTENT(INOUT) :: PUCLS(KNBPT)
00090 REAL   ,INTENT(INOUT) :: PVCLS(KNBPT)
00091 REAL   ,INTENT(INOUT) :: PSSTC(KNBPT)
00092 REAL   ,INTENT(INOUT) :: PWPINC1(KNBPT)
00093 REAL   ,INTENT(INOUT) :: PWPINC2(KNBPT)
00094 REAL   ,INTENT(INOUT) :: PWPINC3(KNBPT)
00095 REAL   ,INTENT(INOUT) :: PT2MBIAS(KNBPT)
00096 REAL   ,INTENT(INOUT) :: PH2MBIAS(KNBPT)
00097 REAL   ,INTENT(IN)    :: PRRCL(KNBPT)
00098 REAL   ,INTENT(IN)    :: PRRSL(KNBPT)
00099 REAL   ,INTENT(IN)    :: PRRCN(KNBPT)
00100 REAL   ,INTENT(IN)    :: PRRSN(KNBPT)
00101 REAL   ,INTENT(IN)    :: PATMNEB(KNBPT)
00102 REAL   ,INTENT(IN)    :: PEVAP(KNBPT)
00103 REAL   ,INTENT(IN)    :: PEVAPTR(KNBPT)
00104 REAL   ,INTENT(IN)    :: PITM(KNBPT) 
00105 REAL   ,INTENT(INOUT) :: PVEG(KNBPT) 
00106 REAL   ,INTENT(INOUT) :: PALBF(KNBPT)
00107 REAL   ,INTENT(INOUT) :: PEMISF(KNBPT)
00108 REAL   ,INTENT(INOUT) :: PZ0F(KNBPT)
00109 REAL   ,INTENT(INOUT) :: PIVEG(KNBPT)
00110 REAL   ,INTENT(INOUT) :: PARG(KNBPT)
00111 REAL   ,INTENT(INOUT) :: PD2(KNBPT)
00112 REAL   ,INTENT(INOUT) :: PSAB(KNBPT) 
00113 REAL   ,INTENT(INOUT) :: PLAI(KNBPT)
00114 REAL   ,INTENT(INOUT) :: PRSMIN(KNBPT)
00115 REAL   ,INTENT(INOUT) :: PZ0H(KNBPT)
00116 REAL   ,INTENT(IN)    :: PTSC(KNBPT)
00117 REAL   ,INTENT(IN)    :: PTPC(KNBPT)
00118 REAL   ,INTENT(IN)    :: PWSC(KNBPT)
00119 REAL   ,INTENT(IN)    :: PWPC(KNBPT)
00120 REAL   ,INTENT(IN)    :: PSNC(KNBPT) 
00121 REAL   ,INTENT(IN)    :: PGELAT(KNBPT) 
00122 REAL   ,INTENT(IN)    :: PGELAM(KNBPT) 
00123 REAL   ,INTENT(IN)    :: PGEMU(KNBPT)
00124 !
00125 REAL  :: VGAT1(24),VGAT2(24),VGAT3(24)
00126 REAL  :: VGBT1(24),VGBT2(24),VGBT3(24)
00127 REAL  :: VGCT1(24),VGCT2(24)
00128 REAL  :: VGAH1(24),VGAH2(24),VGAH3(24)
00129 REAL  :: VGBH1(24),VGBH2(24),VGBH3(24)
00130 REAL  :: VGCH1(24),VGCH2(24)
00131 REAL  :: SIGT2MP(24),SIGHP2(24)
00132 !
00133 REAL  :: VGST,VGSH,VGPT1,VGPH1,VGPT2,VGPH2,G1,G2,G3,G4
00134 !
00135 REAL :: ZITS(KNBPT), ZITP(KNBPT), ZIWS(KNBPT), ZIWP(KNBPT)
00136 REAL :: ZIVEG(KNBPT), ZWFC(KNBPT), ZWWILT(KNBPT)
00137 REAL :: ZWSMX(KNBPT), ZWPMX(KNBPT), ZWPI(KNBPT), ZWSAT(KNBPT)
00138 REAL :: ZISN(KNBPT)
00139 REAL :: ZDWG_DWG(KNBPT), ZDWG_DW2(KNBPT)
00140 !
00141 REAL    :: ZCLIM, ZCLIMCA, ZCOEF, ZCWPH, ZCWPT, ZCWSH,     
00142             ZCWST, ZDW, ZECHGU, ZEVAP, ZGEL,                
00143             ZH2D, ZHEFF, ZHSA, ZHSP, ZLAISRS, ZMSN, ZNEIG,  
00144             ZPDN, ZPDS, ZPDT, ZPRECIP, ZSNA, ZSNC, ZT2D,    
00145             ZTEFF, ZTINER, ZTPC, ZTSC, ZV10M, ZVEG, ZWP,    
00146             ZWPA, ZWPC, ZWPD, ZWPD1, ZWPD2, ZWPDX, ZWPMIN,  
00147             ZWPR, ZWSA, ZWSC, ZWSD, ZWSD1, ZWSD2, ZWSMSPI,  
00148             ZWSR, ZZH, ZZT, ZDACW, ZMU0, ZMU0M, ZPDM, ZPDV, 
00149             ZK1,  ZK2, ZDACW2, ZPR_EVA, ZWSMIN, ZZVEG
00150 !
00151 INTEGER :: IH, JROF
00152 LOGICAL :: LSGOBS
00153 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00154 !
00155 !--------------------------------------------------------------------
00156 IF (LHOOK) CALL DR_HOOK('OI_CACSTS',0,ZHOOK_HANDLE)
00157 ZECHGU = REAL(NECHGU) * 3600.
00158 !
00159 !**  1. Initialisation des polynomes bruts et des champs de reference.    
00160 !
00161  CALL OI_CAVEGI(VGAT1,VGAT2,VGAT3,VGBT1,VGBT2,VGBT3,VGCT1,VGCT2,       &
00162                  VGAH1,VGAH2,VGAH3,VGBH1,VGBH2,VGBH3,VGCH1,VGCH2,      &
00163                  SIGT2MP,SIGHP2,LSGOBS)  
00164 !
00165 !
00166 !*    Seuil d'evaporation min. pour analyse de W (SEVAP en mm/jour)
00167 
00168 ZEVAP  = -SEVAP / XDAY
00169 
00170 !*   1.2  Initialisation des variables intermediaires
00171 !
00172 
00173 DO JROF = 1 , KNBPT
00174   ZIVEG(JROF) = ANINT(PIVEG(JROF))
00175   IF (LFGEL) THEN
00176     ZWPI(JROF) = PTL(JROF)
00177   ELSE
00178     ZWPI (JROF) = 0.0
00179   ENDIF
00180 ENDDO
00181 !
00182  CALL OI_ACSOLW (1,KNBPT,                          &
00183                   PARG,PD2,PWS,ZIVEG,PSAB,         &
00184                   LLDHMT,                          &
00185                   ZWFC, ZWPMX, ZWSAT, ZWSMX, ZWWILT)  
00186 !
00187 ! Analytical Jacobians for WG assimilation
00188 !
00189  CALL OI_JACOBIANS (KNBPT,PWS_O,PSAB,PARG,PD2,PWP,ZDWG_DWG,ZDWG_DW2) 
00190 !
00191 !**---------------------------------------------------------------------
00192 !**  - 2 - Calcul des champs analyses.
00193 
00194 DO JROF = 1 , KNBPT
00195 
00196 ! stockage des champs prevus
00197 
00198     ZITS(JROF) = PTS(JROF)
00199     ZITP(JROF) = PTP(JROF)
00200     ZIWS(JROF) = PWS(JROF)
00201     ZIWP(JROF) = PWP(JROF)
00202     ZVEG       = PVEG(JROF)
00203     ZISN(JROF) = PSNS(JROF)
00204     ZNEIG      = MAX(0.0,PSNS(JROF)/(PSNS(JROF)+WCRIN))
00205 !
00206 ! analyse de surface ou rappel vers la climatologie, sur terre
00207 
00208 !    IF (PITM(JROF) > 0.5.AND.(RCLIMCA >= 0.0).AND.PWS(JROF)/=XUNDEF) THEN
00209     IF (PWS(JROF)/=XUNDEF) THEN
00210 
00211 ! analyse de surface
00212 
00213 !*   2.O  Initialisations pour l'analyse de surface
00214 
00215 ! conditions locales d'analyse effective des champs de surface
00216 ! calcul du temps solaire local utile
00217 !
00218         ZV10M=SQRT(PUCLS(JROF)**2+PVCLS(JROF)**2)
00219         ZPRECIP = MAX(0.,PRRCL(JROF))+ MAX(0.,PRRSL(JROF)) &
00220                  + MAX(0.,PRRCN(JROF))+ MAX(0.,PRRSN(JROF))  
00221 !
00222 ! Surface water forcing to the superficial reservoir 
00223 !
00224         ZPR_EVA = ZPRECIP + ABS(PEVAP(JROF))  
00225 !
00226         CALL OI_TSL(IDAT,NSSSSS,PGELAT(JROF),PGELAM(JROF),ZMU0,ZMU0M,IH)
00227         ZMU0 = ZMU0M
00228 !
00229         ZDACW = MIN(1.0,MAX(0.0,ABS(REAL(NINT(ZIVEG(JROF))-NTVGLA))))   
00230                * MIN(1.0,MAX(0.0,REAL(IH)))                              
00231                * MIN(1.0,MAX(0.0,REAL(IDJ)/REAL(MINDJ)))                 
00232                * MIN(1.0,MAX(0.0,1.0-ZV10M/(V10MX+REPS3)))               
00233                * MIN(1.0,MAX(0.0,1.0-ZPRECIP/(SPRECIP+REPS3)))           
00234                * MIN(1.0,MAX(0.0,1.0-ZWPI(JROF)/SICE))  
00235 !
00236         ZDACW2 = MIN(1.0,MAX(0.0,1.0-ZPR_EVA/(SPRECIP2+REPS3)))         &
00237                 * MIN(1.0,MAX(0.0,1.0-ZWPI(JROF)/SICE))  
00238 !
00239 ! coefficients : dependance par rapport a l'angle zenithal solaire
00240 !
00241         IF ( SMU0 > REPS3 ) THEN
00242           ZPDM=0.5*(1.0+TANH(SMU0*(ZMU0-0.5)))
00243         ELSE
00244           ZPDM=1.0
00245         ENDIF
00246         ZDACW = ZDACW * ZPDM
00247 !
00248 ! coefficients : dependance par rapport a l'evaporation de surface
00249 !
00250         IF ( SEVAP > REPS3 ) THEN
00251           ZPDV=MIN(1.0,MAX(0.0,PEVAP(JROF)/ZEVAP))
00252         ELSE
00253           ZPDV=1.0
00254         ENDIF
00255         ZDACW = ZDACW * ZPDV
00256 !
00257 ! coefficients : dependance par rapport a la nebulosite
00258 !
00259         IF ( ANEBUL > REPS3 ) THEN
00260           ZPDN=1.0-ANEBUL*(PATMNEB(JROF)/ZECHGU)**NNEBUL
00261         ELSE
00262           ZPDN=1.0
00263         ENDIF
00264         ZDACW = ZDACW * ZPDN
00265 !
00266 ! increments de temperature et d'humidite relative a 2m utiles
00267 !
00268         ZT2D = PT2INC(JROF)
00269         ZH2D = PH2INC(JROF)
00270 !
00271 !*   2.1  Analyse de temperature
00272 !
00273 ! report de l'increment de temperature a 2m sur Ts et Tp avec amortissement
00274 !
00275 !
00276         ZTINER = SODELX(1)/SODELX(0)
00277         IF (NNEIGT <= 0.OR. ZNEIG < REPS2) THEN
00278           ZPDT= 1.0
00279         ELSEIF (SNEIGT < REPS3) THEN
00280           ZPDT= 0.0
00281         ELSE
00282           ZPDT= (1.0- MIN(ZNEIG,SNEIGT)/SNEIGT)**NNEIGT
00283         ENDIF
00284 
00285         PTS(JROF) =  PTS(JROF)  + ZT2D*ZPDT
00286         PTP(JROF) =  PTP(JROF)  + ZT2D*ZPDT/ZTINER
00287 
00288 !*   2.2  Analyse d'humidite par interpolation optimale pour ISBA
00289 
00290 
00291 ! coefficients : dependance principale par rapport a la vegetation
00292 !
00293 !  fctveg.h 
00294 !****-------------------------------------------------------------------
00295 !
00296         CALL OI_FCTVEG(IH,ZVEG,                                               &
00297                         VGAT1,VGAT2,VGAT3,VGBT1,VGBT2,VGBT3,VGCT1,VGCT2,      &
00298                         VGAH1,VGAH2,VGAH3,VGBH1,VGBH2,VGBH3,VGCH1,VGCH2,      &
00299                         SIGT2MP,SIGHP2,                                       &
00300                         G1,G2,G3,G4,                                          &
00301                         VGST,VGSH,VGPT1,VGPH1,VGPT2,VGPH2)  
00302 !
00303         ZLAISRS = PLAI(JROF)/MAX(1.0,PRSMIN(JROF))
00304         ZCWST   = VGST
00305         ZCWSH   = VGSH
00306         ZCWPT   = VGPT1 + ZLAISRS*VGPT2
00307         ZCWPH   = VGPH1 + ZLAISRS*VGPH2
00308 
00309 ! coefficients : dependance par rapport a la texture
00310 
00311         ZDW = (ZWFC(JROF)-ZWWILT(JROF))/ADWR
00312 
00313 ! coefficients : dependance par rapport aux erreurs d'observation
00314 ! nb - in our case LSGOBS=.F.
00315 
00316         IF ( LSGOBS ) THEN
00317           ZZT = G1 / G2
00318           ZZH = G3 / G4 
00319         ELSE
00320           ZZT = 1.0
00321           ZZH = 1.0
00322         ENDIF
00323 
00324 ! coefficients : dependance par rapport a la couverture neigeuse
00325 
00326         IF (NNEIGW <= 0.OR. ZNEIG < REPS2) THEN
00327           ZPDS= 1.0
00328         ELSEIF (SNEIGW < REPS3) THEN
00329           ZPDS= 0.0
00330         ELSE
00331           ZPDS= (1.0- MIN(ZNEIG,SNEIGW)/SNEIGW)**NNEIGW
00332         ENDIF
00333         ZDACW = ZDACW * ZPDS
00334 !
00335         ZDACW2 = ZDACW2 * ZPDS
00336 
00337 ! calcul des increments bruts pour ws=Ws/ds/ro, wp=Wp/dp/ro
00338 ! coefficients finaux
00339  
00340         ZCWST = ZCWST * ZDW * ZZT * ZDACW
00341         ZCWSH = ZCWSH * ZDW * ZZH * ZDACW
00342         ZCWPT = ZCWPT * ZDW * ZZT * ZDACW
00343         ZCWPH = ZCWPH * ZDW * ZZH * ZDACW
00344 
00345 ! limitation eventuelle des increments de T2m et H2m
00346 ! limitation de la valeur absolue des increments
00347 
00348         IF (SIGT2MO < 0.0) ZT2D=MAX(SIGT2MO,MIN(-SIGT2MO,ZT2D))
00349         IF (SIGH2MO < 0.0) ZH2D=MAX(SIGH2MO,MIN(-SIGH2MO,ZH2D))
00350 
00351 ! retrait du biais moyen
00352 ! soustraction du biais moyen si SCOEF(T/H) <> 1
00353 
00354         PT2MBIAS(JROF)= PT2MBIAS(JROF)*(1.0-SCOEFT)+ZT2D*SCOEFT    
00355         PH2MBIAS(JROF)= PH2MBIAS(JROF)*(1.0-SCOEFH)+ZH2D*SCOEFH    
00356         ZTEFF = ZT2D - PT2MBIAS(JROF)
00357         ZHEFF = ZH2D - PH2MBIAS(JROF)
00358 
00359 ! si le biais courant est inferieur au biais moyen on le met a zero
00360 !                IF (ABS(ZT2D).LT.ABS(PSP_CI(JROF,YSP_CI%YCI(12)%MP0)) ZTEFF = 0.
00361 !                IF (ABS(ZH2D).LT.ABS(PSP_CI(JROF,YSP_CI%YCI(13)%MP0)) ZHEFF = 0.
00362 ! si le biais courant est inferieur au biais effectif on le garde
00363 
00364         IF ( (SCOEFT /= 0.0) .OR. (SCOEFH /= 0.0) ) THEN
00365           IF (ABS(ZT2D) < ABS(ZTEFF)) ZTEFF = ZT2D
00366           IF (ABS(ZH2D) < ABS(ZHEFF)) ZHEFF = ZH2D
00367           ZT2D = ZTEFF
00368           ZH2D = ZHEFF
00369         ENDIF
00370 
00371 ! increments bruts
00372 
00373         IF (LOBSWG) THEN
00374           CALL OI_KALMAN_GAIN(ZDWG_DWG(JROF),ZDWG_DW2(JROF),PD2(JROF),ZK1,ZK2)
00375           ZWSD = ZK1*ZDACW2*PWGINC(JROF)
00376           ZWPD = ZK2*ZDACW2*PWGINC(JROF)
00377           IF (LOBS2M) THEN
00378             IF (PWGINC(JROF) == 0.0) THEN
00379               ZWSD = RSCALDW*(ZCWST*ZT2D + ZCWSH*ZH2D)
00380               ZWPD = RSCALDW*(ZCWPT*ZT2D + ZCWPH*ZH2D)                    
00381             ENDIF
00382           ENDIF 
00383         ELSEIF (LOBS2M) THEN
00384           ZWSD = RSCALDW*(ZCWST*ZT2D + ZCWSH*ZH2D)
00385           ZWPD = RSCALDW*(ZCWPT*ZT2D + ZCWPH*ZH2D)        
00386         ELSE
00387           ZWSD = 0.0
00388           ZWPD = 0.0
00389         ENDIF
00390 
00391 ! limitations sur les corrections
00392 ! pas d'analyse de ws si pas d'evaporation sur sol nu
00393 
00394         IF (PEVAP(JROF)-PEVAPTR(JROF) >= 0.0 .AND. .NOT.LOBSWG)THEN
00395           ZWSD = 0.0
00396         ENDIF
00397 
00398         ZZVEG = ZVEG
00399 !===============================================================
00400 ! Lower limit for Wp set to  Wwilt instead of veg*Wwilt
00401 !===============================================================
00402 !        ZZVEG = 1.0
00403 !===============================================================
00404 
00405 ! analyse de wp limitee pour assurer veg*wwilt <= wp <= SWFC*wfc
00406 
00407         IF ( LIMVEG ) THEN
00408 
00409           ZWPR = ZIWP(JROF)/(PD2(JROF)*XRHOLW)
00410           IF ( ZWPR > ZWFC(JROF)*SWFC ) THEN
00411             IF ( LHUMID ) THEN
00412               ZWPD = MIN(0.0,ZWPD)
00413             ELSE
00414               ZWPD = 0.0
00415             ENDIF
00416           ELSEIF ( ZWPR < ZWWILT(JROF)*ZZVEG ) THEN
00417             IF ( LHUMID ) THEN
00418               ZWPD = MAX(0.0,ZWPD)
00419             ELSE
00420               ZWPD = 0.0
00421             ENDIF
00422           ELSE
00423             ZWPD1 = ZWWILT(JROF)*ZZVEG -ZWPR
00424             ZWPD2 = ZWFC(JROF)*SWFC   -ZWPR
00425             ZWPD = MAX(ZWPD1,MIN(ZWPD2,ZWPD))
00426           ENDIF
00427 
00428 ! analyse de ws limitee pour assurer veg*wwilt <= ws <= SWFC*wfc
00429 
00430           ZWSR = ZIWS(JROF)/(RD1*XRHOLW)
00431           IF ( ZWSR > ZWFC(JROF)*SWFC ) THEN
00432             IF ( LHUMID ) THEN
00433               ZWSD = MIN(0.0,ZWSD)
00434             ELSE
00435               ZWSD = 0.0
00436             ENDIF
00437           ELSEIF ( ZWSR < ZWWILT(JROF)*ZVEG) THEN
00438             IF (LHUMID) THEN
00439               ZWSD = MAX(0.0,ZWSD)
00440             ELSE
00441               ZWSD = 0.0
00442             ENDIF
00443           ELSE
00444             ZWSD1 = ZWWILT(JROF)*ZVEG -ZWSR
00445             ZWSD2 = ZWFC(JROF)*SWFC   -ZWSR
00446             ZWSD = MAX(ZWSD1,MIN(ZWSD2,ZWSD))
00447           ENDIF
00448         ENDIF
00449 
00450 ! lissage des increments d'analyse de wp
00451 
00452         IF ( LISSEW ) THEN
00453           ZWPDX = ZWPD
00454           IF ( NLISSEW >= 3 ) THEN
00455             ZWPD =.25*(PWPINC3(JROF)+PWPINC2(JROF)+PWPINC1(JROF)+ZWPDX)    
00456           ELSE
00457             ZWPD = 0.0
00458           ENDIF
00459           IF ( NLISSEW >= 2 ) THEN
00460             PWPINC3(JROF)=PWPINC2(JROF)
00461           ENDIF
00462           IF ( NLISSEW >= 1 ) THEN
00463             PWPINC2(JROF)=PWPINC1(JROF)
00464           ENDIF
00465           PWPINC1(JROF)=ZWPDX
00466         ENDIF
00467 
00468 ! report des increments sur Ws, Wp
00469 
00470         ZWSA = PWS(JROF) + ZWSD*RD1*XRHOLW
00471         ZWPA = PWP(JROF) + ZWPD*PD2(JROF)*XRHOLW
00472         ZWSMIN = REPS1*RD1*XRHOLW      
00473         PWS(JROF) = MAX(ZWSMIN,MIN(ZWSMX(JROF),ZWSA))        
00474 
00475 ! contenu en eau total minimum
00476 
00477         ZWPMIN = MAX(PWS(JROF),REPS1*PD2(JROF)*XRHOLW)
00478         PWP(JROF) = MAX(ZWPMIN,MIN(ZWPMX(JROF),ZWPA))
00479 
00480 !*   2.4  Rappel vers la climatologie
00481 
00482 
00483 ! mise a jour des champs climatologiques
00484 
00485         IF ( .NOT. LCLIM ) THEN
00486           ZTSC = ZITS(JROF)
00487           ZTPC = ZITP(JROF)
00488           ZWSC = ZIWS(JROF)
00489           ZWPC = ZIWP(JROF)
00490           ZSNC = PSNS(JROF)
00491         ELSE
00492           ZTSC = PTSC(JROF)
00493           ZTPC = PTPC(JROF)
00494           ZWSC = PWSC(JROF) * ZWSMX(JROF)
00495           ZWPC = PWPC(JROF) * ZWPMX(JROF)
00496           ZSNC = PSNC(JROF)
00497         ENDIF
00498 
00499         ZCLIM = RCLIMCA /(1.0+RCLIMN*ZNEIG)
00500 
00501 ! Rappel de Ts
00502         ZCLIMCA = RCLIMTS * ZCLIM
00503         PTS(JROF) = (1.0-ZCLIMCA)*PTS(JROF)+    ZCLIMCA  *ZTSC
00504 ! Rappel de Tp
00505         ZCLIMCA = RCLIMTP * RCLIMCA
00506         PTP(JROF) = (1.0-ZCLIMCA)*PTP(JROF)+    ZCLIMCA  *ZTPC
00507 ! Rappel de Ws
00508         ZCLIMCA = RCLIMWS * ZCLIM
00509         ZCLIMCA = ZCLIMCA* ZVEG + MIN(1.0,RCLIMV*ZCLIMCA)* (1.0-ZVEG)
00510         PWS(JROF) = (1.0-ZCLIMCA)*PWS(JROF)+    ZCLIMCA  *ZWSC
00511 ! Rappel de Wp
00512         ZCLIMCA = RCLIMWP * ZCLIM
00513         ZCLIMCA = ZCLIMCA* ZVEG + MIN(1.0,RCLIMV*ZCLIMCA)* (1.0-ZVEG)
00514         IF ( LFGEL ) THEN
00515           ZWP = PWP(JROF)
00516           ZGEL = ZWPI(JROF) / MAX(ZWP+ZWPI(JROF),REPS3)
00517           ZWPC = ZWPC * (1.0 - MAX(0.0,MIN(1.0,ZGEL)))
00518           ZWPC = MAX(ZWPMIN,ZWPC)
00519         ENDIF
00520         PWP(JROF) = (1.0-ZCLIMCA)*PWP(JROF) + ZCLIMCA*ZWPC
00521 
00522 ! rappel de Sn avec correction eventuelle pour fonte
00523 
00524         ZSNA = (1.0-RCLIMCA)*PSNS(JROF) + RCLIMCA*ZSNC
00525         ZCOEF= RSNSA/21600. * ZECHGU
00526         ZMSN = MAX (0.0, ZCOEF*(PTCLS(JROF)-XTT))**RSNSB
00527         PSNS(JROF) = MAX (ZSNA-ZMSN ,0.0)
00528 
00529         IF (LFGEL) THEN
00530           ZCOEF= RWPIA/21600. * ZECHGU
00531           ZMSN = MAX (0.0, ZCOEF*(PTCLS(JROF)-XTT))**RWPIB
00532           PTL(JROF)=MAX (ZWPI(JROF)-ZMSN ,0.0)
00533           PWP(JROF)=PWP(JROF)-PTL(JROF)+ZWPI(JROF)
00534         ENDIF
00535 
00536 !*   2.5  Rappel de SST, sur mer
00537 
00538 !  ELSEIF ( PITM(JROF) <= 0.5 .AND. RCLISST /= 0. .AND. LCLIM ) THEN  
00539 !    PTS(JROF) = (1.0-RCLISST)*PTS(JROF) + RCLISST *PSSTC(JROF)    
00540 !    PTP(JROF) = PTS(JROF)
00541 !   PWS(JROF) = XUNDEF
00542 !   PWP(JROF) = XUNDEF
00543 !   PTL(JROF) = 0.0
00544   ENDIF
00545 
00546 
00547 !*   2.6  Mise a jour des constantes de surface sur mer,
00548 !*        en fonction de la banquise
00549 
00550   IF ( PITM(JROF) <= 0.5 ) THEN
00551     IF ( PTS(JROF) <= TMERGL ) THEN
00552       PALBF(JROF)   = SALBB
00553       PEMISF(JROF)  = SEMIB
00554       PZ0F(JROF)    = SZZ0B*XG
00555       PZ0H(JROF)    = RZHZ0G*SZZ0B*XG
00556     ELSE
00557       PALBF(JROF)   = SALBM
00558       PEMISF(JROF)  = SEMIM
00559     ENDIF
00560   ENDIF
00561 
00562 ENDDO
00563 IF (LHOOK) CALL DR_HOOK('OI_CACSTS',1,ZHOOK_HANDLE)
00564 !
00565 !**---------------------------------------------------------------------
00566 END SUBROUTINE OI_CACSTS