68 MI,MO,KM,IBI,LI,UI,VI, &
69 NO,RLAT,RLON,CROT,SROT,IBO,LO,UO,VO,IRET)
70 class(
ip_grid),
intent(in) :: grid_in, grid_out
71 INTEGER,
INTENT(IN ) :: IP, IPOPT(20), IBI(KM)
72 INTEGER,
INTENT(IN ) :: KM, MI, MO
73 INTEGER,
INTENT( OUT) :: IBO(KM), IRET, NO
75 LOGICAL*1,
INTENT(IN ) :: LI(MI,KM)
76 LOGICAL*1,
INTENT( OUT) :: LO(MO,KM)
78 REAL,
INTENT(IN ) :: UI(MI,KM),VI(MI,KM)
79 REAL,
INTENT(INOUT) :: CROT(MO),SROT(MO)
80 REAL,
INTENT(INOUT) :: RLAT(MO),RLON(MO)
81 REAL,
INTENT( OUT) :: UO(MO,KM),VO(MO,KM)
85 CALL interpolate_bilinear(ipopt,grid_in,grid_out, &
86 mi,mo,km,ibi,li,ui,vi,&
87 no,rlat,rlon,crot,srot,ibo,lo,uo,vo,iret)
89 CALL interpolate_bicubic(ipopt,grid_in,grid_out,mi,mo,km,ibi,li,ui,vi,&
90 no,rlat,rlon,crot,srot,ibo,lo,uo,vo,iret)
92 CALL interpolate_neighbor(ipopt,grid_in,grid_out,mi,mo,km,ibi,li,ui,vi,&
93 no,rlat,rlon,crot,srot,ibo,lo,uo,vo,iret)
95 CALL interpolate_budget(ipopt,grid_in,grid_out,mi,mo,km,ibi,li,ui,vi,&
96 no,rlat,rlon,crot,srot,ibo,lo,uo,vo,iret)
98 CALL interpolate_spectral(ipopt,grid_in,grid_out, &
100 no,rlat,rlon,crot,srot,ibo,lo,uo,vo,iret)
102 CALL interpolate_neighbor_budget(ipopt,grid_in,grid_out,mi,mo,km,ibi,li,ui,vi,&
103 no,rlat,rlon,crot,srot,ibo,lo,uo,vo,iret)
105 print *,
"unrecognized interpolation option: ", ip
383 igdtnumo,igdtmplo,igdtleno, &
384 mi,mo,km,ibi,li,ui,vi, &
385 no,rlat,rlon,crot,srot,ibo,lo,uo,vo,iret)
bind(c)
386 USE iso_c_binding,
ONLY: c_int, c_float, c_double, c_bool, c_long
388 INTEGER(C_LONG),
INTENT(IN ) :: IP, IPOPT(20), IBI(KM)
389 INTEGER(C_LONG),
INTENT(IN ) :: KM, MI, MO
390 INTEGER(C_LONG),
INTENT(IN ) :: IGDTNUMI, IGDTLENI
391 INTEGER(C_LONG),
INTENT(IN ) :: IGDTMPLI(IGDTLENI)
392 INTEGER(C_LONG),
INTENT(IN ) :: IGDTNUMO, IGDTLENO
393 INTEGER(C_LONG),
INTENT(IN ) :: IGDTMPLO(IGDTLENO)
394 INTEGER(C_LONG),
INTENT( OUT) :: IBO(KM), IRET, NO
396 INTEGER(C_INT),
INTENT(IN ) :: IP, IPOPT(20), IBI(KM)
397 INTEGER(C_INT),
INTENT(IN ) :: KM, MI, MO
398 INTEGER(C_INT),
INTENT(IN ) :: IGDTNUMI, IGDTLENI
399 INTEGER(C_INT),
INTENT(IN ) :: IGDTMPLI(IGDTLENI)
400 INTEGER(C_INT),
INTENT(IN ) :: IGDTNUMO, IGDTLENO
401 INTEGER(C_INT),
INTENT(IN ) :: IGDTMPLO(IGDTLENO)
402 INTEGER(C_INT),
INTENT( OUT) :: IBO(KM), IRET, NO
405 LOGICAL(C_BOOL),
INTENT(IN ) :: LI(MI,KM)
406 LOGICAL(C_BOOL),
INTENT( OUT) :: LO(MO,KM)
409 REAL(C_FLOAT),
INTENT(IN ) :: UI(MI,KM),VI(MI,KM)
410 REAL(C_FLOAT),
INTENT(INOUT) :: CROT(MO),SROT(MO)
411 REAL(C_FLOAT),
INTENT(INOUT) :: RLAT(MO),RLON(MO)
412 REAL(C_FLOAT),
INTENT( OUT) :: UO(MO,KM),VO(MO,KM)
414 REAL(C_DOUBLE),
INTENT(IN ) :: UI(MI,KM),VI(MI,KM)
415 REAL(C_DOUBLE),
INTENT(INOUT) :: CROT(MO),SROT(MO)
416 REAL(C_DOUBLE),
INTENT(INOUT) :: RLAT(MO),RLON(MO)
417 REAL(C_DOUBLE),
INTENT( OUT) :: UO(MO,KM),VO(MO,KM)
422 class(
ip_grid),
allocatable :: grid_in, grid_out
431 mi,mo,km,ibi,li,ui,vi,&
432 no,rlat,rlon,crot,srot,ibo,lo,uo,vo,iret)
565 subroutine ipolatev_grib1(ip,ipopt,kgdsi,kgdso,mi,mo,km,ibi,li,ui,vi, &
566 no,rlat,rlon,crot,srot,ibo,lo,uo,vo,iret)
bind(c)
567 USE iso_c_binding,
ONLY: c_int, c_float, c_double, c_bool, c_long
571 INTEGER(C_LONG),
INTENT(IN ):: IP, IPOPT(20), IBI(KM)
572 INTEGER(C_LONG),
INTENT(IN ):: KM, MI, MO
573 INTEGER(C_LONG),
INTENT(INOUT):: KGDSI(200), KGDSO(200)
574 INTEGER(C_LONG),
INTENT( OUT):: IBO(KM), IRET, NO
576 INTEGER(C_INT),
INTENT(IN ):: IP, IPOPT(20), IBI(KM)
577 INTEGER(C_INT),
INTENT(IN ):: KM, MI, MO
578 INTEGER(C_INT),
INTENT(INOUT):: KGDSI(200), KGDSO(200)
579 INTEGER(C_INT),
INTENT( OUT):: IBO(KM), IRET, NO
582 LOGICAL(C_BOOL),
INTENT(IN ):: LI(MI,KM)
583 LOGICAL(C_BOOL),
INTENT( OUT):: LO(MO,KM)
586 REAL(C_FLOAT),
INTENT(IN ):: UI(MI,KM),VI(MI,KM)
587 REAL(C_FLOAT),
INTENT(INOUT):: CROT(MO),SROT(MO)
588 REAL(C_FLOAT),
INTENT(INOUT):: RLAT(MO),RLON(MO)
589 REAL(C_FLOAT),
INTENT( OUT):: UO(MO,KM),VO(MO,KM)
591 REAL(C_DOUBLE),
INTENT(IN ):: UI(MI,KM),VI(MI,KM)
592 REAL(C_DOUBLE),
INTENT(INOUT):: CROT(MO),SROT(MO)
593 REAL(C_DOUBLE),
INTENT(INOUT):: RLAT(MO),RLON(MO)
594 REAL(C_DOUBLE),
INTENT( OUT):: UO(MO,KM),VO(MO,KM)
597 INTEGER :: KGDSI11, KGDSO11
600 class(
ip_grid),
allocatable :: grid_in, grid_out
602 IF(kgdsi(1).EQ.203)
THEN
604 kgdsi(11)=ior(kgdsi(11),256)
606 IF(kgdso(1).EQ.203)
THEN
608 kgdso(11)=ior(kgdso(11),256)
618 mi,mo,km,ibi,li,ui,vi,&
619 no,rlat,rlon,crot,srot,ibo,lo,uo,vo,iret)
621 IF(kgdsi(1).EQ.203)
THEN
624 IF(kgdso(1).EQ.203)
THEN
680 subroutine ipolatev_grib1_single_field(ip,ipopt,kgdsi,kgdso,mi,mo,km,ibi,li,ui,vi, &
681 no,rlat,rlon,crot,srot,ibo,lo,uo,vo,iret)
bind(c)
682 USE iso_c_binding,
ONLY: c_int, c_float, c_double, c_bool, c_long
686 INTEGER(C_LONG),
INTENT(IN ):: IP, IPOPT(20), IBI
687 INTEGER(C_LONG),
INTENT(IN ):: KM, MI, MO
688 INTEGER(C_LONG),
INTENT(INOUT):: KGDSI(200), KGDSO(200)
689 INTEGER(C_LONG),
INTENT( OUT):: IBO, IRET, NO
691 INTEGER(C_INT),
INTENT(IN ):: IP, IPOPT(20), IBI
692 INTEGER(C_INT),
INTENT(IN ):: KM, MI, MO
693 INTEGER(C_INT),
INTENT(INOUT):: KGDSI(200), KGDSO(200)
694 INTEGER(C_INT),
INTENT( OUT):: IBO, IRET, NO
697 LOGICAL(C_BOOL),
INTENT(IN ):: LI(MI)
698 LOGICAL(C_BOOL),
INTENT( OUT):: LO(MO)
701 REAL(C_FLOAT),
INTENT(IN ):: UI(MI),VI(MI)
702 REAL(C_FLOAT),
INTENT(INOUT):: CROT(MO),SROT(MO)
703 REAL(C_FLOAT),
INTENT(INOUT):: RLAT(MO),RLON(MO)
704 REAL(C_FLOAT),
INTENT( OUT):: UO(MO),VO(MO)
706 REAL(C_DOUBLE),
INTENT(IN ):: UI(MI),VI(MI)
707 REAL(C_DOUBLE),
INTENT(INOUT):: CROT(MO),SROT(MO)
708 REAL(C_DOUBLE),
INTENT(INOUT):: RLAT(MO),RLON(MO)
709 REAL(C_DOUBLE),
INTENT( OUT):: UO(MO),VO(MO)
712 INTEGER :: KGDSI11, KGDSO11
715 class(
ip_grid),
allocatable :: grid_in, grid_out
716 integer :: ibo_array(1)
722 IF(kgdsi(1).EQ.203)
THEN
724 kgdsi(11)=ior(kgdsi(11),256)
726 IF(kgdso(1).EQ.203)
THEN
728 kgdso(11)=ior(kgdso(11),256)
738 mi,mo,km,[ibi],li,ui,vi,&
739 no,rlat,rlon,crot,srot,ibo_array,lo,uo,vo,iret)
743 IF(kgdsi(1).EQ.203)
THEN
746 IF(kgdso(1).EQ.203)
THEN
833 igdtnumo,igdtmplo,igdtleno, &
834 mi,mo,km,ibi,li,ui,vi, &
835 no,rlat,rlon,crot,srot,ibo,lo,uo,vo,iret)
bind(c)
836 USE iso_c_binding,
ONLY: c_int, c_float, c_double, c_bool, c_long
838 INTEGER(C_LONG),
INTENT(IN ) :: IP, IPOPT(20), IBI
839 INTEGER(C_LONG),
INTENT(IN ) :: KM, MI, MO
840 INTEGER(C_LONG),
INTENT(IN ) :: IGDTNUMI, IGDTLENI
841 INTEGER(C_LONG),
INTENT(IN ) :: IGDTMPLI(IGDTLENI)
842 INTEGER(C_LONG),
INTENT(IN ) :: IGDTNUMO, IGDTLENO
843 INTEGER(C_LONG),
INTENT(IN ) :: IGDTMPLO(IGDTLENO)
844 INTEGER(C_LONG),
INTENT( OUT) :: IBO, IRET, NO
846 INTEGER(C_INT),
INTENT(IN ) :: IP, IPOPT(20), IBI
847 INTEGER(C_INT),
INTENT(IN ) :: KM, MI, MO
848 INTEGER(C_INT),
INTENT(IN ) :: IGDTNUMI, IGDTLENI
849 INTEGER(C_INT),
INTENT(IN ) :: IGDTMPLI(IGDTLENI)
850 INTEGER(C_INT),
INTENT(IN ) :: IGDTNUMO, IGDTLENO
851 INTEGER(C_INT),
INTENT(IN ) :: IGDTMPLO(IGDTLENO)
852 INTEGER(C_INT),
INTENT( OUT) :: IBO, IRET, NO
855 LOGICAL(C_BOOL),
INTENT(IN ) :: LI(MI)
856 LOGICAL(C_BOOL),
INTENT( OUT) :: LO(MO)
859 REAL(C_FLOAT),
INTENT(IN ) :: UI(MI),VI(MI)
860 REAL(C_FLOAT),
INTENT(INOUT) :: CROT(MO),SROT(MO)
861 REAL(C_FLOAT),
INTENT(INOUT) :: RLAT(MO),RLON(MO)
862 REAL(C_FLOAT),
INTENT( OUT) :: UO(MO),VO(MO)
864 REAL(C_DOUBLE),
INTENT(IN ) :: UI(MI),VI(MI)
865 REAL(C_DOUBLE),
INTENT(INOUT) :: CROT(MO),SROT(MO)
866 REAL(C_DOUBLE),
INTENT(INOUT) :: RLAT(MO),RLON(MO)
867 REAL(C_DOUBLE),
INTENT( OUT) :: UO(MO),VO(MO)
872 class(
ip_grid),
allocatable :: grid_in, grid_out
873 integer :: ibo_array(1)
886 mi,mo,km,[ibi],li,ui,vi,&
887 no,rlat,rlon,crot,srot,ibo_array,lo,uo,vo,iret)
Users derived type grid descriptor objects to abstract away the raw GRIB1 and GRIB2 grid definitions.
Routines for creating an ip_grid given a Grib descriptor.
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 vector interpolation interpolation routine ipolatev().
subroutine, public ipolatev_grib2(ip, ipopt, igdtnumi, igdtmpli, igdtleni, igdtnumo, igdtmplo, igdtleno, mi, mo, km, ibi, li, ui, vi, no, rlat, rlon, crot, srot, ibo, lo, uo, vo, iret)
This subprogram interpolates vector fields from any grid to any grid given a grib2 descriptor.
subroutine, public ipolatev_grib2_single_field(ip, ipopt, igdtnumi, igdtmpli, igdtleni, igdtnumo, igdtmplo, igdtleno, mi, mo, km, ibi, li, ui, vi, no, rlat, rlon, crot, srot, ibo, lo, uo, vo, iret)
This subprogram interpolates vector fields from any grid to any grid given a grib2 descriptor.
subroutine ipolatev_grid(IP, IPOPT, grid_in, grid_out, MI, MO, KM, IBI, LI, UI, VI, NO, RLAT, RLON, CROT, SROT, IBO, LO, UO, VO, IRET)
Interpolates vector fields between grids given ip_grid objects.
subroutine, public ipolatev_grib1(ip, ipopt, kgdsi, kgdso, mi, mo, km, ibi, li, ui, vi, no, rlat, rlon, crot, srot, ibo, lo, uo, vo, iret)
This subprogram interpolates vector field from any grid to any grid given a grib1 Grid Descriptor Sec...
subroutine, public ipolatev_grib1_single_field(ip, ipopt, kgdsi, kgdso, mi, mo, km, ibi, li, ui, vi, no, rlat, rlon, crot, srot, ibo, lo, uo, vo, iret)
Special case of ipolatev_grib1 when interpolating a single field.
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.