SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
oi_cacsts.F90
Go to the documentation of this file.
1 !SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
2 !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
3 !SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
4 !SFX_LIC for details. version 1.
5 !option! -O nomove
6 !****---------------------------------------------------------------------------
7 !**** CACSTS : INITIALIZES THE SURFACE FIELDS
8 !**** ------
9 !**** Auteurs : CB 01/91, BU 05/92, VC 05/93, DG 03/94, PA 09/95, DG 05/96
10 !**** Mod : E. Bazile 01/97 Subtraction of the mean temperature and/or
11 !**** humidity bias for the increments used for the
12 !**** analysis of the soil water
13 !**** Mod : D. Giard 03/99 ACSOL -> ACSOLW
14 !**** E. Bazile , F. Bouyssel : logical LLLACW is replaced by a
15 !**** continuous function ZDACW (LSOLV).
16 !**** Mod : F. Taillefer 09/02 : update of surface constants according to SST
17 !**** Mod : F. Bouyssel 02/04 : threshold using the solar zenithal angle
18 !**** Mod : E. Bazile 01/2007 : Parameter for the correction PSNS and WPI
19 ! M.Hamrud 01-Jul-2006 Revised surface fields
20 ! A.Trojakova 27-Jun-2007 bugfixing ZV10M (surface pointers)
21 ! F. Bouyssel 27-Mar-2011 Use of REPS2 instead of REPS3 for ZNEI
22 !****---------------------------------------------------------------------------
23 !
24 SUBROUTINE oi_cacsts(KNBPT,PT2INC,PH2INC,PWGINC,PWS_O, &
25  kdat,ksssss, &
26  ptp,pwp,ptl,psns,pts,pws, &
27  ptcls,phcls,pucls,pvcls,psstc,pwpinc1,pwpinc2,pwpinc3, &
28  pt2mbias,ph2mbias, &
29  prrcl,prrsl,prrcn,prrsn,patmneb,pevap,pevaptr, &
30  pitm,pveg,palbf,pemisf,pz0f, &
31  piveg,parg,pd2,psab,plai,prsmin,pz0h, &
32  ptsc,ptpc,pwsc,pwpc,psnc,pgelat,pgelam,pgemu)
33 !
34 !****---------------------------------------------------------------------------
35 !** AIM : INITIALIZES THE PRONOSTIC SURFACE FIELDS
36 !** ---
37 !** SEQUENCE D'APPEL :
38 !** ----------------
39 !** CALL CACSTS(....)
40 
41 !** INPUT ARGUMENTS :
42 !** ------------------
43 !**
44 !** - EXPLICIT -
45 !** KNBPT : real number of treated points
46 !** PT2INC : analysis increment of T2m
47 !** PH2INC : analysis increment of Hu2m
48 !** PSP_SB,PSP_SG,PSP_RR,PSD_VF,PSD_VV,PSD_VX,PSP_CI,PSP_X2 :
49 !** buffer of pgd analysis fields
50 !** PGELAM, PGELAT, PGEMU : geographical coordinates
51 
52 !** OUTPUT ARGUMENTS :
53 !** -------------------
54 !** EXTERN : CAVEGI (FCTVEG) - ACSOLW - TSL
55 !** --------
56 
57 !** ALGORITHM : - INITIALIZES THE SURFACE TEMPERATURE.
58 !** ---------- - INITIALIZES THE DEEP TEMPERATURE.
59 !** - INITIALIZES THE SURFACE WATER TANK.
60 !** - INITIALIZES THE DEEP WATER TANK.
61 !** - CORRECTS THE SNOW AMOUNT.
62 !***-----------------------------------------------------------------
63 !
64 USE modd_csts, ONLY : xg, xtt, xrholw, xday
65 USE modd_surf_par, ONLY : xundef
66 USE modd_assim
67 !
68 USE yomhook ,ONLY : lhook, dr_hook
69 USE parkind1 ,ONLY : jprb
70 !
71 USE modi_oi_cavegi
72 USE modi_oi_acsolw
73 USE modi_oi_jacobians
74 USE modi_oi_tsl
75 USE modi_oi_fctveg
76 USE modi_oi_kalman_gain
77 !
78 IMPLICIT NONE
79 !
80 INTEGER,INTENT(IN) :: knbpt, kdat, ksssss
81 !
82 REAL ,INTENT(IN) :: pt2inc(knbpt)
83 REAL ,INTENT(IN) :: ph2inc(knbpt)
84 REAL ,INTENT(IN) :: pwginc(knbpt)
85 REAL ,INTENT(IN) :: pws_o(knbpt)
86 REAL ,INTENT(INOUT) :: ptp(knbpt)
87 REAL ,INTENT(INOUT) :: pwp(knbpt)
88 REAL ,INTENT(INOUT) :: ptl(knbpt)
89 REAL ,INTENT(INOUT) :: psns(knbpt)
90 REAL ,INTENT(INOUT) :: pts(knbpt)
91 REAL ,INTENT(INOUT) :: pws(knbpt)
92 REAL ,INTENT(INOUT) :: ptcls(knbpt)
93 REAL ,INTENT(INOUT) :: phcls(knbpt)
94 REAL ,INTENT(INOUT) :: pucls(knbpt)
95 REAL ,INTENT(INOUT) :: pvcls(knbpt)
96 REAL ,INTENT(INOUT) :: psstc(knbpt)
97 REAL ,INTENT(INOUT) :: pwpinc1(knbpt)
98 REAL ,INTENT(INOUT) :: pwpinc2(knbpt)
99 REAL ,INTENT(INOUT) :: pwpinc3(knbpt)
100 REAL ,INTENT(INOUT) :: pt2mbias(knbpt)
101 REAL ,INTENT(INOUT) :: ph2mbias(knbpt)
102 REAL ,INTENT(IN) :: prrcl(knbpt)
103 REAL ,INTENT(IN) :: prrsl(knbpt)
104 REAL ,INTENT(IN) :: prrcn(knbpt)
105 REAL ,INTENT(IN) :: prrsn(knbpt)
106 REAL ,INTENT(IN) :: patmneb(knbpt)
107 REAL ,INTENT(IN) :: pevap(knbpt)
108 REAL ,INTENT(IN) :: pevaptr(knbpt)
109 REAL ,INTENT(IN) :: pitm(knbpt)
110 REAL ,INTENT(IN) :: pveg(knbpt)
111 REAL ,INTENT(INOUT) :: palbf(knbpt)
112 REAL ,INTENT(INOUT) :: pemisf(knbpt)
113 REAL ,INTENT(INOUT) :: pz0f(knbpt)
114 REAL ,INTENT(INOUT) :: piveg(knbpt)
115 REAL ,INTENT(INOUT) :: parg(knbpt)
116 REAL ,INTENT(INOUT) :: pd2(knbpt)
117 REAL ,INTENT(INOUT) :: psab(knbpt)
118 REAL ,INTENT(INOUT) :: plai(knbpt)
119 REAL ,INTENT(INOUT) :: prsmin(knbpt)
120 REAL ,INTENT(INOUT) :: pz0h(knbpt)
121 REAL ,INTENT(IN) :: ptsc(knbpt)
122 REAL ,INTENT(IN) :: ptpc(knbpt)
123 REAL ,INTENT(IN) :: pwsc(knbpt)
124 REAL ,INTENT(IN) :: pwpc(knbpt)
125 REAL ,INTENT(IN) :: psnc(knbpt)
126 REAL ,INTENT(IN) :: pgelat(knbpt)
127 REAL ,INTENT(IN) :: pgelam(knbpt)
128 REAL ,INTENT(IN) :: pgemu(knbpt)
129 !
130 REAL, DIMENSION(24) :: zvgat1,zvgat2,zvgat3,zvgbt1,zvgbt2,zvgbt3,zvgct1,zvgct2
131 REAL, DIMENSION(24) :: zvgah1,zvgah2,zvgah3,zvgbh1,zvgbh2,zvgbh3,zvgch1,zvgch2
132 REAL, DIMENSION(24) :: zsigt2mp,zsighp2
133 !
134 REAL, DIMENSION(KNBPT) :: ziveg
135 REAL, DIMENSION(KNBPT) :: zwfc, zwpmx, zwsat, zwsmx, zwwilt
136 REAL, DIMENSION(KNBPT) :: zdwg_dwg, zdwg_dw2
137 !
138 REAL :: zechgu, znei, zcli, zpd, zclimca
139 REAL :: ztsc, ztpc, zwsc, zwpc, zsnc
140 REAL :: zv10m, zprecip, zwpi, zdacw, zdacw2, zmu0, zmu0m
141 !
142 REAL :: zvgst,zvgsh,zvgpt1,zvgph1,zvgpt2,zvgph2,zg1,zg2,zg3,zg4
143 !
144 REAL :: zzt, zzh, zlaisrs, zteff, zheff
145 REAL :: zcwph, zcwpt, zt2d, zh2d
146 REAL :: zwsd, zwpd, zwpdx
147 !
148 REAL :: zwsa, zwsmin, zwpa, zwpmin
149 REAL :: zgel, zsna, zmsn, zk1, zk2
150 !
151 INTEGER :: ih, jrof
152 LOGICAL :: gsgobs
153 !
154 REAL(KIND=JPRB) :: zhook_handle
155 !
156 !--------------------------------------------------------------------
157 IF (lhook) CALL dr_hook('OI_CACSTS',0,zhook_handle)
158 !
159 zechgu = REAL(NECHGU) * 3600.
160 !
161 !** 1.1 Initialization of raw polynomials and reference fields.
162 !
163  CALL oi_cavegi(zvgat1,zvgat2,zvgat3,zvgbt1,zvgbt2,zvgbt3,zvgct1,zvgct2, &
164  zvgah1,zvgah2,zvgah3,zvgbh1,zvgbh2,zvgbh3,zvgch1,zvgch2, &
165  zsigt2mp,zsighp2,gsgobs)
166 !
167 !
168 !* 1.2 Initialization of intermediate variables
169 !
170 DO jrof = 1,knbpt
171  ziveg(jrof) = anint(piveg(jrof))
172 ENDDO
173 !
174  CALL oi_acsolw(1, knbpt, &
175  parg, pd2, pws, ziveg, psab, &
176  lldhmt, &
177  zwfc, zwpmx, zwsat, zwsmx, zwwilt)
178 !
179 !* 1.3. Analytical Jacobians for WG assimilation
180 !
181  CALL oi_jacobians(knbpt,pws_o,psab,parg,pd2,pwp,zdwg_dwg,zdwg_dw2)
182 !
183 !**---------------------------------------------------------------------
184 !** - 2 - Calculation of analysed fields.
185 
186 DO jrof = 1,knbpt
187 
188 ! surface analysis or de surface ou call back to climatology, on earth
189 ! IF (PITM(JROF) > 0.5.AND.(RCLIMCA >= 0.0).AND.PWS(JROF)/=XUNDEF) THEN
190  IF ( pws(jrof)/=xundef ) THEN
191 !
192 ! storage of forecast fields
193  znei = max(0.0,psns(jrof)/(psns(jrof)+xwcrin))
194 ! update of climatological fields
195  zcli = xrclimca /(1.0+xrclimn*znei)
196 
197  IF ( .NOT. lclim ) THEN
198  ztsc = pts(jrof)
199  ztpc = ptp(jrof)
200  zwsc = pws(jrof)
201  zwpc = pwp(jrof)
202  zsnc = psns(jrof)
203  ELSE
204  ztsc = ptsc(jrof)
205  ztpc = ptpc(jrof)
206  zwsc = pwsc(jrof) * zwsmx(jrof)
207  zwpc = pwpc(jrof) * zwpmx(jrof)
208  zsnc = psnc(jrof)
209  ENDIF
210 
211 !-----------------------------------------------------------------------------------
212 !
213 !* 2.1 Temperature analysis
214 !
215 ! transfer of 2m temperature increment on Ts and Tp with damping
216 !
217  IF ( nneigt<=0 .OR. znei<xreps2 ) THEN
218  zpd = 1.0
219  ELSEIF ( xsneigt<xreps3 ) THEN
220  zpd = 0.0
221  ELSE
222  zpd = (1.0-min(znei,xsneigt)/xsneigt)**nneigt
223  ENDIF
224 
225  pts(jrof) = pts(jrof) + pt2inc(jrof)*zpd
226  ptp(jrof) = ptp(jrof) + pt2inc(jrof)*zpd/(xsodelx(1)/xsodelx(0))
227 
228 ! Call back of Ts
229  zclimca = xrclimts * zcli
230  pts(jrof) = (1.0-zclimca)*pts(jrof) + zclimca*ztsc
231 
232 ! Call back of Tp
233  zclimca = xrclimtp * xrclimca
234  ptp(jrof) = (1.0-zclimca)*ptp(jrof )+ zclimca*ztpc
235 
236 !-----------------------------------------------------------------------------------
237 !
238 !* 2.2 Initializations for the surface analysis
239 !
240 ! local conditions for the effective analysis of surface fields
241 ! calculation of the useful local solar time
242 !
243  CALL oi_tsl(kdat,ksssss,pgelat(jrof),pgelam(jrof),zmu0,zmu0m,ih)
244 !
245  zv10m = sqrt(pucls(jrof)**2+pvcls(jrof)**2)
246 !
247  zprecip = max(0.,prrcl(jrof))+ max(0.,prrsl(jrof)) &
248  + max(0.,prrcn(jrof))+ max(0.,prrsn(jrof))
249 !
250  IF (lfgel) THEN
251  zwpi = ptl(jrof)
252  ELSE
253  zwpi = 0.0
254  ENDIF
255 !
256 ! Surface water forcing to the superficial reservoir
257 !
258  zdacw = min(1.0,max(0.0,abs(REAL(nint(ziveg(jrof))-ntvgla))) ) &
259  * min(1.0,max(0.0,REAL(ih))) &
260  * min(1.0,max(0.0,REAL(nidj)/REAL(nmindj))) &
261  * min(1.0,max(0.0,1.0-zv10m/(xv10mx+xreps3))) &
262  * min(1.0,max(0.0,1.0-zprecip/(xsprecip+xreps3))) &
263  * min(1.0,max(0.0,1.0-zwpi/xsice))
264 !
265 ! coefficients : depend on the solar zenithal angle
266 !
267  IF ( xsmu0>xreps3 ) THEN
268  zpd = 0.5 * (1.0+tanh(xsmu0*(zmu0m-0.5)))
269  ELSE
270  zpd = 1.0
271  ENDIF
272  zdacw = zdacw * zpd
273 !
274 ! coefficients : depend on the surface evaporation
275 !
276 !* Threshold of min. evaporation for W analysis (SEVAP en mm/day)
277  IF ( xsevap>xreps3 ) THEN
278  zpd = min(1.0,max(0.0,pevap(jrof)/(-xsevap/xday)))
279  ELSE
280  zpd = 1.0
281  ENDIF
282  zdacw = zdacw * zpd
283 !
284 ! coefficients : depend on the nebulosity
285 !
286  IF ( xanebul>xreps3 ) THEN
287  zpd = 1.0 - xanebul*(patmneb(jrof)/zechgu)**nnebul
288  ELSE
289  zpd = 1.0
290  ENDIF
291  zdacw = zdacw * zpd
292 !
293 ! coefficients : depend on the snow cover
294 
295  IF ( nneigw<=0 .OR. znei<xreps2 ) THEN
296  zpd = 1.0
297  ELSEIF ( xsneigw<xreps3 ) THEN
298  zpd = 0.0
299  ELSE
300  zpd = ( 1.0 - min(znei,xsneigw)/xsneigw)**nneigw
301  ENDIF
302  zdacw = zdacw * zpd
303 !
304  zdacw2 = min(1.0,max(0.0,1.0-(zprecip+abs(pevap(jrof)))/(xsprecip2+xreps3))) &
305  * min(1.0,max(0.0,1.0-zwpi/xsice))
306 !
307  zdacw2 = zdacw2 * zpd
308 
309 
310 !* 2.3 Humidity analysis by optimal interpolation for ISBA
311 
312 
313 ! coefficients : mainly depend on vegetation
314 !
315 ! fctveg.h
316 !****---------------Calculation of ZWSD and ZWPD------------------------------------
317 !
318  CALL oi_fctveg(ih,pveg(jrof), &
319  zvgat1,zvgat2,zvgat3,zvgbt1,zvgbt2,zvgbt3,zvgct1,zvgct2, &
320  zvgah1,zvgah2,zvgah3,zvgbh1,zvgbh2,zvgbh3,zvgch1,zvgch2, &
321  zsigt2mp,zsighp2, &
322  zg1,zg2,zg3,zg4, &
323  zvgst,zvgsh,zvgpt1,zvgph1,zvgpt2,zvgph2)
324 !
325 ! coefficients : depend on the observation errors
326 ! nb - in our case GSGOBS=.F.
327 !
328  IF ( gsgobs ) THEN
329  zzt = zg1 / zg2
330  zzh = zg3 / zg4
331  ELSE
332  zzt = 1.0
333  zzh = 1.0
334  ENDIF
335 
336 ! coefficients : depend on the texture
337 !
338  zpd = (zwfc(jrof)-zwwilt(jrof))/xadwr
339 
340 ! calculation of raw increments for ws=Ws/ds/ro, wp=Wp/dp/ro
341 ! final coefficients
342 !
343  zzt = zzt * zpd * zdacw
344  zzh = zzh * zpd * zdacw
345 !
346  zvgst = zvgst * zzt
347  zvgsh = zvgsh * zzh
348 
349  zlaisrs = plai(jrof)/max(1.0,prsmin(jrof))
350  zcwpt = ( zvgpt1 + zlaisrs*zvgpt2 ) * zzt
351  zcwph = ( zvgph1 + zlaisrs*zvgph2 ) * zzh
352 !
353 ! possible limitation of increments for T2m and H2m
354 ! limitation of the absolute value of the increments
355 !
356  zt2d = pt2inc(jrof)
357  zh2d = ph2inc(jrof)
358  IF (xsigt2mo < 0.0) zt2d=max(xsigt2mo,min(-xsigt2mo,zt2d))
359  IF (xsigh2mo < 0.0) zh2d=max(xsigh2mo,min(-xsigh2mo,zh2d))
360 
361 ! removal of the mean bias
362 ! subtraction of mean biais if SCOEF(T/H) <> 1
363 !
364  pt2mbias(jrof) = pt2mbias(jrof)*(1.0-xscoeft) + zt2d*xscoeft
365  ph2mbias(jrof) = ph2mbias(jrof)*(1.0-xscoefh) + zh2d*xscoefh
366 
367 ! if the current bias is lower than the mean bias, it's set to zero
368 ! IF (ABS(ZT2D).LT.ABS(PSP_CI(JROF,YSP_CI%YCI(12)%MP0)) ZTEFF = 0.
369 ! IF (ABS(ZH2D).LT.ABS(PSP_CI(JROF,YSP_CI%YCI(13)%MP0)) ZHEFF = 0.
370 ! if the current bias is lower than the effective bias, it's kept
371 !
372  IF ( xscoeft/= 0.0 .OR. xscoefh/=0.0 ) THEN
373  zteff = zt2d - pt2mbias(jrof)
374  zheff = zh2d - ph2mbias(jrof)
375  IF (abs(zt2d) < abs(zteff)) zteff = zt2d
376  IF (abs(zh2d) < abs(zheff)) zheff = zh2d
377  zt2d = zteff
378  zh2d = zheff
379  ENDIF
380 
381 ! raw increments
382 !
383  IF ( lobs2m .AND. (.NOT.lobswg .OR. pwginc(jrof)==0.0) ) THEN
384  zwsd = xrscaldw * (zvgst*zt2d + zvgsh*zh2d)
385  zwpd = xrscaldw * (zcwpt*zt2d + zcwph*zh2d)
386  ELSEIF ( lobswg ) THEN
387  CALL oi_kalman_gain(zdwg_dwg(jrof),zdwg_dw2(jrof),pd2(jrof),zk1,zk2)
388  zwsd = zk1*zdacw2*pwginc(jrof)
389  zwpd = zk2*zdacw2*pwginc(jrof)
390  ELSE
391  zwsd = 0.0
392  zwpd = 0.0
393  ENDIF
394 
395 ! limitations on the corrections
396 ! no ws analysis if no evaporation on bare soil
397 !
398  IF (pevap(jrof)-pevaptr(jrof)>= 0.0 .AND. .NOT.lobswg) zwsd = 0.0
399 
400 !===============================================================
401 ! Lower limit for Wp set to Wwilt instead of veg*Wwilt
402 !===============================================================
403 ! ZZVEG = 1.0
404 !=========================WS et WP================================
405 
406 ! analysis of wp limited to assure veg*wwilt <= wp <= SWFC*wfc
407  IF ( limveg ) CALL get_zw(zwpd,pwp(jrof),pd2(jrof))
408 
409  ! smoothing of analysis increments of wp
410  IF ( lissew ) THEN
411  zwpdx = zwpd
412  IF ( nlissew >= 3 ) THEN
413  zwpd = 0.25*(pwpinc3(jrof)+pwpinc2(jrof)+pwpinc1(jrof)+zwpdx)
414  ELSE
415  zwpd = 0.0
416  ENDIF
417  IF ( nlissew >= 2 ) pwpinc3(jrof) = pwpinc2(jrof)
418  IF ( nlissew >= 1 ) pwpinc2(jrof) = pwpinc1(jrof)
419  pwpinc1(jrof) = zwpdx
420  ENDIF
421 
422 ! analysis of ws limited to assure veg*wwilt <= ws <= SWFC*wfc
423  IF ( limveg ) CALL get_zw(zwsd,pws(jrof),xrd1)
424 
425 ! transfer of the increments on Ws, Wp
426 !
427  zwsa = pws(jrof) + zwsd * xrd1 * xrholw
428  zwsmin = xreps1 * xrd1 * xrholw
429  pws(jrof) = max(zwsmin,min(zwsmx(jrof),zwsa))
430 
431 ! minimal total water contents
432 !
433  zwpa = pwp(jrof) + zwpd * pd2(jrof) * xrholw
434  zwpmin = max(pws(jrof), xreps1 * pd2(jrof) * xrholw)
435  pwp(jrof) = max(zwpmin,min(zwpmx(jrof),zwpa))
436 
437 ! Call back of Ws
438  zclimca = xrclimws * zcli
439  zclimca = zclimca*pveg(jrof) + min(1.0,xrclimv*zclimca)*(1.0-pveg(jrof))
440  pws(jrof) = (1.0-zclimca)*pws(jrof) + zclimca*zwsc
441 
442 ! Call back of Wp
443  zclimca = xrclimwp * zcli
444  zclimca = zclimca*pveg(jrof) + min(1.0,xrclimv*zclimca)*(1.0-pveg(jrof))
445  IF ( lfgel ) THEN
446  zgel = zwpi / max(pwp(jrof)+zwpi,xreps3)
447  zwpc = zwpc * (1.0 - max(0.0,min(1.0,zgel)))
448  zwpc = max(zwpmin,zwpc)
449  ENDIF
450  pwp(jrof) = (1.0-zclimca)*pwp(jrof) + zclimca*zwpc
451 
452 ! call back of Sn with a possible correction for melting
453 !
454  zsna = (1.0-xrclimca)*psns(jrof) + xrclimca*zsnc
455  zmsn = max(0.0, xrsnsa/21600.*zechgu*(ptcls(jrof)-xtt))**xrsnsb
456  psns(jrof) = max(zsna-zmsn,0.0)
457 
458  IF (lfgel) THEN
459  zmsn = max(0.0, xrwpia/21600. * zechgu*(ptcls(jrof)-xtt))**xrwpib
460  ptl(jrof)=max(zwpi-zmsn ,0.0)
461  pwp(jrof)=pwp(jrof)-ptl(jrof)+zwpi
462  ENDIF
463 
464 !* 2.5 Call back of SST, on sea
465 
466 ! ELSEIF ( PITM(JROF) <= 0.5 .AND. RCLISST /= 0. .AND. LCLIM ) THEN
467 ! PTS(JROF) = (1.0-RCLISST)*PTS(JROF) + RCLISST *PSSTC(JROF)
468 ! PTP(JROF) = PTS(JROF)
469 ! PWS(JROF) = XUNDEF
470 ! PWP(JROF) = XUNDEF
471 ! PTL(JROF) = 0.0
472  ENDIF
473 
474 !* 2.6 Update of surface constants on sea, functions of ice field
475 
476  IF ( pitm(jrof) <= 0.5 ) THEN
477  IF ( pts(jrof) <= xtmergl ) THEN
478  palbf(jrof) = xsalbb
479  pemisf(jrof) = xsemib
480  pz0f(jrof) = xszz0b*xg
481  pz0h(jrof) = xrzhz0g * xszz0b*xg
482  ELSE
483  palbf(jrof) = xsalbm
484  pemisf(jrof) = xsemim
485  ENDIF
486  ENDIF
487 
488 ENDDO
489 
490 IF (lhook) CALL dr_hook('OI_CACSTS',1,zhook_handle)
491 
492  CONTAINS
493 
494 SUBROUTINE get_zw(PWD,PIW,PD)
495 !
496 REAL, INTENT(INOUT) :: pwd
497 REAL, INTENT(IN) :: piw, pd
498 REAL :: zwr, zwd1, zwd2
499 !
500 zwr = piw / (pd*xrholw)
501 !
502 IF ( zwr > zwfc(jrof)*xswfc ) THEN
503  IF ( lhumid ) THEN
504  pwd = min(0.0,pwd)
505  ELSE
506  pwd = 0.0
507  ENDIF
508 ELSEIF ( zwr < zwwilt(jrof)*pveg(jrof)) THEN
509  IF (lhumid) THEN
510  pwd = max(0.0,pwd)
511  ELSE
512  pwd = 0.0
513  ENDIF
514 ELSE
515  zwd1 = zwwilt(jrof)*pveg(jrof) - zwr
516  zwd2 = zwfc(jrof)*xswfc - zwr
517  pwd = max(zwd1,min(zwd2,pwd))
518 ENDIF
519 
520 END SUBROUTINE
521 !
522 !**---------------------------------------------------------------------
523 END SUBROUTINE oi_cacsts
subroutine oi_acsolw(KST, KNBPT,
Definition: oi_acsolw.F90:5
subroutine get_zw(PWD, PIW, PD)
Definition: oi_cacsts.F90:494
subroutine oi_cavegi(PVGAT1, PVGAT2, PVGAT3, PVGBT1, PVGBT2, PVGBT3, PVGCT1, PVGCT2, PVGAH1, PVGAH2, PVGAH3, PVGBH1, PVGBH2, PVGBH3, PVGCH1, PVGCH2, PSIGT2MP, PSIGHP2, OSGOBS)
Definition: oi_cavegi.F90:5
subroutine oi_fctveg(KH, PVEG, PVGAT1, PVGAT2, PVGAT3, PVGBT1, PVGBT2, PVGBT3, PVGCT1, PVGCT2, PVGAH1, PVGAH2, PVGAH3, PVGBH1, PVGBH2, PVGBH3, PVGCH1, PVGCH2, PSIGT2MP, PSIGHP2, PG1, PG2, PG3, PG4, PVGST, PVGSH, PVGPT1, PVGPH1, PVGPT2, PVGPH2)
Definition: oi_fctveg.F90:5
subroutine oi_cacsts(KNBPT, PT2INC, PH2INC, PWGINC, PWS_O, KDAT, KSSSSS, PTP, PWP, PTL, PSNS, PTS, PWS, PTCLS, PHCLS, PUCLS, PVCLS, PSSTC, PWPINC1, PWPINC2, PWPINC3, PT2MBIAS, PH2MBIAS, PRRCL, PRRSL, PRRCN, PRRSN, PATMNEB, PEVAP, PEVAPTR, PITM, PVEG, PALBF, PEMISF, PZ0F, PIVEG, PARG, PD2, PSAB, PLAI, PRSMIN, PZ0H, PTSC, PTPC, PWSC, PWPC, PSNC, PGELAT, PGELAM, PGEMU)
Definition: oi_cacsts.F90:24
subroutine oi_kalman_gain(PDWG_DWG, PDWG_DW2, PD2, PK1, PK2)
subroutine oi_jacobians(KNBPT,
Definition: oi_jacobians.F90:5
subroutine oi_tsl(KDAT, KSSSSS, PLAT, PLON, PMU0, PMU0M, KH)
Definition: oi_tsl.F90:5