8 pcon_rain, pstrat_rain, pcon_snow, pstrat_snow,&
9 pclouds, plsm, pevaptr, pevap, &
10 pswec, ptsc, pucls, pvcls, &
11 pts, pt2m, phu2m, pswe, &
12 htest, od_maskext, plon_in, plat_in )
47 USE modd_assim, ONLY : cassim_isba,laesnm,lextrap_nature,nprintlev
50 USE yomhook
, ONLY : lhook, dr_hook
51 USE parkind1
, ONLY : jprb
54 USE modi_oi_hor_extrapol_surf
55 USE modi_assim_isba_update_snow
56 USE modi_assim_nature_isba_ekf
57 USE modi_assim_nature_isba_enkf
58 USE modi_assim_nature_isba_oi
59 USE modi_average_diag_misc_isba_n
67 TYPE(isba_grid_t
),
INTENT(INOUT) :: ig
68 TYPE(isba_t
),
INTENT(INOUT) :: i
71 CHARACTER(LEN=6),
INTENT(IN) :: hprogram
72 INTEGER,
INTENT(IN) :: ki
73 REAL,
DIMENSION(KI),
INTENT(IN) :: pcon_rain
74 REAL,
DIMENSION(KI),
INTENT(IN) :: pstrat_rain
75 REAL,
DIMENSION(KI),
INTENT(IN) :: pcon_snow
76 REAL,
DIMENSION(KI),
INTENT(IN) :: pstrat_snow
77 REAL,
DIMENSION(KI),
INTENT(IN) :: pclouds
78 REAL,
DIMENSION(KI),
INTENT(IN) :: plsm
79 REAL,
DIMENSION(KI),
INTENT(IN) :: pevaptr
80 REAL,
DIMENSION(KI),
INTENT(IN) :: pevap
81 REAL,
DIMENSION(KI),
INTENT(IN) :: pswec
82 REAL,
DIMENSION(KI),
INTENT(IN) :: ptsc
83 REAL,
DIMENSION(KI),
INTENT(IN) :: pucls
84 REAL,
DIMENSION(KI),
INTENT(IN) :: pvcls
85 REAL,
DIMENSION(KI),
INTENT(IN) :: pts
86 REAL,
DIMENSION(KI),
INTENT(IN) :: pt2m
87 REAL,
DIMENSION(KI),
INTENT(IN) :: phu2m
88 REAL,
DIMENSION(KI),
INTENT(IN) :: pswe
89 CHARACTER(LEN=2),
INTENT(IN) :: htest
90 LOGICAL,
DIMENSION (KI),
INTENT(IN) :: od_maskext
91 REAL(KIND=JPRB),
DIMENSION (:),
INTENT(IN) :: plon_in
92 REAL(KIND=JPRB),
DIMENSION (:),
INTENT(IN) :: plat_in
98 LOGICAL,
DIMENSION(:),
ALLOCATABLE :: ginterp_nature
99 LOGICAL,
DIMENSION(:),
ALLOCATABLE :: ginterp_sn
100 REAL,
DIMENSION(:),
ALLOCATABLE :: zts_ep,zts_ep0
101 REAL,
DIMENSION(:),
ALLOCATABLE :: ztp_ep,ztp_ep0
102 REAL,
DIMENSION(:),
ALLOCATABLE :: zws_ep,zws_ep0
103 REAL,
DIMENSION(:),
ALLOCATABLE :: zwp_ep,zwp_ep0
104 REAL,
DIMENSION(:),
ALLOCATABLE :: ztl_ep,ztl_ep0
105 REAL,
DIMENSION(:),
ALLOCATABLE :: zswe_ep,zswe_ep0
106 REAL,
DIMENSION(:),
ALLOCATABLE :: zsnr_ep,zsnr_ep0
107 REAL,
DIMENSION(:),
ALLOCATABLE :: zsna_ep,zsna_ep0
108 REAL,
DIMENSION(KI) :: zswe
109 REAL,
DIMENSION(KI) :: zswe_orig
111 REAL(KIND=JPRB) :: zhook_handle
113 IF (lhook) CALL dr_hook(
'ASSIM_ISBA_N',0,zhook_handle)
115 IF (htest/=
'OK')
THEN
116 CALL
abor1_sfx(
'ASSIM_ISBA_n: FATAL ERROR DURING ARGUMENT TRANSFER')
126 IF ( cassim_isba /=
'OI ' )
THEN
130 IF (nrank==npio)
WRITE(*,*)
'UPDATE SNOW FROM ANALYSED VALUES'
132 hprogram,ki,zswe,zswe_orig,.true.,.true.,htest)
134 IF (nrank==npio)
WRITE(*,*)
'SNOW IS NOT UPDATED FROM ANALYSED VALUES'
139 IF ( cassim_isba ==
'EKF ' )
THEN
143 hprogram, ki, pt2m, phu2m, htest)
145 ELSEIF ( cassim_isba ==
'ENKF ')
THEN
149 ELSEIF ( cassim_isba ==
'OI ' )
THEN
153 IF (nrank==npio)
WRITE(*,*)
'UPDATE SNOW FROM ANALYSED VALUES'
155 hprogram,ki,zswe,zswe_orig,.true.,.false.,htest)
157 IF (nrank==npio)
WRITE(*,*)
'SNOW IS NOT UPDATED FROM ANALYSED VALUES'
163 pcon_rain, pstrat_rain, pcon_snow, pstrat_snow,&
164 pclouds, plsm, pevaptr, pevap, &
165 pswec, ptsc, pucls, pvcls, &
166 pts, pt2m, phu2m, zswe, &
167 htest, od_maskext, plon_in, plat_in )
171 IF (nrank==npio)
WRITE(*,*)
'UPDATE SNOW FROM ANALYSED OI_CACSTS VALUES'
173 hprogram,ki,zswe,zswe_orig,.false.,.true.,htest)
175 IF (nrank==npio)
WRITE(*,*)
'SNOW IS NOT UPDATED FROM ANALYSED OI_CACSTS VALUES'
179 CALL
abor1_sfx(cassim_isba//
' is not a defined scheme for ASSIM_ISBA_N')
183 IF ( lextrap_nature )
THEN
185 ALLOCATE(zws_ep(ki),zwp_ep(ki),zts_ep(ki),ztp_ep(ki),&
186 ztl_ep(ki),zswe_ep(ki),zsnr_ep(ki),zsna_ep(ki))
188 zws_ep = i%XWG(:,1,jp)
189 zwp_ep = i%XWG(:,2,jp)
190 zts_ep = i%XTG(:,1,jp)
191 ztp_ep = i%XTG(:,2,jp)
192 ztl_ep = i%XWGI(:,2,jp)
193 zswe_ep = i%TSNOW%WSNOW(:,jl,jp)
194 zsnr_ep = i%TSNOW%RHO (:,jl,jp)
195 zsna_ep = i%TSNOW%ALB (:, jp)
197 ALLOCATE(ginterp_nature(ki),ginterp_sn(ki))
202 ginterp_nature = .false.
207 WHERE ( zswe_ep(:) < 1.0e-10 .AND. pswe(:)>= 1.0e-10 )
208 ginterp_sn(:) = .true.
214 WHERE ( plsm(:) < 0.5 )
215 ginterp_nature(:) = .true.
216 ginterp_sn(:) = .true.
227 ALLOCATE(zws_ep0(ki),zwp_ep0(ki),zts_ep0(ki),ztp_ep0(ki),&
228 ztl_ep0(ki),zswe_ep0(ki),zsnr_ep0(ki),zsna_ep0(ki))
230 zws_ep0(:) = zws_ep(:)
232 zwp_ep0(:) = zwp_ep(:)
234 zts_ep0(:) = zts_ep(:)
235 CALL
oi_hor_extrapol_surf(ki,ig%XLAT,ig%XLON,zts_ep0,ig%XLAT,ig%XLON,zts_ep,ginterp_nature,i%XZS)
236 ztp_ep0(:) = ztp_ep(:)
237 CALL
oi_hor_extrapol_surf(ki,ig%XLAT,ig%XLON,ztp_ep0,ig%XLAT,ig%XLON,ztp_ep,ginterp_nature,i%XZS)
238 ztl_ep0(:) = ztl_ep(:)
240 zswe_ep0(:) = zswe_ep(:)
242 zsnr_ep0(:) = zsnr_ep(:)
244 zsna_ep0(:) = zsna_ep(:)
247 DEALLOCATE(zws_ep0,zwp_ep0,zts_ep0,ztp_ep0,ztl_ep0,zswe_ep0,zsnr_ep0,zsna_ep0)
250 IF ( nprintlev > 2 )
THEN
252 IF (ginterp_nature(ji))
THEN
253 print *,
'Surface temperature set to ',zts_ep(ji),
'from nearest neighbour at I=',u%NR_NATURE(ji)
258 DEALLOCATE(ginterp_nature,ginterp_sn)
261 i%XWG (:,1,jp) = zws_ep(:)
262 i%XWG (:,2,jp) = zwp_ep(:)
263 i%XTG (:,1,jp) = zts_ep(:)
264 i%XTG (:,2,jp) = ztp_ep(:)
265 i%XWGI(:,2,jp) = ztl_ep(:)
266 i%TSNOW%WSNOW(:,jl,jp) = zswe_ep(:)
267 i%TSNOW%RHO (:,jl,jp) = zsnr_ep(:)
268 i%TSNOW%ALB (:, jp) = zsna_ep(:)
270 DEALLOCATE(zws_ep,zwp_ep,zts_ep,ztp_ep,ztl_ep,zswe_ep,zsnr_ep,zsna_ep)
278 WHERE( i%TSNOW%WSNOW(:,jl,jp) < 1.0e-10 ) i%TSNOW%WSNOW(:,jl,jp) = 0.0
281 WHERE ( i%TSNOW%WSNOW(:,jl,jp) == 0.0 )
282 i%TSNOW%RHO(:,jl,jp) = xundef
283 i%TSNOW%ALB(:,jp) = xundef
291 IF (lhook) CALL dr_hook(
'ASSIM_ISBA_N',1,zhook_handle)
subroutine average_diag_misc_isba_n(DGMI, I)
subroutine assim_nature_isba_ekf(I, HPROGRAM, KI, PT2M, PHU2M, HTEST)
subroutine abor1_sfx(YTEXT)
subroutine assim_isba_update_snow(I, HPROGRAM, KI, PSWE, PSWE_ORIG, OINITSNOW, OINC, HTEST)
subroutine assim_nature_isba_enkf(I, HPROGRAM, KI, PT2M, PHU2M, HTEST)
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)
subroutine assim_isba_n(DGMI, IG, I, U, HPROGRAM, KI, PCON_RAIN, PSTRAT_RAIN, PCON_SNOW, PSTRAT_SNOW, PCLOUDS, PLSM, PEVAPTR, PEVAP, PSWEC, PTSC, PUCLS, PVCLS, PTS, PT2M, PHU2M, PSWE, HTEST, OD_MASKEXT, PLON_IN, PLAT_IN)