29 type(horiz_interp_type),
intent(inout) :: Interp
34 real(FMS_HI_KIND_),
intent(in),
dimension(:) :: lon_in
35 real(FMS_HI_KIND_),
intent(in),
dimension(:) :: lat_in
36 real(FMS_HI_KIND_),
intent(in),
dimension(:,:) :: lon_out
37 real(FMS_HI_KIND_),
intent(in),
dimension(:,:) :: lat_out
38 integer,
intent(in),
optional :: verbose
39 logical,
intent(in),
optional :: src_modulo
42 integer :: i, j, ip1, im1, jp1, jm1
43 logical :: src_is_modulo
44 integer :: nlon_in, nlat_in, nlon_out, nlat_out
45 integer :: jcl, jcu, icl, icu, jj
46 real(FMS_HI_KIND_) :: xz, yz
48 integer,
parameter :: kindl = fms_hi_kind_
50 if(
present(verbose)) verbose_bicubic = verbose
51 src_is_modulo = .false.
52 if (
present(src_modulo)) src_is_modulo = src_modulo
54 if(
size(lon_out,1) /=
size(lat_out,1) .or.
size(lon_out,2) /=
size(lat_out,2) ) &
55 call mpp_error(fatal,
'horiz_interp_bilinear_mod: when using bilinear ' // &
56 'interplation, the output grids should be geographical grids')
59 nlon_in =
size(lon_in) ; nlat_in =
size(lat_in)
60 nlon_out =
size(lon_out,1); nlat_out =
size(lat_out,2)
61 interp%nlon_src = nlon_in; interp%nlat_src = nlat_in
62 interp%nlon_dst = nlon_out; interp%nlat_dst = nlat_out
64 allocate ( interp%HI_KIND_TYPE_%wti (nlon_in, nlat_in, 3) )
65 allocate ( interp%HI_KIND_TYPE_%lon_in (nlon_in) )
66 allocate ( interp%HI_KIND_TYPE_%lat_in (nlat_in) )
67 allocate ( interp%HI_KIND_TYPE_%rat_x (nlon_out, nlat_out) )
68 allocate ( interp%HI_KIND_TYPE_%rat_y (nlon_out, nlat_out) )
69 allocate ( interp%i_lon (nlon_out, nlat_out, 2) )
70 allocate ( interp%j_lat (nlon_out, nlat_out, 2) )
72 interp%HI_KIND_TYPE_%lon_in = lon_in
73 interp%HI_KIND_TYPE_%lat_in = lat_in
75 if ( verbose_bicubic > 0 )
then
77 write (iunit,
'(/,"Initialising bicubic interpolation, interface horiz_interp_bicubic_new_1d_s")')
78 write (iunit,
'(/," Longitude of coarse grid points (radian): xc(i) i=1, ",i4)') interp%nlon_src
79 write (iunit,
'(1x,10f10.4)') (interp%HI_KIND_TYPE_%lon_in(jj),jj=1,interp%nlon_src)
80 write (iunit,
'(/," Latitude of coarse grid points (radian): yc(j) j=1, ",i4)') interp%nlat_src
81 write (iunit,
'(1x,10f10.4)') (interp%HI_KIND_TYPE_%lat_in(jj),jj=1,interp%nlat_src)
82 do i=1, interp%nlat_dst
84 write (iunit,
'(/," Longitude of fine grid points (radian): xf(i) i=1, ",i4)') interp%nlat_dst
85 write (iunit,
'(1x,10f10.4)') (lon_out(jj,i),jj=1,interp%nlon_dst)
87 do i=1, interp%nlon_dst
89 write (iunit,
'(/," Latitude of fine grid points (radian): yf(j) j=1, ",i4)') interp%nlon_dst
90 write (iunit,
'(1x,10f10.4)') (lat_out(i,jj),jj=1,interp%nlat_dst)
103 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))
116 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))
130 interp%HI_KIND_TYPE_%wti(i,j,3) = 1.0_kindl / &
131 ((interp%HI_KIND_TYPE_%lon_in(ip1)-interp%HI_KIND_TYPE_%lon_in(im1)) * &
132 (interp%HI_KIND_TYPE_%lat_in(jp1)-interp%HI_KIND_TYPE_%lat_in(jm1)))
145 if( yz .le. interp%HI_KIND_TYPE_%lat_in(1) )
then
148 else if( yz .ge. interp%HI_KIND_TYPE_%lat_in(nlat_in) )
then
152 jcl = indl(interp%HI_KIND_TYPE_%lat_in, yz)
153 jcu = indu(interp%HI_KIND_TYPE_%lat_in, yz)
159 if( xz .gt. interp%HI_KIND_TYPE_%lon_in(nlon_in) ) xz = xz - real(tpi,fms_hi_kind_)
160 if( xz .le. interp%HI_KIND_TYPE_%lon_in(1) ) xz = xz + real(tpi,fms_hi_kind_)
161 if( xz .ge. interp%HI_KIND_TYPE_%lon_in(nlon_in) )
then
164 interp%HI_KIND_TYPE_%rat_x(i,j) = (xz - interp%HI_KIND_TYPE_%lon_in(icl))/(interp%HI_KIND_TYPE_%lon_in(icu)&
165 & - interp%HI_KIND_TYPE_%lon_in(icl) + real(tpi,fms_hi_kind_))
167 icl = indl(interp%HI_KIND_TYPE_%lon_in, xz)
168 icu = indu(interp%HI_KIND_TYPE_%lon_in, xz)
169 interp%HI_KIND_TYPE_%rat_x(i,j) = (xz - interp%HI_KIND_TYPE_%lon_in(icl))/(interp%HI_KIND_TYPE_%lon_in(icu)&
170 & - interp%HI_KIND_TYPE_%lon_in(icl))
172 interp%j_lat(i,j,1) = jcl
173 interp%j_lat(i,j,2) = jcu
174 interp%i_lon(i,j,1) = icl
175 interp%i_lon(i,j,2) = icu
177 interp%HI_KIND_TYPE_%rat_y(i,j) = 0.0_kindl
179 interp%HI_KIND_TYPE_%rat_y(i,j) = (yz-interp%HI_KIND_TYPE_%lat_in(jcl))/(interp%HI_KIND_TYPE_%lat_in(jcu)&
180 & - interp%HI_KIND_TYPE_%lat_in(jcl))
192 interp% HI_KIND_TYPE_ % is_allocated = .true.
193 interp%interp_method = bicubic
201 verbose, src_modulo )
204 type(horiz_interp_type),
intent(inout) :: Interp
205 real(FMS_HI_KIND_),
intent(in),
dimension(:) :: lon_in , lat_in
206 real(FMS_HI_KIND_),
intent(in),
dimension(:) :: lon_out, lat_out
207 integer,
intent(in),
optional :: verbose
208 logical,
intent(in),
optional :: src_modulo
209 integer :: i, j, ip1, im1, jp1, jm1
210 logical :: src_is_modulo
211 integer :: nlon_in, nlat_in, nlon_out, nlat_out
212 integer :: jcl, jcu, icl, icu, jj
213 real(FMS_HI_KIND_) :: xz, yz
215 integer,
parameter :: kindl = fms_hi_kind_
217 if(
present(verbose)) verbose_bicubic = verbose
218 src_is_modulo = .false.
219 if (
present(src_modulo)) src_is_modulo = src_modulo
222 nlon_in =
size(lon_in) ; nlat_in =
size(lat_in)
223 nlon_out =
size(lon_out); nlat_out =
size(lat_out)
224 interp%nlon_src = nlon_in; interp%nlat_src = nlat_in
225 interp%nlon_dst = nlon_out; interp%nlat_dst = nlat_out
226 allocate ( interp%HI_KIND_TYPE_%wti (nlon_in, nlat_in, 3) )
227 allocate ( interp%HI_KIND_TYPE_%lon_in (nlon_in) )
228 allocate ( interp%HI_KIND_TYPE_%lat_in (nlat_in) )
229 allocate ( interp%HI_KIND_TYPE_%rat_x (nlon_out, nlat_out) )
230 allocate ( interp%HI_KIND_TYPE_%rat_y (nlon_out, nlat_out) )
231 allocate ( interp%i_lon (nlon_out, nlat_out, 2) )
232 allocate ( interp%j_lat (nlon_out, nlat_out, 2) )
234 interp%HI_KIND_TYPE_%lon_in = lon_in
235 interp%HI_KIND_TYPE_%lat_in = lat_in
237 if ( verbose_bicubic > 0 )
then
239 write (iunit,
'(/,"Initialising bicubic interpolation, interface HORIZ_INTERP_BICUBIC_NEW_1D_")')
240 write (iunit,
'(/," Longitude of coarse grid points (radian): xc(i) i=1, ",i4)') interp%nlon_src
241 write (iunit,
'(1x,10f10.4)') (interp%HI_KIND_TYPE_%lon_in(jj),jj=1,interp%nlon_src)
242 write (iunit,
'(/," Latitude of coarse grid points (radian): yc(j) j=1, ",i4)') interp%nlat_src
243 write (iunit,
'(1x,10f10.4)') (interp%HI_KIND_TYPE_%lat_in(jj),jj=1,interp%nlat_src)
245 write (iunit,
'(/," Longitude of fine grid points (radian): xf(i) i=1, ",i4)') interp%nlat_dst
246 write (iunit,
'(1x,10f10.4)') (lon_out(jj),jj=1,interp%nlon_dst)
247 write (iunit,
'(/," Latitude of fine grid points (radian): yf(j) j=1, ",i4)') interp%nlon_dst
248 write (iunit,
'(1x,10f10.4)') (lat_out(jj),jj=1,interp%nlat_dst)
260 interp%HI_KIND_TYPE_%wti(i,j,1) = 1.0_kindl /(lon_in(ip1)-lon_in(im1))
273 interp%HI_KIND_TYPE_%wti(i,j,2) = 1.0_kindl /(lat_in(jp1)-lat_in(jm1))
287 interp%HI_KIND_TYPE_%wti(i,j,3) = 1.0_kindl /((lon_in(ip1)-lon_in(im1))*(lat_in(jp1)-lat_in(jm1)))
297 if( yz .le. lat_in(1) )
then
300 else if( yz .ge. lat_in(nlat_in) )
then
304 jcl = indl(lat_in, yz)
305 jcu = indu(lat_in, yz)
312 if( xz .gt. lon_in(nlon_in) ) xz = xz - real(tpi,fms_hi_kind_)
313 if( xz .le. lon_in(1) ) xz = xz + real(tpi, fms_hi_kind_)
314 if( xz .ge. lon_in(nlon_in) )
then
317 interp%HI_KIND_TYPE_%rat_x(i,j) = (xz - interp%HI_KIND_TYPE_%lon_in(icl))/(interp%HI_KIND_TYPE_%lon_in(icu)&
318 & - interp%HI_KIND_TYPE_%lon_in(icl) + real(tpi,fms_hi_kind_))
320 icl = indl(lon_in, xz)
321 icu = indu(lon_in, xz)
322 interp%HI_KIND_TYPE_%rat_x(i,j) = (xz - interp%HI_KIND_TYPE_%lon_in(icl))/(interp%HI_KIND_TYPE_%lon_in(icu)&
323 & - interp%HI_KIND_TYPE_%lon_in(icl))
325 icl = indl(lon_in, xz)
326 icu = indu(lon_in, xz)
327 interp%j_lat(i,j,1) = jcl
328 interp%j_lat(i,j,2) = jcu
329 interp%i_lon(i,j,1) = icl
330 interp%i_lon(i,j,2) = icu
332 interp%HI_KIND_TYPE_%rat_y(i,j) = 0.0_kindl
334 interp%HI_KIND_TYPE_%rat_y(i,j) = (yz- interp%HI_KIND_TYPE_%lat_in(jcl))/(interp%HI_KIND_TYPE_%lat_in(jcu)&
335 & - interp%HI_KIND_TYPE_%lat_in(jcl))
347 interp% HI_KIND_TYPE_ % is_allocated = .true.
348 interp%interp_method = bicubic
355 type (horiz_interp_type),
intent(in) :: Interp
356 real(FMS_HI_KIND_),
intent(in),
dimension(:,:) :: data_in
357 real(FMS_HI_KIND_),
intent(out),
dimension(:,:) :: data_out
358 integer,
intent(in),
optional :: verbose
359 real(FMS_HI_KIND_),
intent(in),
dimension(:,:),
optional :: mask_in
360 real(FMS_HI_KIND_),
intent(out),
dimension(:,:),
optional :: mask_out
361 real(FMS_HI_KIND_),
intent(in),
optional :: missing_value
362 integer,
intent(in),
optional :: missing_permit
363 real(FMS_HI_KIND_) :: yz, ycu, ycl
364 real(FMS_HI_KIND_) :: xz, xcu, xcl
365 real(FMS_HI_KIND_) :: val, val1, val2
366 real(FMS_HI_KIND_),
dimension(4) :: y, y1, y2, y12
367 integer :: icl, icu, jcl, jcu
368 integer :: iclp1, icup1, jclp1, jcup1
369 integer :: iclm1, icum1, jclm1, jcum1
371 integer,
parameter :: kindl = fms_hi_kind_
373 if (
present(verbose) ) verbose_bicubic = verbose
375 do j=1, interp%nlat_dst
376 do i=1, interp%nlon_dst
377 yz = interp%HI_KIND_TYPE_%rat_y(i,j)
378 xz = interp%HI_KIND_TYPE_%rat_x(i,j)
379 jcl = interp%j_lat(i,j,1)
380 jcu = interp%j_lat(i,j,2)
381 icl = interp%i_lon(i,j,1)
382 icu = interp%i_lon(i,j,2)
386 xcl = interp%HI_KIND_TYPE_%lon_in(icl)
387 xcu = interp%HI_KIND_TYPE_%lon_in(icu)+real(tpi, fms_hi_kind_)
389 iclp1 = min(icl+1,interp%nlon_src)
391 xcl = interp%HI_KIND_TYPE_%lon_in(icl)
392 xcu = interp%HI_KIND_TYPE_%lon_in(icu)
395 icup1 = min(icu+1,interp%nlon_src)
396 jclp1 = min(jcl+1,interp%nlat_src)
398 jcup1 = min(jcu+1,interp%nlat_src)
400 ycl = interp%HI_KIND_TYPE_%lat_in(jcl)
401 ycu = interp%HI_KIND_TYPE_%lat_in(jcu)
404 y(1) = data_in(icl,jcl)
405 y(2) = data_in(icu,jcl)
406 y(3) = data_in(icu,jcu)
407 y(4) = data_in(icl,jcu)
408 y1(1) = ( data_in(iclp1,jcl) - data_in(iclm1,jcl) ) * interp%HI_KIND_TYPE_%wti(icl,jcl,1)
409 y1(2) = ( data_in(icup1,jcl) - data_in(icum1,jcl) ) * interp%HI_KIND_TYPE_%wti(icu,jcl,1)
410 y1(3) = ( data_in(icup1,jcu) - data_in(icum1,jcu) ) * interp%HI_KIND_TYPE_%wti(icu,jcu,1)
411 y1(4) = ( data_in(iclp1,jcu) - data_in(iclm1,jcu) ) * interp%HI_KIND_TYPE_%wti(icl,jcu,1)
412 y2(1) = ( data_in(icl,jclp1) - data_in(icl,jclm1) ) * interp%HI_KIND_TYPE_%wti(icl,jcl,2)
413 y2(2) = ( data_in(icu,jclp1) - data_in(icu,jclm1) ) * interp%HI_KIND_TYPE_%wti(icu,jcl,2)
414 y2(3) = ( data_in(icu,jcup1) - data_in(icu,jcum1) ) * interp%HI_KIND_TYPE_%wti(icu,jcu,2)
415 y2(4) = ( data_in(icl,jcup1) - data_in(icl,jcum1) ) * interp%HI_KIND_TYPE_%wti(icl,jcu,2)
416 y12(1)= ( data_in(iclp1,jclp1) + data_in(iclm1,jclm1) - data_in(iclm1,jclp1) &
417 - data_in(iclp1,jclm1) ) * interp%HI_KIND_TYPE_%wti(icl,jcl,3)
418 y12(2)= ( data_in(icup1,jclp1) + data_in(icum1,jclm1) - data_in(icum1,jclp1) &
419 - data_in(icup1,jclm1) ) * interp%HI_KIND_TYPE_%wti(icu,jcl,3)
420 y12(3)= ( data_in(icup1,jcup1) + data_in(icum1,jcum1) - data_in(icum1,jcup1) &
421 - data_in(icup1,jcum1) ) * interp%HI_KIND_TYPE_%wti(icu,jcu,3)
422 y12(4)= ( data_in(iclp1,jcup1) + data_in(iclm1,jcum1) - data_in(iclm1,jcup1) &
423 - data_in(iclp1,jcum1) ) * interp%HI_KIND_TYPE_%wti(icl,jcu,3)
425 call bcuint(y,y1,y2,y12,xcl,xcu,ycl,ycu,xz,yz,val,val1,val2)
427 if(
present(mask_out)) mask_out(i,j) = 1.0_kindl
437 subroutine bcuint_(y,y1,y2,y12,x1l,x1u,x2l,x2u,t,u,ansy,ansy1,ansy2)
438 real(FMS_HI_KIND_) ansy,ansy1,ansy2,x1l,x1u,x2l,x2u,y(4),y1(4),y12(4),y2(4)
441 integer,
parameter :: kindl = fms_hi_kind_
442 real(FMS_HI_KIND_) t,u,c(4,4)
443 call bcucof(y,y1,y2,y12,x1u-x1l,x2u-x2l,c)
448 ansy=t*ansy+((c(i,4)*u+c(i,3))*u+c(i,2))*u+c(i,1)
456 end subroutine bcuint_
459 subroutine bcucof_(y,y1,y2,y12,d1,d2,c)
460 real(FMS_HI_KIND_) d1,d2,c(4,4),y(4),y1(4),y12(4),y2(4)
462 real(FMS_HI_KIND_) d1d2,xx,cl(16),x(16)
463 integer,
parameter :: kindl = fms_hi_kind_
465 real(FMS_HI_KIND_),
save,
dimension(16,16) :: wt
466 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, &
467 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, &
468 -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, &
469 -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, &
470 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,&
471 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, &
472 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,&
473 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, &
474 -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, &
475 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,&
476 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,&
477 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,&
478 -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,&
479 -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,&
480 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,&
481 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, &
482 -2.0_kindl, 2*0.0_kindl, -1.0_kindl, 1.0_kindl/
509 end subroutine bcucof_
516 real(fms_hi_kind_),
intent(in) :: xc(1:)
517 real(fms_hi_kind_),
intent(in) :: xf
522 if(xc(ii).gt.xf)
return
525 call mpp_error(fatal,
'Error in INDL_')
533 real(fms_hi_kind_),
intent(in) :: xc(1:)
534 real(fms_hi_kind_),
intent(in) :: xf
539 if(xc(ii).gt.xf)
return
541 call mpp_error(fatal,
'Error in INDU_')
547 subroutine fill_xy_(fi, ics, ice, jcs, jce, mask, maxpass)
548 integer,
intent(in) :: ics,ice,jcs,jce
549 real(fms_hi_kind_),
intent(inout) :: fi(ics:ice,jcs:jce)
550 real(fms_hi_kind_),
intent(in),
optional :: mask(ics:ice,jcs:jce)
551 integer,
intent(in) :: maxpass
552 real(fms_hi_kind_) :: work_old(ics:ice,jcs:jce)
553 real(fms_hi_kind_) :: work_new(ics:ice,jcs:jce)
555 integer,
parameter :: kindl = fms_hi_kind_
556 real(fms_hi_kind_),
parameter :: blank = real(-1.e30, fms_hi_kind_)
557 real(fms_hi_kind_) :: tavr
559 integer :: inl, inr, jnl, jnu, i, j, is, js, iavr
564 work_new(:,:) = fi(:,:)
565 work_old(:,:) = work_new(:,:)
567 if (
present(mask) )
then
568 do while (.not.ready)
573 if (work_old(i,j).le.blank)
then
582 if (work_old(is,js) .ne. blank .and. mask(is,js).ne.0.0_kindl)
then
583 tavr = tavr + work_old(is,js)
595 if (work_old(inl,jnu).eq.blank.and.&
596 work_old(inr,jnu).eq.blank.and.&
597 work_old(inr,jnl).eq.blank.and.&
598 work_old(inl,jnl).eq.blank)
then
599 work_new(i,j)=tavr/real(iavr,fms_hi_kind_)
603 work_new(i,j)=tavr/real(iavr,fms_hi_kind_)
611 work_old(:,:)=work_new(:,:)
612 if(ipass.eq.maxpass) ready=.true.
614 fi(:,:) = work_new(:,:)
616 do while (.not.ready)
621 if (work_old(i,j).le.blank)
then
630 if (work_old(is,js).gt.blank)
then
631 tavr = tavr + work_old(is,js)
643 if (work_old(inl,jnu).le.blank.and. &
644 work_old(inr,jnu).le.blank.and. &
645 work_old(inr,jnl).le.blank.and. &
646 work_old(inl,jnl).le.blank)
then
647 work_new(i,j)=tavr/real(iavr,fms_hi_kind_)
651 work_new(i,j)=tavr/real(iavr,fms_hi_kind_)
659 work_old(:,:)=work_new(:,:)
660 if(ipass.eq.maxpass) ready=.true.
662 fi(:,:) = work_new(:,:)
665 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.