30 type(horiz_interp_type),
intent(inout) :: Interp
35 real(FMS_HI_KIND_),
intent(in),
dimension(:) :: lon_in
36 real(FMS_HI_KIND_),
intent(in),
dimension(:) :: lat_in
37 real(FMS_HI_KIND_),
intent(in),
dimension(:,:) :: lon_out
38 real(FMS_HI_KIND_),
intent(in),
dimension(:,:) :: lat_out
39 integer,
intent(in),
optional :: verbose
40 logical,
intent(in),
optional :: src_modulo
43 integer :: i, j, ip1, im1, jp1, jm1
44 logical :: src_is_modulo
45 integer :: nlon_in, nlat_in, nlon_out, nlat_out
46 integer :: jcl, jcu, icl, icu, jj
47 real(FMS_HI_KIND_) :: xz, yz
49 integer,
parameter :: kindl = fms_hi_kind_
51 if(
present(verbose)) verbose_bicubic = verbose
52 src_is_modulo = .false.
53 if (
present(src_modulo)) src_is_modulo = src_modulo
55 if(
size(lon_out,1) /=
size(lat_out,1) .or.
size(lon_out,2) /=
size(lat_out,2) ) &
56 call mpp_error(fatal,
'horiz_interp_bilinear_mod: when using bilinear ' // &
57 'interplation, the output grids should be geographical grids')
60 nlon_in =
size(lon_in) ; nlat_in =
size(lat_in)
61 nlon_out =
size(lon_out,1); nlat_out =
size(lat_out,2)
62 interp%nlon_src = nlon_in; interp%nlat_src = nlat_in
63 interp%nlon_dst = nlon_out; interp%nlat_dst = nlat_out
65 allocate ( interp%HI_KIND_TYPE_%wti (nlon_in, nlat_in, 3) )
66 allocate ( interp%HI_KIND_TYPE_%lon_in (nlon_in) )
67 allocate ( interp%HI_KIND_TYPE_%lat_in (nlat_in) )
68 allocate ( interp%HI_KIND_TYPE_%rat_x (nlon_out, nlat_out) )
69 allocate ( interp%HI_KIND_TYPE_%rat_y (nlon_out, nlat_out) )
70 allocate ( interp%i_lon (nlon_out, nlat_out, 2) )
71 allocate ( interp%j_lat (nlon_out, nlat_out, 2) )
73 interp%HI_KIND_TYPE_%lon_in = lon_in
74 interp%HI_KIND_TYPE_%lat_in = lat_in
76 if ( verbose_bicubic > 0 )
then
78 write (iunit,
'(/,"Initialising bicubic interpolation, interface horiz_interp_bicubic_new_1d_s")')
79 write (iunit,
'(/," Longitude of coarse grid points (radian): xc(i) i=1, ",i4)') interp%nlon_src
80 write (iunit,
'(1x,10f10.4)') (interp%HI_KIND_TYPE_%lon_in(jj),jj=1,interp%nlon_src)
81 write (iunit,
'(/," Latitude of coarse grid points (radian): yc(j) j=1, ",i4)') interp%nlat_src
82 write (iunit,
'(1x,10f10.4)') (interp%HI_KIND_TYPE_%lat_in(jj),jj=1,interp%nlat_src)
83 do i=1, interp%nlat_dst
85 write (iunit,
'(/," Longitude of fine grid points (radian): xf(i) i=1, ",i4)') interp%nlat_dst
86 write (iunit,
'(1x,10f10.4)') (lon_out(jj,i),jj=1,interp%nlon_dst)
88 do i=1, interp%nlon_dst
90 write (iunit,
'(/," Latitude of fine grid points (radian): yf(j) j=1, ",i4)') interp%nlon_dst
91 write (iunit,
'(1x,10f10.4)') (lat_out(i,jj),jj=1,interp%nlat_dst)
104 interp%HI_KIND_TYPE_%wti(i,j,1) = 1.0_kindl/(interp%HI_KIND_TYPE_%lon_in(ip1)-interp%HI_KIND_TYPE_%lon_in(im1))
117 interp%HI_KIND_TYPE_%wti(i,j,2) =1.0_kindl/(interp%HI_KIND_TYPE_%lat_in(jp1)-interp%HI_KIND_TYPE_%lat_in(jm1))
131 interp%HI_KIND_TYPE_%wti(i,j,3) = 1.0_kindl / &
132 ((interp%HI_KIND_TYPE_%lon_in(ip1)-interp%HI_KIND_TYPE_%lon_in(im1)) * &
133 (interp%HI_KIND_TYPE_%lat_in(jp1)-interp%HI_KIND_TYPE_%lat_in(jm1)))
146 if( yz .le. interp%HI_KIND_TYPE_%lat_in(1) )
then
149 else if( yz .ge. interp%HI_KIND_TYPE_%lat_in(nlat_in) )
then
153 jcl = indl(interp%HI_KIND_TYPE_%lat_in, yz)
154 jcu = indu(interp%HI_KIND_TYPE_%lat_in, yz)
160 if( xz .gt. interp%HI_KIND_TYPE_%lon_in(nlon_in) ) xz = xz - real(tpi,fms_hi_kind_)
161 if( xz .le. interp%HI_KIND_TYPE_%lon_in(1) ) xz = xz + real(tpi,fms_hi_kind_)
162 if( xz .ge. interp%HI_KIND_TYPE_%lon_in(nlon_in) )
then
165 interp%HI_KIND_TYPE_%rat_x(i,j) = (xz - interp%HI_KIND_TYPE_%lon_in(icl))/(interp%HI_KIND_TYPE_%lon_in(icu)&
166 & - interp%HI_KIND_TYPE_%lon_in(icl) + real(tpi,fms_hi_kind_))
168 icl = indl(interp%HI_KIND_TYPE_%lon_in, xz)
169 icu = indu(interp%HI_KIND_TYPE_%lon_in, xz)
170 interp%HI_KIND_TYPE_%rat_x(i,j) = (xz - interp%HI_KIND_TYPE_%lon_in(icl))/(interp%HI_KIND_TYPE_%lon_in(icu)&
171 & - interp%HI_KIND_TYPE_%lon_in(icl))
173 interp%j_lat(i,j,1) = jcl
174 interp%j_lat(i,j,2) = jcu
175 interp%i_lon(i,j,1) = icl
176 interp%i_lon(i,j,2) = icu
178 interp%HI_KIND_TYPE_%rat_y(i,j) = 0.0_kindl
180 interp%HI_KIND_TYPE_%rat_y(i,j) = (yz-interp%HI_KIND_TYPE_%lat_in(jcl))/(interp%HI_KIND_TYPE_%lat_in(jcu)&
181 & - interp%HI_KIND_TYPE_%lat_in(jcl))
193 interp% HI_KIND_TYPE_ % is_allocated = .true.
194 interp%interp_method = bicubic
202 verbose, src_modulo )
205 type(horiz_interp_type),
intent(inout) :: Interp
206 real(FMS_HI_KIND_),
intent(in),
dimension(:) :: lon_in , lat_in
207 real(FMS_HI_KIND_),
intent(in),
dimension(:) :: lon_out, lat_out
208 integer,
intent(in),
optional :: verbose
209 logical,
intent(in),
optional :: src_modulo
210 integer :: i, j, ip1, im1, jp1, jm1
211 logical :: src_is_modulo
212 integer :: nlon_in, nlat_in, nlon_out, nlat_out
213 integer :: jcl, jcu, icl, icu, jj
214 real(FMS_HI_KIND_) :: xz, yz
216 integer,
parameter :: kindl = fms_hi_kind_
218 if(
present(verbose)) verbose_bicubic = verbose
219 src_is_modulo = .false.
220 if (
present(src_modulo)) src_is_modulo = src_modulo
223 nlon_in =
size(lon_in) ; nlat_in =
size(lat_in)
224 nlon_out =
size(lon_out); nlat_out =
size(lat_out)
225 interp%nlon_src = nlon_in; interp%nlat_src = nlat_in
226 interp%nlon_dst = nlon_out; interp%nlat_dst = nlat_out
227 allocate ( interp%HI_KIND_TYPE_%wti (nlon_in, nlat_in, 3) )
228 allocate ( interp%HI_KIND_TYPE_%lon_in (nlon_in) )
229 allocate ( interp%HI_KIND_TYPE_%lat_in (nlat_in) )
230 allocate ( interp%HI_KIND_TYPE_%rat_x (nlon_out, nlat_out) )
231 allocate ( interp%HI_KIND_TYPE_%rat_y (nlon_out, nlat_out) )
232 allocate ( interp%i_lon (nlon_out, nlat_out, 2) )
233 allocate ( interp%j_lat (nlon_out, nlat_out, 2) )
235 interp%HI_KIND_TYPE_%lon_in = lon_in
236 interp%HI_KIND_TYPE_%lat_in = lat_in
238 if ( verbose_bicubic > 0 )
then
240 write (iunit,
'(/,"Initialising bicubic interpolation, interface HORIZ_INTERP_BICUBIC_NEW_1D_")')
241 write (iunit,
'(/," Longitude of coarse grid points (radian): xc(i) i=1, ",i4)') interp%nlon_src
242 write (iunit,
'(1x,10f10.4)') (interp%HI_KIND_TYPE_%lon_in(jj),jj=1,interp%nlon_src)
243 write (iunit,
'(/," Latitude of coarse grid points (radian): yc(j) j=1, ",i4)') interp%nlat_src
244 write (iunit,
'(1x,10f10.4)') (interp%HI_KIND_TYPE_%lat_in(jj),jj=1,interp%nlat_src)
246 write (iunit,
'(/," Longitude of fine grid points (radian): xf(i) i=1, ",i4)') interp%nlat_dst
247 write (iunit,
'(1x,10f10.4)') (lon_out(jj),jj=1,interp%nlon_dst)
248 write (iunit,
'(/," Latitude of fine grid points (radian): yf(j) j=1, ",i4)') interp%nlon_dst
249 write (iunit,
'(1x,10f10.4)') (lat_out(jj),jj=1,interp%nlat_dst)
261 interp%HI_KIND_TYPE_%wti(i,j,1) = 1.0_kindl /(lon_in(ip1)-lon_in(im1))
274 interp%HI_KIND_TYPE_%wti(i,j,2) = 1.0_kindl /(lat_in(jp1)-lat_in(jm1))
288 interp%HI_KIND_TYPE_%wti(i,j,3) = 1.0_kindl /((lon_in(ip1)-lon_in(im1))*(lat_in(jp1)-lat_in(jm1)))
298 if( yz .le. lat_in(1) )
then
301 else if( yz .ge. lat_in(nlat_in) )
then
305 jcl = indl(lat_in, yz)
306 jcu = indu(lat_in, yz)
313 if( xz .gt. lon_in(nlon_in) ) xz = xz - real(tpi,fms_hi_kind_)
314 if( xz .le. lon_in(1) ) xz = xz + real(tpi, fms_hi_kind_)
315 if( xz .ge. lon_in(nlon_in) )
then
318 interp%HI_KIND_TYPE_%rat_x(i,j) = (xz - interp%HI_KIND_TYPE_%lon_in(icl))/(interp%HI_KIND_TYPE_%lon_in(icu)&
319 & - interp%HI_KIND_TYPE_%lon_in(icl) + real(tpi,fms_hi_kind_))
321 icl = indl(lon_in, xz)
322 icu = indu(lon_in, xz)
323 interp%HI_KIND_TYPE_%rat_x(i,j) = (xz - interp%HI_KIND_TYPE_%lon_in(icl))/(interp%HI_KIND_TYPE_%lon_in(icu)&
324 & - interp%HI_KIND_TYPE_%lon_in(icl))
326 icl = indl(lon_in, xz)
327 icu = indu(lon_in, xz)
328 interp%j_lat(i,j,1) = jcl
329 interp%j_lat(i,j,2) = jcu
330 interp%i_lon(i,j,1) = icl
331 interp%i_lon(i,j,2) = icu
333 interp%HI_KIND_TYPE_%rat_y(i,j) = 0.0_kindl
335 interp%HI_KIND_TYPE_%rat_y(i,j) = (yz- interp%HI_KIND_TYPE_%lat_in(jcl))/(interp%HI_KIND_TYPE_%lat_in(jcu)&
336 & - interp%HI_KIND_TYPE_%lat_in(jcl))
348 interp% HI_KIND_TYPE_ % is_allocated = .true.
349 interp%interp_method = bicubic
356 type (horiz_interp_type),
intent(in) :: Interp
357 real(FMS_HI_KIND_),
intent(in),
dimension(:,:) :: data_in
358 real(FMS_HI_KIND_),
intent(out),
dimension(:,:) :: data_out
359 integer,
intent(in),
optional :: verbose
360 real(FMS_HI_KIND_),
intent(in),
dimension(:,:),
optional :: mask_in
361 real(FMS_HI_KIND_),
intent(out),
dimension(:,:),
optional :: mask_out
362 real(FMS_HI_KIND_),
intent(in),
optional :: missing_value
363 integer,
intent(in),
optional :: missing_permit
364 real(FMS_HI_KIND_) :: yz, ycu, ycl
365 real(FMS_HI_KIND_) :: xz, xcu, xcl
366 real(FMS_HI_KIND_) :: val, val1, val2
367 real(FMS_HI_KIND_),
dimension(4) :: y, y1, y2, y12
368 integer :: icl, icu, jcl, jcu
369 integer :: iclp1, icup1, jclp1, jcup1
370 integer :: iclm1, icum1, jclm1, jcum1
372 integer,
parameter :: kindl = fms_hi_kind_
374 if (
present(verbose) ) verbose_bicubic = verbose
376 do j=1, interp%nlat_dst
377 do i=1, interp%nlon_dst
378 yz = interp%HI_KIND_TYPE_%rat_y(i,j)
379 xz = interp%HI_KIND_TYPE_%rat_x(i,j)
380 jcl = interp%j_lat(i,j,1)
381 jcu = interp%j_lat(i,j,2)
382 icl = interp%i_lon(i,j,1)
383 icu = interp%i_lon(i,j,2)
387 xcl = interp%HI_KIND_TYPE_%lon_in(icl)
388 xcu = interp%HI_KIND_TYPE_%lon_in(icu)+real(tpi, fms_hi_kind_)
390 iclp1 = min(icl+1,interp%nlon_src)
392 xcl = interp%HI_KIND_TYPE_%lon_in(icl)
393 xcu = interp%HI_KIND_TYPE_%lon_in(icu)
396 icup1 = min(icu+1,interp%nlon_src)
397 jclp1 = min(jcl+1,interp%nlat_src)
399 jcup1 = min(jcu+1,interp%nlat_src)
401 ycl = interp%HI_KIND_TYPE_%lat_in(jcl)
402 ycu = interp%HI_KIND_TYPE_%lat_in(jcu)
405 y(1) = data_in(icl,jcl)
406 y(2) = data_in(icu,jcl)
407 y(3) = data_in(icu,jcu)
408 y(4) = data_in(icl,jcu)
409 y1(1) = ( data_in(iclp1,jcl) - data_in(iclm1,jcl) ) * interp%HI_KIND_TYPE_%wti(icl,jcl,1)
410 y1(2) = ( data_in(icup1,jcl) - data_in(icum1,jcl) ) * interp%HI_KIND_TYPE_%wti(icu,jcl,1)
411 y1(3) = ( data_in(icup1,jcu) - data_in(icum1,jcu) ) * interp%HI_KIND_TYPE_%wti(icu,jcu,1)
412 y1(4) = ( data_in(iclp1,jcu) - data_in(iclm1,jcu) ) * interp%HI_KIND_TYPE_%wti(icl,jcu,1)
413 y2(1) = ( data_in(icl,jclp1) - data_in(icl,jclm1) ) * interp%HI_KIND_TYPE_%wti(icl,jcl,2)
414 y2(2) = ( data_in(icu,jclp1) - data_in(icu,jclm1) ) * interp%HI_KIND_TYPE_%wti(icu,jcl,2)
415 y2(3) = ( data_in(icu,jcup1) - data_in(icu,jcum1) ) * interp%HI_KIND_TYPE_%wti(icu,jcu,2)
416 y2(4) = ( data_in(icl,jcup1) - data_in(icl,jcum1) ) * interp%HI_KIND_TYPE_%wti(icl,jcu,2)
417 y12(1)= ( data_in(iclp1,jclp1) + data_in(iclm1,jclm1) - data_in(iclm1,jclp1) &
418 - data_in(iclp1,jclm1) ) * interp%HI_KIND_TYPE_%wti(icl,jcl,3)
419 y12(2)= ( data_in(icup1,jclp1) + data_in(icum1,jclm1) - data_in(icum1,jclp1) &
420 - data_in(icup1,jclm1) ) * interp%HI_KIND_TYPE_%wti(icu,jcl,3)
421 y12(3)= ( data_in(icup1,jcup1) + data_in(icum1,jcum1) - data_in(icum1,jcup1) &
422 - data_in(icup1,jcum1) ) * interp%HI_KIND_TYPE_%wti(icu,jcu,3)
423 y12(4)= ( data_in(iclp1,jcup1) + data_in(iclm1,jcum1) - data_in(iclm1,jcup1) &
424 - data_in(iclp1,jcum1) ) * interp%HI_KIND_TYPE_%wti(icl,jcu,3)
426 call bcuint(y,y1,y2,y12,xcl,xcu,ycl,ycu,xz,yz,val,val1,val2)
428 if(
present(mask_out)) mask_out(i,j) = 1.0_kindl
438 subroutine bcuint_(y,y1,y2,y12,x1l,x1u,x2l,x2u,t,u,ansy,ansy1,ansy2)
439 real(FMS_HI_KIND_) ansy,ansy1,ansy2,x1l,x1u,x2l,x2u,y(4),y1(4),y12(4),y2(4)
442 integer,
parameter :: kindl = fms_hi_kind_
443 real(FMS_HI_KIND_) t,u,c(4,4)
444 call bcucof(y,y1,y2,y12,x1u-x1l,x2u-x2l,c)
449 ansy=t*ansy+((c(i,4)*u+c(i,3))*u+c(i,2))*u+c(i,1)
457 end subroutine bcuint_
460 subroutine bcucof_(y,y1,y2,y12,d1,d2,c)
461 real(FMS_HI_KIND_) d1,d2,c(4,4),y(4),y1(4),y12(4),y2(4)
463 real(FMS_HI_KIND_) d1d2,xx,cl(16),x(16)
464 integer,
parameter :: kindl = fms_hi_kind_
466 real(FMS_HI_KIND_),
save,
dimension(16,16) :: wt
467 data wt/1.0_kindl, 0.0_kindl, -3.0_kindl, 2.0_kindl, 4*0.0_kindl, -3.0_kindl, 0.0_kindl, 9.0_kindl, -6.0_kindl, &
468 2.0_kindl, 0.0_kindl, -6.0_kindl, 4.0_kindl, 8*0.0_kindl, 3.0_kindl, 0.0_kindl, -9.0_kindl, 6.0_kindl, &
469 -2.0_kindl, 0.0_kindl, 6.0_kindl, -4.0_kindl, 10*0.0_kindl, 9.0_kindl, -6.0_kindl, 2*0.0_kindl, &
470 -6.0_kindl, 4.0_kindl, 2*0.0_kindl, 3.0_kindl, -2.0_kindl, 6*0.0_kindl, -9.0_kindl, 6.0_kindl, &
471 2*0.0_kindl, 6.0_kindl, -4.0_kindl, 4*0.0_kindl, 1.0_kindl, 0.0_kindl, -3.0_kindl, 2.0_kindl,-2.0_kindl,&
472 0.0_kindl, 6.0_kindl, -4.0_kindl, 1.0_kindl, 0.0_kindl, -3.0_kindl, 2.0_kindl, 8*0.0_kindl, -1.0_kindl, &
473 0.0_kindl, 3.0_kindl, -2.0_kindl, 1.0_kindl, 0.0_kindl, -3.0_kindl, 2.0_kindl, 10*0.0_kindl, -3.0_kindl,&
474 2.0_kindl, 2*0.0_kindl, 3.0_kindl, -2.0_kindl, 6*0.0_kindl, 3.0_kindl, -2.0_kindl, 2*0.0_kindl, &
475 -6.0_kindl, 4.0_kindl, 2*0.0_kindl, 3.0_kindl, -2.0_kindl, 0.0_kindl, 1.0_kindl, -2.0_kindl, 1.0_kindl, &
476 5*0.0_kindl, -3.0_kindl, 6.0_kindl, -3.0_kindl, 0.0_kindl, 2.0_kindl, -4.0_kindl, 2.0_kindl,9*0.0_kindl,&
477 3.0_kindl, -6.0_kindl, 3.0_kindl, 0.0_kindl, -2.0_kindl, 4.0_kindl, -2.0_kindl, 10*0.0_kindl,-3.0_kindl,&
478 3.0_kindl, 2*0.0_kindl, 2.0_kindl, -2.0_kindl, 2*0.0_kindl, -1.0_kindl, 1.0_kindl,6*0.0_kindl,3.0_kindl,&
479 -3.0_kindl, 2*0.0_kindl, -2.0_kindl, 2.0_kindl, 5*0.0_kindl, 1.0_kindl, -2.0_kindl, 1.0_kindl,0.0_kindl,&
480 -2.0_kindl, 4.0_kindl, -2.0_kindl, 0.0_kindl, 1.0_kindl, -2.0_kindl, 1.0_kindl, 9*0.0_kindl, -1.0_kindl,&
481 2.0_kindl, -1.0_kindl, 0.0_kindl, 1.0_kindl, -2.0_kindl, 1.0_kindl, 10*0.0_kindl, 1.0_kindl, -1.0_kindl,&
482 2*0.0_kindl, -1.0_kindl, 1.0_kindl, 6*0.0_kindl, -1.0_kindl, 1.0_kindl, 2*0.0_kindl, 2.0_kindl, &
483 -2.0_kindl, 2*0.0_kindl, -1.0_kindl, 1.0_kindl/
510 end subroutine bcucof_
517 real(fms_hi_kind_),
intent(in) :: xc(1:)
518 real(fms_hi_kind_),
intent(in) :: xf
523 if(xc(ii).gt.xf)
return
526 call mpp_error(fatal,
'Error in INDL_')
534 real(fms_hi_kind_),
intent(in) :: xc(1:)
535 real(fms_hi_kind_),
intent(in) :: xf
540 if(xc(ii).gt.xf)
return
542 call mpp_error(fatal,
'Error in INDU_')
548 subroutine fill_xy_(fi, ics, ice, jcs, jce, mask, maxpass)
549 integer,
intent(in) :: ics,ice,jcs,jce
550 real(fms_hi_kind_),
intent(inout) :: fi(ics:ice,jcs:jce)
551 real(fms_hi_kind_),
intent(in),
optional :: mask(ics:ice,jcs:jce)
552 integer,
intent(in) :: maxpass
553 real(fms_hi_kind_) :: work_old(ics:ice,jcs:jce)
554 real(fms_hi_kind_) :: work_new(ics:ice,jcs:jce)
556 integer,
parameter :: kindl = fms_hi_kind_
557 real(fms_hi_kind_),
parameter :: blank = real(-1.e30, fms_hi_kind_)
558 real(fms_hi_kind_) :: tavr
560 integer :: inl, inr, jnl, jnu, i, j, is, js, iavr
565 work_new(:,:) = fi(:,:)
566 work_old(:,:) = work_new(:,:)
568 if (
present(mask) )
then
569 do while (.not.ready)
574 if (work_old(i,j).le.blank)
then
583 if (work_old(is,js) .ne. blank .and. mask(is,js).ne.0.0_kindl)
then
584 tavr = tavr + work_old(is,js)
596 if (work_old(inl,jnu).eq.blank.and.&
597 work_old(inr,jnu).eq.blank.and.&
598 work_old(inr,jnl).eq.blank.and.&
599 work_old(inl,jnl).eq.blank)
then
600 work_new(i,j)=tavr/real(iavr,fms_hi_kind_)
604 work_new(i,j)=tavr/real(iavr,fms_hi_kind_)
612 work_old(:,:)=work_new(:,:)
613 if(ipass.eq.maxpass) ready=.true.
615 fi(:,:) = work_new(:,:)
617 do while (.not.ready)
622 if (work_old(i,j).le.blank)
then
631 if (work_old(is,js).gt.blank)
then
632 tavr = tavr + work_old(is,js)
644 if (work_old(inl,jnu).le.blank.and. &
645 work_old(inr,jnu).le.blank.and. &
646 work_old(inr,jnl).le.blank.and. &
647 work_old(inl,jnl).le.blank)
then
648 work_new(i,j)=tavr/real(iavr,fms_hi_kind_)
652 work_new(i,j)=tavr/real(iavr,fms_hi_kind_)
660 work_old(:,:)=work_new(:,:)
661 if(ipass.eq.maxpass) ready=.true.
663 fi(:,:) = work_new(:,:)
666 end subroutine fill_xy_
subroutine horiz_interp_bicubic_new_1d_s_(Interp, lon_in, lat_in, lon_out, lat_out, verbose, src_modulo)
Creates a new horiz_interp_type.
subroutine horiz_interp_bicubic_new_1d_(Interp, lon_in, lat_in, lon_out, lat_out, verbose, src_modulo)
Creates a new horiz_interp_type.
integer function indl_(xc, xf)
find the lower neighbour of xf in field xc, return is the index
subroutine horiz_interp_bicubic_(Interp, data_in, data_out, verbose, mask_in, mask_out, missing_value, missing_permit)
Perform bicubic horizontal interpolation.
integer function indu_(xc, xf)
find the upper neighbour of xf in field xc, return is the index
integer function stdout()
This function returns the current standard fortran unit numbers for output.