39 USE modi_regrot_lonlat_rot
42 USE yomhook
,ONLY : lhook, dr_hook
43 USE parkind1
,ONLY : jprb
49 INTEGER,
INTENT(IN) :: kluout
50 REAL,
DIMENSION(:,:),
INTENT(IN) :: pfieldin
51 REAL,
DIMENSION(:,:),
INTENT(OUT) :: pfieldout
56 INTEGER,
ALLOCATABLE :: ii(:),jj(:)
58 REAL,
ALLOCATABLE :: xlat_ind(:),xlon_ind(:), &
59 xrat_out(:),xron_out(:), &
63 LOGICAL,
ALLOCATABLE :: lmask(:)
65 INTEGER :: i,j,k,l,ij,ij00,ij01,ij10,ij11,ino,jl
67 REAL(KIND=JPRB) :: zhook_handle
70 IF (lhook) CALL dr_hook(
'HOR_INTERPOL_ROTLATLON',0,zhook_handle)
71 WRITE(kluout,
'(A)')
' | Running rotated latlon interpolation'
78 ALLOCATE(xrat_out(ino), &
93 WRITE(kluout,*)
'XLAT_OUT',xlat_out(10:10)
94 WRITE(kluout,*)
'XLON_OUT',xlon_out(10:10)
101 WRITE(kluout,*)
'XRAT_OUT',xrat_out(10:10)
102 WRITE(kluout,*)
'XRON_OUT',xron_out(10:10)
105 xlat_ind(ij) = ( xrat_out(ij) - xrila1) / xrdy + 1.
106 xlon_ind(ij) = ( xron_out(ij) - xrilo1) / xrdx + 1.
109 pfieldout(:,:) = xundef
111 DO jl=1,
SIZE(pfieldin,2)
114 WHERE ( abs(pfieldin(:,jl)-xundef) < 1.e-6 ) lmask = .false.
118 ii(ij) = int(xlon_ind(ij))
119 jj(ij) = int(xlat_ind(ij))
121 wx = xlon_ind(ij) - float(ii(ij))
122 wy = xlat_ind(ij) - float(jj(ij))
124 w00(ij) = (1.-wx)*(1.-wy)
125 w01(ij) = (1.-wx)* wy
126 w10(ij) = wx *(1.-wy)
131 ij00 = k + nrx*(l -1)
132 ij01 = k + nrx*(l+1 -1)
133 ij10 = k+1 + nrx*(l -1)
134 ij11 = k+1 + nrx*(l+1 -1)
136 IF (.NOT. lmask(ij00)) w00(ij) = 0.
137 IF (.NOT. lmask(ij01)) w01(ij) = 0.
138 IF (.NOT. lmask(ij10)) w10(ij) = 0.
139 IF (.NOT. lmask(ij11)) w11(ij) = 0.
141 wsum = w00(ij) + w01(ij) + &
144 IF ( abs(wsum) < 1.e-6 ) cycle
146 w00(ij) = w00(ij) / wsum
147 w01(ij) = w01(ij) / wsum
148 w10(ij) = w10(ij) / wsum
149 w11(ij) = w11(ij) / wsum
157 WRITE(kluout,*)
'NRX,NRY',nrx,nry
163 ij00 = k + nrx*(l -1)
164 ij01 = k + nrx*(l+1 -1)
165 ij10 = k+1 + nrx*(l -1)
166 ij11 = k+1 + nrx*(l+1 -1)
168 WRITE(kluout,*)pfieldin(ij00,jl)
170 pfieldout(ij,jl) = w00(ij)*pfieldin(ij00,jl) + &
171 w01(ij)*pfieldin(ij01,jl) + &
172 w10(ij)*pfieldin(ij10,jl) + &
173 w11(ij)*pfieldin(ij11,jl)
182 DEALLOCATE(xrat_out,xron_out, &
188 IF (lhook) CALL dr_hook(
'HOR_INTERPOL_ROTLATLON',1,zhook_handle)
subroutine regrot_lonlat_rot(PXREG, PYREG, PXROT, PYROT, KXDIM, KYDIM, KX, KY, PXCEN, PYCEN, KCALL)
subroutine hor_interpol_rotlatlon(KLUOUT, PFIELDIN, PFIELDOUT)