30 USE modd_prep, ONLY : xlat_out, xlon_out, linterp
31 USE modd_grid_gauss, ONLY : xila1, xilo1, xila2, xilo2, ninla, ninlo, nilen, lrotpole, &
39 USE yomhook
,ONLY : lhook, dr_hook
40 USE parkind1
,ONLY : jprb
46 INTEGER,
INTENT(IN) :: kluout
47 REAL,
DIMENSION(:,:),
INTENT(IN) :: pfieldin
48 REAL,
DIMENSION(:,:),
INTENT(OUT) :: pfieldout
52 REAL,
DIMENSION(:),
ALLOCATABLE :: zlat
53 REAL,
DIMENSION(:),
ALLOCATABLE :: zlon
54 INTEGER,
DIMENSION(:),
ALLOCATABLE :: imaskin
55 INTEGER,
DIMENSION(:),
ALLOCATABLE :: imaskout
58 REAL(KIND=JPRB) :: zhook_handle
64 IF (lhook) CALL dr_hook(
'HOR_INTERPOL_GAUSS',0,zhook_handle)
68 ALLOCATE(imaskin(nni))
72 ALLOCATE(imaskout(ino))
87 DO jl=1,
SIZE(pfieldin,2)
90 WHERE(pfieldin(:,jl)==xundef) imaskin = 0.
95 CALL
horibl_surf(xila1,xilo1,xila2,xilo2,ninla,ninlo,nni,pfieldin(:,jl),ino,zlon,zlat,pfieldout(:,jl), &
96 .false.,kluout,linterp,imaskin,imaskout)
109 IF (lhook) CALL dr_hook(
'HOR_INTERPOL_GAUSS',1,zhook_handle)
172 INTEGER,
INTENT(IN) :: kn
173 REAL,
INTENT(IN) :: plap
174 REAL,
INTENT(IN) :: plop
175 REAL,
INTENT(IN) :: pcoef
176 REAL,
DIMENSION(KN),
INTENT(IN) :: plar
177 REAL,
DIMENSION(KN),
INTENT(IN) :: plor
178 REAL,
DIMENSION(KN),
INTENT(OUT) :: plac
179 REAL,
DIMENSION(KN),
INTENT(OUT) :: ploc
181 REAL :: zsinstretchla
182 REAL :: zsinstretchlo
183 REAL :: zcosstretchla
184 REAL :: zcosstretchlo
196 REAL(KIND=JPRB) :: zhook_handle
198 IF (lhook) CALL dr_hook(
'ARPEGE_STRETCH_A',0,zhook_handle)
199 zsinstretchla = sin(plap*xpi/180.)
200 zcosstretchla = cos(plap*xpi/180.)
201 zsinstretchlo = sin(plop*xpi/180.)
202 zcosstretchlo = cos(plop*xpi/180.)
206 plac(:) = plar(:) * xpi / 180.
207 ploc(:) = plor(:) * xpi / 180.
209 za = 1. + pcoef*pcoef
211 zb = 1. - pcoef*pcoef
213 zsinla = sin(plac(jloop1))
214 zcosla = cos(plac(jloop1))
215 zsinlo = sin(ploc(jloop1))
216 zcoslo = cos(ploc(jloop1))
218 zx = zcoslo*zcosstretchlo + zsinlo*zsinstretchlo
220 zy = zsinstretchlo*zcoslo - zsinlo*zcosstretchlo
222 zd = za + zb*(zsinstretchla*zsinla+zcosstretchla*zcosla*zx)
226 zsinlas = (zb + za*(zsinstretchla*zsinla+zcosstretchla*zcosla*zx)) / zd
228 zd = zd * (amax1(1e-6,sqrt(1.-zsinlas*zsinlas)))
232 zcoslos = 2.*pcoef*(zcosstretchla*zsinla-zsinstretchla*zcosla*zx) / zd
236 zsinlos = 2.*pcoef*(zcosla*zy) / zd
238 zsinlas = max(zsinlas,-1.)
239 zsinlas = min(zsinlas, 1.)
240 zcoslos = max(zcoslos,-1.)
241 zcoslos = min(zcoslos, 1.)
243 plac(jloop1) = asin(zsinlas)
245 ploc(jloop1) = acos(zcoslos)
247 ploc(jloop1) = -acos(zcoslos)
250 ploc(:) = ploc(:) * 180. / xpi
251 plac(:) = plac(:) * 180. / xpi
252 IF (lhook) CALL dr_hook(
'ARPEGE_STRETCH_A',1,zhook_handle)
subroutine horibl_surf(PILA1, PILO1, PILA2, PILO2, KINLA, KINLO, KILEN, PARIN, KOLEN, PXOUT, PYOUT, PAROUT, ODVECT, KLUOUT, OINTERP, KLSMIN, KLSMOUT)
subroutine hor_interpol_gauss(KLUOUT, PFIELDIN, PFIELDOUT)
subroutine arpege_stretch_a(KN, PLAP, PLOP, PCOEF, PLAR, PLOR, PLAC, PLOC)