7 hprogram,ki,pts_in,pitm,htest, &
8 olkeepextzone,od_maskext,plon_in,plat_in)
41 USE modd_assim, ONLY : nprintlev,lextrap_water,lwatertg2
43 USE yomhook
, ONLY : lhook,dr_hook
44 USE parkind1
, ONLY : jprb
47 USE modi_oi_hor_extrapol_surf
54 TYPE(isba_t
),
INTENT(INOUT) :: i
58 CHARACTER(LEN=6),
INTENT(IN) :: hprogram
59 INTEGER,
INTENT(IN) :: ki
60 REAL,
DIMENSION(KI),
INTENT(IN) :: pts_in
61 REAL,
DIMENSION(KI),
INTENT(IN) :: pitm
62 CHARACTER(LEN=2),
INTENT(IN) :: htest
63 LOGICAL,
INTENT(IN) :: olkeepextzone
64 LOGICAL,
DIMENSION(KI),
INTENT(IN) :: od_maskext
65 REAL(KIND=JPRB),
DIMENSION (:),
INTENT(IN) :: plon_in
66 REAL(KIND=JPRB),
DIMENSION (:),
INTENT(IN) :: plat_in
72 REAL,
DIMENSION(KI) :: zlst
73 REAL,
DIMENSION(KI) :: zlst0
74 REAL,
DIMENSION(KI) :: zlstinc
75 REAL,
DIMENSION(:),
ALLOCATABLE :: zlst01, zlst1, zlon1, zlat1, zalt1
77 LOGICAL,
DIMENSION(KI) :: ginterp_lst
78 LOGICAL,
DIMENSION(:),
ALLOCATABLE :: ginterp_lst1
79 INTEGER :: iresp,ji,jj,is1,j1
80 REAL(KIND=JPRB) :: zhook_handle
82 IF (lhook) CALL dr_hook(
'ASSIM_INLAND_WATER_N',0,zhook_handle)
85 CALL
abor1_sfx(
'ASSIM_INLAND_WATER_n: FATAL ERROR DURING ARGUMENT TRANSFER')
88 IF (nrank==npio)
WRITE(*,*)
'UPDATING LST FOR INLAND_WATER: ',trim(u%CWATER)
89 IF (u%CWATER==
"NONE")
THEN
90 IF (lhook) CALL dr_hook(
'ASSIM_INLAND_WATER_N',1,zhook_handle)
97 IF (.NOT.lwatertg2 )
THEN
100 IF ( pitm(ji)<0.5 ) zlst(ji) = pts_in(ji)
106 IF ( pitm(ji)>0.5 )
THEN
108 DO jj=1,u%NSIZE_NATURE
109 IF ( u%NR_WATER(ji)==u%NR_NATURE(jj) )
THEN
110 zlst(ji) = i%XTG(jj,2,1)
120 ginterp_lst(:) = .false.
122 IF ( zlst(ji)/=xundef )
THEN
124 ELSEIF ( lextrap_water )
THEN
127 ginterp_lst(ji) = .true.
129 zlst0(ji) = w%XTS(ji)
133 IF ( lextrap_water )
THEN
135 IF (olkeepextzone)
THEN
138 WHERE ( od_maskext(:) ) zlst0(:) = xundef
143 is1 = count(.NOT.od_maskext)
144 ALLOCATE (zlst1(is1), zlst01(is1), zlat1(is1), zlon1(is1), zalt1(is1), ginterp_lst1(is1))
149 IF ( .NOT.od_maskext(j1) )
THEN
150 zlst01(jj) = zlst0(j1)
151 zlat1(jj) = plat_in(j1)
152 zlon1(jj) = plon_in(j1)
153 zalt1(jj) = w%XZS (j1)
154 ginterp_lst1(jj) = ginterp_lst(j1)
165 IF ( .NOT.od_maskext(j1) )
THEN
171 DEALLOCATE (zlst01, zlst1, zlat1, zlon1, zalt1, ginterp_lst1)
178 IF ( nprintlev > 2 )
THEN
180 IF (ginterp_lst(ji))
THEN
181 print *,
'Lake surface temperature set to ',zlst(ji),
'from nearest neighbour at I=',u%NR_WATER(ji)
187 IF (all(zlst(:)/=xundef))
THEN
188 zlstinc(:) = zlst(:) - w%XTS(:)
195 WRITE(*,*)
'Mean LST increments over inland water ',sum(zlstinc)/ki
197 IF (lhook) CALL dr_hook(
'ASSIM_INLAND_WATER_N',1,zhook_handle)
subroutine abor1_sfx(YTEXT)
subroutine assim_inland_water_n(I, U, W, HPROGRAM, KI, PTS_IN, PITM, HTEST, OLKEEPEXTZONE, OD_MASKEXT, PLON_IN, PLAT_IN)