NCEPLIBS-ip 4.0.0
ipolatev.f90
Go to the documentation of this file.
1
5
14 use ip_grid_mod
15
16 implicit none
17
18 private
20
21 interface ipolatev
22 module procedure ipolatev_grib1
23 module procedure ipolatev_grib2
24 end interface ipolatev
25
26contains
27
63 SUBROUTINE ipolatev_grid(IP,IPOPT,grid_in,grid_out, &
64 MI,MO,KM,IBI,LI,UI,VI, &
65 NO,RLAT,RLON,CROT,SROT,IBO,LO,UO,VO,IRET)
66 class(ip_grid), intent(in) :: grid_in, grid_out
67 INTEGER, INTENT(IN ) :: IP, IPOPT(20), IBI(KM)
68 INTEGER, INTENT(IN ) :: KM, MI, MO
69 INTEGER, INTENT( OUT) :: IBO(KM), IRET, NO
70 !
71 LOGICAL*1, INTENT(IN ) :: LI(MI,KM)
72 LOGICAL*1, INTENT( OUT) :: LO(MO,KM)
73 !
74 REAL, INTENT(IN ) :: UI(MI,KM),VI(MI,KM)
75 REAL, INTENT(INOUT) :: CROT(MO),SROT(MO)
76 REAL, INTENT(INOUT) :: RLAT(MO),RLON(MO)
77 REAL, INTENT( OUT) :: UO(MO,KM),VO(MO,KM)
78
79 select case(ip)
81 CALL interpolate_bilinear(ipopt,grid_in,grid_out, &
82 mi,mo,km,ibi,li,ui,vi,&
83 no,rlat,rlon,crot,srot,ibo,lo,uo,vo,iret)
85 CALL interpolate_bicubic(ipopt,grid_in,grid_out,mi,mo,km,ibi,li,ui,vi,&
86 no,rlat,rlon,crot,srot,ibo,lo,uo,vo,iret)
88 CALL interpolate_neighbor(ipopt,grid_in,grid_out,mi,mo,km,ibi,li,ui,vi,&
89 no,rlat,rlon,crot,srot,ibo,lo,uo,vo,iret)
91 CALL interpolate_budget(ipopt,grid_in,grid_out,mi,mo,km,ibi,li,ui,vi,&
92 no,rlat,rlon,crot,srot,ibo,lo,uo,vo,iret)
94 CALL interpolate_spectral(ipopt,grid_in,grid_out, &
95 mi,mo,km,ibi,ui,vi,&
96 no,rlat,rlon,crot,srot,ibo,lo,uo,vo,iret)
98 CALL interpolate_neighbor_budget(ipopt,grid_in,grid_out,mi,mo,km,ibi,li,ui,vi,&
99 no,rlat,rlon,crot,srot,ibo,lo,uo,vo,iret)
100 case default
101 print *, "unrecognized interpolation option: ", ip
102 error stop
103 ! IF(IGDTNUMO.GE.0) NO=0
104 ! DO K=1,KM
105 ! IBO(K)=1
106 ! DO N=1,NO
107 ! LO(N,K)=.FALSE.
108 ! UO(N,K)=0.
109 ! VO(N,K)=0.
110 ! ENDDO
111 ! ENDDO
112 ! IRET=1
113 end select
114
115 end subroutine ipolatev_grid
116
117
379 subroutine ipolatev_grib2(ip,ipopt,igdtnumi,igdtmpli,igdtleni, &
380 igdtnumo,igdtmplo,igdtleno, &
381 mi,mo,km,ibi,li,ui,vi, &
382 no,rlat,rlon,crot,srot,ibo,lo,uo,vo,iret) bind(c)
383
384 INTEGER, INTENT(IN ) :: IP, IPOPT(20), IBI(KM)
385 INTEGER, INTENT(IN ) :: KM, MI, MO
386 INTEGER, INTENT(IN ) :: IGDTNUMI, IGDTLENI
387 INTEGER, INTENT(IN ) :: IGDTMPLI(IGDTLENI)
388 INTEGER, INTENT(IN ) :: IGDTNUMO, IGDTLENO
389 INTEGER, INTENT(IN ) :: IGDTMPLO(IGDTLENO)
390 INTEGER, INTENT( OUT) :: IBO(KM), IRET, NO
391 !
392 LOGICAL*1, INTENT(IN ) :: LI(MI,KM)
393 LOGICAL*1, INTENT( OUT) :: LO(MO,KM)
394 !
395 REAL, INTENT(IN ) :: UI(MI,KM),VI(MI,KM)
396 REAL, INTENT(INOUT) :: CROT(MO),SROT(MO)
397 REAL, INTENT(INOUT) :: RLAT(MO),RLON(MO)
398 REAL, INTENT( OUT) :: UO(MO,KM),VO(MO,KM)
399 !
400 INTEGER :: K, N
401
402 type(grib2_descriptor) :: desc_in, desc_out
403 class(ip_grid), allocatable :: grid_in, grid_out
404
405 desc_in = init_descriptor(igdtnumi, igdtleni, igdtmpli)
406 desc_out = init_descriptor(igdtnumo, igdtleno, igdtmplo)
407
408 call init_grid(grid_in, desc_in)
409 call init_grid(grid_out, desc_out)
410
411 CALL ipolatev_grid(ip,ipopt,grid_in,grid_out, &
412 mi,mo,km,ibi,li,ui,vi,&
413 no,rlat,rlon,crot,srot,ibo,lo,uo,vo,iret)
414
415 end subroutine ipolatev_grib2
416
546 subroutine ipolatev_grib1(ip,ipopt,kgdsi,kgdso,mi,mo,km,ibi,li,ui,vi, &
547 no,rlat,rlon,crot,srot,ibo,lo,uo,vo,iret) bind(c)
548 IMPLICIT NONE
549 !
550 INTEGER, INTENT(IN ):: IP, IPOPT(20), IBI(KM)
551 INTEGER, INTENT(IN ):: KM, MI, MO
552 INTEGER, INTENT(INOUT):: KGDSI(200), KGDSO(200)
553 INTEGER, INTENT( OUT):: IBO(KM), IRET, NO
554 !
555 LOGICAL*1, INTENT(IN ):: LI(MI,KM)
556 LOGICAL*1, INTENT( OUT):: LO(MO,KM)
557 !
558 REAL, INTENT(IN ):: UI(MI,KM),VI(MI,KM)
559 REAL, INTENT(INOUT):: CROT(MO),SROT(MO)
560 REAL, INTENT(INOUT):: RLAT(MO),RLON(MO)
561 REAL, INTENT( OUT):: UO(MO,KM),VO(MO,KM)
562 !
563 INTEGER :: K, N, KGDSI11, KGDSO11
564
565 type(grib1_descriptor) :: desc_in, desc_out
566 class(ip_grid), allocatable :: grid_in, grid_out
567
568 IF(kgdsi(1).EQ.203) THEN
569 kgdsi11=kgdsi(11)
570 kgdsi(11)=ior(kgdsi(11),256)
571 ENDIF
572 IF(kgdso(1).EQ.203) THEN
573 kgdso11=kgdso(11)
574 kgdso(11)=ior(kgdso(11),256)
575 ENDIF
576
577 desc_in = init_descriptor(kgdsi)
578 desc_out = init_descriptor(kgdso)
579
580 call init_grid(grid_in, desc_in)
581 call init_grid(grid_out, desc_out)
582
583 CALL ipolatev_grid(ip,ipopt,grid_in,grid_out, &
584 mi,mo,km,ibi,li,ui,vi,&
585 no,rlat,rlon,crot,srot,ibo,lo,uo,vo,iret)
586
587 IF(kgdsi(1).EQ.203) THEN
588 kgdsi(11)=kgdsi11
589 ENDIF
590 IF(kgdso(1).EQ.203) THEN
591 kgdso(11)=kgdso11
592 ENDIF
593
594 END SUBROUTINE ipolatev_grib1
595
596
597end module ipolatev_mod
598
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 vector interpolation interpolation routine ipolates.
Definition: ipolatev.f90:10
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.
Definition: ipolatev.f90:383
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 scalar fields between grids given ip_grid objects.
Definition: ipolatev.f90:66
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...
Definition: ipolatev.f90:548
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