7 prrcl, prrsl, prrcn, prrsn, &
8 patmneb, pitm, pevaptr, pevap, &
9 psnc, ptsc, pucls, pvcls, &
10 pts_o, pt2m_o, phu2m_o, pswe, &
39 USE modd_csts, ONLY : xday, xpi, xrholw, xlvtt, ndaysec
42 USE modd_assim, ONLY : lobswg, nitrad, nprintlev, nechgu, xrd1, xrscaldw, &
43 xrthr_qc, xsigwgb, xsigwgo, xsigwgo_max, xat2m_isba, &
44 xahu2m_isba, xazon10m_isba, xamer10m_isba
47 USE yomhook
, ONLY : lhook, dr_hook
48 USE parkind1
, ONLY : jprb
51 USE modi_oi_bc_soil_moisture
56 TYPE(isba_t
),
INTENT(INOUT) :: i
58 CHARACTER(LEN=6),
INTENT(IN) :: hprogram
59 INTEGER,
INTENT(IN) :: ki
60 REAL,
DIMENSION(KI),
INTENT(IN) :: prrcl
61 REAL,
DIMENSION(KI),
INTENT(IN) :: prrsl
62 REAL,
DIMENSION(KI),
INTENT(IN) :: prrcn
63 REAL,
DIMENSION(KI),
INTENT(IN) :: prrsn
64 REAL,
DIMENSION(KI),
INTENT(IN) :: patmneb
65 REAL,
DIMENSION(KI),
INTENT(IN) :: pitm
66 REAL,
DIMENSION(KI),
INTENT(IN) :: pevaptr
67 REAL,
DIMENSION(KI),
INTENT(IN) :: pevap
68 REAL,
DIMENSION(KI),
INTENT(IN) :: psnc
69 REAL,
DIMENSION(KI),
INTENT(IN) :: ptsc
70 REAL,
DIMENSION(KI),
INTENT(IN) :: pucls
71 REAL,
DIMENSION(KI),
INTENT(IN) :: pvcls
72 REAL,
DIMENSION(KI),
INTENT(IN) :: pts_o
73 REAL,
DIMENSION(KI),
INTENT(IN) :: pt2m_o
74 REAL,
DIMENSION(KI),
INTENT(IN) :: phu2m_o
75 REAL,
DIMENSION(KI),
INTENT(OUT):: pswe
76 CHARACTER(LEN=2),
INTENT(IN) :: htest
77 LOGICAL,
DIMENSION (KI) :: od_maskext
78 REAL(KIND=JPRB),
DIMENSION (:),
INTENT(IN) :: plon_in
79 REAL(KIND=JPRB),
DIMENSION (:),
INTENT(IN) :: plat_in
85 REAL,
DIMENSION (KI) :: zsab, zarg, zws, zwp, ztl, zws0, zwp0, ztl0, &
86 zts, ztp, zsns, ztcls, zhcls, zd2, zucls, zvcls, &
87 zrsmin, zlai, zveg, zsns0, zts0, ztp0, &
88 ziveg, zsm_o, zsig_smo, zlsm_o, zws_o, zlon, zlat, &
89 zt2inc, zh2inc, zwginc, zwpinc1, zwpinc2, zwpinc3, &
90 zt2mbias, zh2mbias, zalbf, zemisf, zz0f, zz0h, &
91 zwsc, zwpc, ztpc, zevap, zevaptr, zsstc, &
92 zgelat, zgelam, zgemu, zwsinc, zwpinc, ztlinc, &
93 zsninc, ztsinc, ztpinc
101 INTEGER :: ji, jj, jp, jl
103 REAL(KIND=JPRB) :: zhook_handle
107 IF (lhook) CALL dr_hook(
'ASSIM_NATURE_ISBA_OI',0,zhook_handle)
109 IF (htest/=
'OK')
THEN
110 CALL
abor1_sfx(
'ASSIM_NATURE_ISBA_OI: FATAL ERROR DURING ARGUMENT TRANSFER')
113 IF ( nprintlev > 0 )
THEN
114 WRITE(*,*)
'--------------------------------------------------------------------------'
116 WRITE(*,*)
'| ENTER OI_ASSIM |'
118 WRITE(*,*)
'--------------------------------------------------------------------------'
125 xrscaldw =
REAL(nechgu)/6.0
131 iyear = i%TTIME%TDATE%YEAR
132 imonth = i%TTIME%TDATE%MONTH
133 iday = i%TTIME%TDATE%DAY
134 isssss = i%TTIME%TIME
135 IF ( isssss>ndaysec ) isssss = isssss - ndaysec
136 idat = iyear*10000. + imonth*100. + iday
140 zgelam(ji) = plon_in(ji)
141 zgelat(ji) = plat_in(ji)
145 zgemu(ji) = sin(zgelat(ji)*xpi/180.)
153 zsab(:) = i%XSAND(:,jp)*100.
154 zarg(:) = i%XCLAY(:,jp)*100.
156 zts0(:) = i%XTG (:,1,jp)
157 ztp0(:) = i%XTG (:,2,jp)
159 zws0(:) = i%XWG (:,1,jp)
160 zwp0(:) = i%XWG (:,2,jp)
161 ztl0(:) = i%XWGI (:,2,jp)
163 zsns0(:) = i%TSNOW%WSNOW(:,jl,jp)
166 ztcls(:) = xat2m_isba(:,jp)
167 zhcls(:) = xahu2m_isba(:,jp)
169 zd2(:) = i%XDG (:,2,jp)
170 zrsmin(:) = i%XRSMIN(:,jp)
171 zlai(:) = i%XLAI (:,jp)
172 zveg(:) = i%XVEG (:,jp)
196 IF ( nprintlev > 1 )
THEN
197 WRITE(*,*)
'value in PREP file => WG1 ',sum(zws0)/ki
198 WRITE(*,*)
'value in PREP file => WG2 ',sum(zwp0)/ki
199 WRITE(*,*)
'value in PREP file => TG1 ',sum(zts0)/ki
200 WRITE(*,*)
'value in PREP file => TG2 ',sum(ztp0)/ki
201 WRITE(*,*)
'value in PREP file => WGI2 ',sum(ztl0)/ki
202 WRITE(*,*)
'value in PREP file => WSNOW_VEG1',sum(zsns)/ki
203 WRITE(*,*)
'value in PREP file => LAI ',sum(zlai)/ki
204 WRITE(*,*)
'value in PREP file => VEG ',sum(zveg)/ki
205 WRITE(*,*)
'value in PREP file => RSMIN ',sum(zrsmin)/ki
206 WRITE(*,*)
'value in PREP file => DATA_DG2 ',sum(zd2)/ki
207 WRITE(*,*)
'value in PREP file => SAND ',sum(zsab)/ki
208 WRITE(*,*)
'value in PREP file => CLAY ',sum(zarg)/ki
214 WHERE ( zws0(:)/=xundef )
215 zws(:) = zws0(:) * xrd1 * xrholw
216 zwp(:) = zwp0(:) * zd2(:) * xrholw
217 ztl(:) = ztl0(:) * zd2(:) * xrholw
220 zevap(:) = (pevap(:)/xlvtt*xday)/(nechgu*3600.)
221 zevaptr(:) = pevaptr(:)*xday
231 OPEN(unit=111,file=
'ASCAT_SM.DAT')
233 READ(111,*) zsm_o(ji),zsig_smo(ji),zlsm_o(ji)
236 IF ( zlsm_o(ji)<1.0 .OR. zsig_smo(ji)>xsigwgo_max ) zsm_o(ji) = 999.0
237 IF ( zsm_o(ji)/=999.0 ) inobs = inobs + 1
240 IF ( nprintlev > 0 )
WRITE(*,*)
'READ ASCAT SM OK'
246 IF ( nprintlev > 0 )
WRITE(*,*)
' NUMBER OF ASCAT OBSERVATIONS AFTER INITIAL CHECKS :: ',inobs
254 WHERE ( pt2m_o(:) /= 999.0 )
255 zt2inc(:) = pt2m_o(:) - ztcls(:)
258 WHERE ( phu2m_o(:) /= 999.0 )
259 zh2inc(:) = phu2m_o(:) - zhcls(:)
264 WHERE (od_maskext(1:ki))
271 zthres = xrthr_qc*sqrt(xsigwgo**2 + xsigwgb**2)
275 IF ( zws_o(ji)/=999.0 )
THEN
276 zwginc(ji) = zws_o(ji) - zws(ji)
277 IF ( abs(zwginc(ji))>zthres )
THEN
286 IF ( nprintlev > 0 )
THEN
287 WRITE(*,*)
' NUMBER OF ASCAT OBSERVATIONS AFTER BACKGROUND CHECK :: ',inobs
288 WRITE(*,*)
'Mean T2m increments ',sum(zt2inc)/ki
289 WRITE(*,*)
'Mean HU2m increments ',sum(zh2inc)/ki
294 write(*,*)
'PERFORMING OI SOIL ANALYSIS'
295 CALL
oi_cacsts(ki, zt2inc, zh2inc, zwginc, zws_o, &
297 ztp, zwp, ztl, zsns, zts, zws, &
298 ztcls, zhcls, zucls, zvcls, zsstc, &
299 zwpinc1, zwpinc2, zwpinc3, zt2mbias, zh2mbias, &
300 prrcl, prrsl, prrcn, prrsn, patmneb, zevap, zevaptr, &
301 pitm, zveg, zalbf, zemisf, zz0f, &
302 ziveg, zarg, zd2, zsab, zlai, zrsmin, zz0h, &
303 ptsc, ztpc, zwsc, zwpc, psnc, zgelat, zgelam, zgemu )
312 WHERE ( zws(:)/=xundef )
313 zwsinc(:) = zws(:) - zws0(:) * xrd1 * xrholw
314 zwpinc(:) = zwp(:) - zwp0(:) * zd2(:) * xrholw
315 ztlinc(:) = ztl(:) - ztl0(:) * zd2(:) * xrholw
316 zsninc(:) = zsns(:) - zsns0(:)
321 WHERE (od_maskext(1:ki)) zd2(:) = 1.0
323 WHERE (zws0(:)/=xundef)
324 zws0(:) = zws(:)/ (xrd1*xrholw)
325 zwp0(:) = zwp(:)/ (zd2(:)*xrholw)
326 ztl0(:) = ztl(:)/ (zd2(:)*xrholw)
333 WHERE (zts(:)/=xundef)
334 ztsinc(:) = zts(:) - zts0(:)
335 ztpinc(:) = ztp(:) - ztp0(:)
343 WRITE(*,*)
'---------------------------------------------------------------'
344 WRITE(*,*)
'Mean WS increments over NATURE ',sum(zwsinc)/ki
345 WRITE(*,*)
'Mean WP increments over NATURE ',sum(zwpinc)/ki
346 WRITE(*,*)
'Mean TS increments over NATURE ',sum(ztsinc)/ki
347 WRITE(*,*)
'Mean TP increments over NATURE ',sum(ztpinc)/ki
348 WRITE(*,*)
'Mean TL increments over NATURE ',sum(ztlinc)/ki
349 WRITE(*,*)
'---------------------------------------------------------------'
352 i%XWG (:,1,jp) = zws0(:)
353 i%XWG (:,2,jp) = zwp0(:)
354 i%XTG (:,1,jp) = zts0(:)
355 i%XTG (:,2,jp) = ztp0(:)
356 i%XWGI(:,2,jp) = ztl0(:)
360 IF (lhook) CALL dr_hook(
'ASSIM_NATURE_ISBA_OI',1,zhook_handle)
subroutine oi_bc_soil_moisture(KNBPT,
subroutine abor1_sfx(YTEXT)
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)
subroutine assim_nature_isba_oi(I, HPROGRAM, KI, PRRCL, PRRSL, PRRCN, PRRSN, PATMNEB, PITM, PEVAPTR, PEVAP, PSNC, PTSC, PUCLS, PVCLS, PTS_O, PT2M_O, PHU2M_O, PSWE, HTEST, OD_MASKEXT, PLON_IN, PLAT_IN)