112 INTEGER,
INTENT(IN) :: KOLEN
113 LOGICAL,
DIMENSION(:),
INTENT(IN) :: OINTERP
115 LOGICAL,
INTENT(IN) :: OGLOBLON
116 REAL,
INTENT(IN) :: PILO1
117 REAL,
INTENT(IN) :: PILO2
118 REAL,
DIMENSION(:),
INTENT(IN) :: POLO
119 INTEGER,
DIMENSION(:,:),
INTENT(IN) :: KO
121 INTEGER,
DIMENSION(:),
INTENT(IN) :: KINLO
124 INTEGER,
DIMENSION(:,:),
INTENT(OUT) :: KP
126 REAL,
DIMENSION(:,:),
INTENT(OUT) :: PLOP
132 INTEGER,
DIMENSION(:),
ALLOCATABLE :: IOFS
135 INTEGER :: JL, IS1, IS2, JI
136 REAL(KIND=JPRB) :: ZHOOK_HANDLE
142 IF (
lhook)
CALL dr_hook(
'HORIBL_SURF_COEF',0,zhook_handle)
150 ALLOCATE (iofs(iinla))
152 IF (ogloblon) iofs(1)=iofs(1)+2
154 iofs(jl) = iofs(jl-1) + kinlo(jl-1)
155 IF (ogloblon) iofs(jl) = iofs(jl) + 4
160 IF (.NOT. ointerp(jl)) cycle
163 zidlo = (pilo2 - pilo1) / (kinlo(ko(jl,1)))
164 kp(jl,1) = int((polo(jl) - pilo1) / zidlo)
165 kp(jl,2) = kp(jl,1) + 1
166 IF (.NOT.ogloblon) kp(jl,2) = min(kinlo(ko(jl,1))-1, kp(jl,2))
167 plop(jl,1) = pilo1 + kp(jl,1) * zidlo
168 plop(jl,2) = plop(jl,1) + zidlo
171 zidlo = (pilo2 - pilo1) / (kinlo(ko(jl,2) ))
172 kp(jl,4) = int((polo(jl) - pilo1) / zidlo)
173 kp(jl,3) = kp(jl,4) - 1
174 kp(jl,5) = kp(jl,4) + 1
175 kp(jl,6) = kp(jl,4) + 2
176 IF (.NOT.ogloblon)
THEN 177 kp(jl,3) = max(0,kp(jl,3))
178 kp(jl,5:6) = min(kinlo(ko(jl,2))-1,kp(jl,5:6))
180 plop(jl,4) = pilo1 + kp(jl,4) * zidlo
181 plop(jl,3) = plop(jl,4) - zidlo
182 plop(jl,5) = plop(jl,4) + zidlo
183 plop(jl,6) = plop(jl,4) + 2*zidlo
186 zidlo = (pilo2 - pilo1) / (kinlo(ko(jl,3) ))
187 kp(jl,8) = int((polo(jl) - pilo1) / zidlo)
188 kp(jl,7) = kp(jl,8) - 1
189 kp(jl,9) = kp(jl,8) + 1
190 kp(jl,10) = kp(jl,8) + 2
191 IF (.NOT.ogloblon)
THEN 192 kp(jl,7) = max(0,kp(jl,7))
193 kp(jl,9:10) = min(kinlo(ko(jl,3))-1,kp(jl,9:10))
195 plop(jl,8) = pilo1 + kp(jl,8) * zidlo
196 plop(jl,7) = plop(jl,8) - zidlo
197 plop(jl,9) = plop(jl,8) + zidlo
198 plop(jl,10) = plop(jl,8) + 2*zidlo
201 zidlo = (pilo2 - pilo1) / (kinlo(ko(jl,4)))
202 kp(jl,11) = int((polo(jl) - pilo1) / zidlo)
203 kp(jl,12) = kp(jl,11) + 1
204 IF (.NOT.ogloblon) kp(jl,12) = min(kinlo(ko(jl,4))-1,kp(jl,12))
205 plop(jl,11) = pilo1 + kp(jl,11) * zidlo
206 plop(jl,12) = plop(jl,11) + zidlo
217 IF ((kp(jl,1) <is1) .OR. (kp(jl,2) >kinlo(ko(jl,1))+is2) .OR. &
218 (kp(jl,3) <is1) .OR. (kp(jl,6) >kinlo(ko(jl,2))+is2) .OR. &
219 (kp(jl,7) <is1) .OR. (kp(jl,10)>kinlo(ko(jl,3))+is2) .OR. &
220 (kp(jl,11)<is1) .OR. (kp(jl,12)>kinlo(ko(jl,4))+is2))
THEN 221 CALL abor1_sfx(
'HORIBLE_SURF: INPUT DOMAIN SMALLER THAN OUTPUT ONE - LONGITUDE GLOBAL')
225 kp(jl,1:2) = kp(jl,1:2) + iofs(ko(jl,1))
226 kp(jl,3:6) = kp(jl,3:6) + iofs(ko(jl,2))
227 kp(jl,7:10) = kp(jl,7:10) + iofs(ko(jl,3))
228 kp(jl,11:12)= kp(jl,11:12) + iofs(ko(jl,4))
233 IF (
lhook)
CALL dr_hook(
'HORIBL_SURF_COEF',1,zhook_handle)
subroutine horibl_surf_coef(KOLEN, OINTERP, OGLOBLON, PILO1, PILO2, POLO, KO, KINLO, KP, PLOP)
subroutine abor1_sfx(YTEXT)