NCEPLIBS-ip 4.0.0
ipolates.f90
Go to the documentation of this file.
1
4
14 use ip_grid_mod
15 implicit none
16
17 private
19
20 interface ipolates
21 module procedure ipolates_grib1
22 module procedure ipolates_grib2
23 end interface ipolates
24
25contains
26
53 subroutine ipolates_grid(ip, ipopt, grid_in, grid_out, mi, mo, km,&
54 & ibi, li, gi, no, rlat, rlon, ibo, lo, go, iret)
55 class(ip_grid), intent(in) :: grid_in, grid_out
56 INTEGER, INTENT(IN ) :: IP, IPOPT(20), KM, MI, MO
57 INTEGER, INTENT(IN ) :: IBI(KM)
58 INTEGER, INTENT(INOUT) :: NO
59 INTEGER, INTENT( OUT) :: IRET, IBO(KM)
60 !
61 LOGICAL*1, INTENT(IN ) :: LI(MI,KM)
62 LOGICAL*1, INTENT( OUT) :: LO(MO,KM)
63 !
64 REAL, INTENT(IN ) :: GI(MI,KM)
65 REAL, INTENT(INOUT) :: RLAT(MO),RLON(MO)
66 REAL, INTENT( OUT) :: GO(MO,KM)
67 !
68
69 select case(ip)
71 CALL interpolate_bilinear(ipopt,grid_in,grid_out,mi,mo,km,ibi&
72 &,li,gi,no,rlat,rlon,ibo,lo,go,iret)
74 CALL interpolate_bicubic(ipopt,grid_in,grid_out,mi,mo,km,ibi&
75 &,li,gi,no,rlat,rlon,ibo,lo,go,iret)
77 CALL interpolate_neighbor(ipopt,grid_in,grid_out,mi,mo,km,ibi&
78 &,li,gi,no,rlat,rlon,ibo,lo,go,iret)
80 CALL interpolate_budget(ipopt,grid_in,grid_out,mi,mo,km,ibi,li&
81 &,gi,no,rlat,rlon,ibo,lo,go,iret)
83 CALL interpolate_spectral(ipopt,grid_in,grid_out,mi,mo,km,ibi&
84 &,gi,no,rlat,rlon,ibo,lo,go,iret)
86 CALL interpolate_neighbor_budget(ipopt,grid_in,grid_out,mi,mo&
87 &,km,ibi,li,gi,no,rlat,rlon,ibo,lo,go,iret)
88 case default
89 ! IF(KGDSO(1).GE.0) NO=0
90 ! DO K=1,KM
91 ! IBO(K)=1
92 ! DO N=1,NO
93 ! LO(N,K)=.FALSE.
94 ! GO(N,K)=0.
95 ! ENDDO
96 ! ENDDO
97 iret=1
98 print *, "Unrecognized interp option: ", ip
99 error stop
100 end select
101
102 end subroutine ipolates_grid
103
187 subroutine ipolates_grib1(ip,ipopt,kgdsi,kgdso,mi,mo,km,ibi,li,gi, &
188 no,rlat,rlon,ibo,lo,go,iret) bind(c)
189 !
190 INTEGER, INTENT(IN ) :: IP, IPOPT(20), KM, MI, MO
191 INTEGER, INTENT(IN ) :: IBI(KM), KGDSI(200), KGDSO(200)
192 INTEGER, INTENT(INOUT) :: NO
193 INTEGER, INTENT( OUT) :: IRET, IBO(KM)
194 !
195 LOGICAL*1, INTENT(IN ) :: LI(MI,KM)
196 LOGICAL*1, INTENT( OUT) :: LO(MO,KM)
197 !
198 REAL, INTENT(IN ) :: GI(MI,KM)
199 REAL, INTENT(INOUT) :: RLAT(MO),RLON(MO)
200 REAL, INTENT( OUT) :: GO(MO,KM)
201 !
202 INTEGER :: K, N
203
204 type(grib1_descriptor) :: desc_in, desc_out
205 class(ip_grid), allocatable :: grid_in, grid_out
206
207 desc_in = init_descriptor(kgdsi)
208 desc_out = init_descriptor(kgdso)
209
210 call init_grid(grid_in, desc_in)
211 call init_grid(grid_out, desc_out)
212
213 call ipolates_grid(ip, ipopt, grid_in, grid_out, mi, mo, km, ibi, li, gi, no, rlat, rlon, ibo, lo, go, iret)
214
215 END SUBROUTINE ipolates_grib1
216
217
466 SUBROUTINE ipolates_grib2(IP,IPOPT,IGDTNUMI,IGDTMPLI,IGDTLENI, &
467 IGDTNUMO,IGDTMPLO,IGDTLENO, &
468 MI,MO,KM,IBI,LI,GI, &
469 NO,RLAT,RLON,IBO,LO,GO,IRET) bind(C)
470 INTEGER, INTENT(IN ) :: IP, IPOPT(20), KM, MI, MO
471 INTEGER, INTENT(IN ) :: IBI(KM)
472 INTEGER, INTENT(IN ) :: IGDTNUMI, IGDTLENI
473 INTEGER, INTENT(IN ) :: IGDTMPLI(IGDTLENI)
474 INTEGER, INTENT(IN ) :: IGDTNUMO, IGDTLENO
475 INTEGER, INTENT(IN ) :: IGDTMPLO(IGDTLENO)
476 INTEGER, INTENT( OUT) :: NO
477 INTEGER, INTENT( OUT) :: IRET, IBO(KM)
478 !
479 LOGICAL*1, INTENT(IN ) :: LI(MI,KM)
480 LOGICAL*1, INTENT( OUT) :: LO(MO,KM)
481 !
482 REAL, INTENT(IN ) :: GI(MI,KM)
483 REAL, INTENT(INOUT) :: RLAT(MO),RLON(MO)
484 REAL, INTENT( OUT) :: GO(MO,KM)
485
486 type(grib2_descriptor) :: desc_in, desc_out
487 class(ip_grid), allocatable :: grid_in, grid_out
488
489 desc_in = init_descriptor(igdtnumi, igdtleni, igdtmpli)
490 desc_out = init_descriptor(igdtnumo, igdtleno, igdtmplo)
491
492 call init_grid(grid_in, desc_in)
493 call init_grid(grid_out, desc_out)
494
495 CALL ipolates_grid(ip,ipopt,grid_in,grid_out,mi,mo,km,ibi,li,gi,no,rlat,rlon,ibo,lo,go,iret)
496
497 END SUBROUTINE ipolates_grib2
498
499
500
501end module ipolates_mod
502
Uses derived type grid descriptor objects to abstract away the raw Grib-1 and Grib-2 grid definitions...
Routines for creating an ip_grid given a Grib descriptor.
Abstract ip_grid type.
Definition: ip_grid_mod.f90:8
Top-level module to export interpolation routines and constants.
integer, parameter, public neighbor_interp_id
integer, parameter, public bilinear_interp_id
integer, parameter, public budget_interp_id
integer, parameter, public spectral_interp_id
integer, parameter, public bicubic_interp_id
integer, parameter, public neighbor_budget_interp_id
Top-level driver for scalar interpolation interpolation routine ipolates.
Definition: ipolates.f90:9
subroutine ipolates_grid(ip, ipopt, grid_in, grid_out, mi, mo, km, ibi, li, gi, no, rlat, rlon, ibo, lo, go, iret)
Interpolates scalar fields between grids given ip_grid objects.
Definition: ipolates.f90:55
subroutine, public ipolates_grib2(IP, IPOPT, IGDTNUMI, IGDTMPLI, IGDTLENI, IGDTNUMO, IGDTMPLO, IGDTLENO, MI, MO, KM, IBI, LI, GI, NO, RLAT, RLON, IBO, LO, GO, IRET)
This subprogram interpolates scalar field from any grid to any grid given a grib2 descriptor.
Definition: ipolates.f90:470
subroutine, public ipolates_grib1(ip, ipopt, kgdsi, kgdso, mi, mo, km, ibi, li, gi, no, rlat, rlon, ibo, lo, go, iret)
This subprogram interpolates scalar field from any grid to any grid given a grib1 Grid Descriptor Sec...
Definition: ipolates.f90:189
Descriptor representing a grib1 grib descriptor section (GDS) with an integer array.
Grib-2 descriptor containing a grib2 GDT represented by an integer array.
Abstract grid that holds fields and methods common to all grids.
Definition: ip_grid_mod.f90:45