Update version info for release v4.6.1 (#2122)
[WRF.git] / external / io_grib2 / g2lib / getdim.F
blob2e66068a14dc8ad2780dcedfac4ba02b099a36d1
1       subroutine getdim(csec3,lcsec3,width,height,iscan)
2 !$$$  SUBPROGRAM DOCUMENTATION BLOCK
3 !                .      .    .                                       .
4 ! SUBPROGRAM:    getdim 
5 !   PRGMMR: Gilbert         ORG: W/NP11    DATE: 2002-12-11
7 ! ABSTRACT: This subroutine returns the dimensions and scanning mode of 
8 !   a grid definition packed in GRIB2 Grid Definition Section 3 format.
10 ! PROGRAM HISTORY LOG:
11 ! 2002-12-11  Gilbert
13 ! USAGE:    CALL getdim(csec3,lcsec3,width,height,iscan)
14 !   INPUT ARGUMENT LIST:
15 !     csec3    - Character array that contains the packed GRIB2 GDS
16 !    lcsec3    - Length (in octets) of section 3
18 !   OUTPUT ARGUMENT LIST:      
19 !     width    - x (or i) dimension of the grid.
20 !     height   - y (or j) dimension of the grid.
21 !     iscan    - Scanning mode ( see Code Table 3.4 )
23 ! REMARKS:  Returns width and height set to zero, if grid template
24 !           not recognized.
26 ! ATTRIBUTES:
27 !   LANGUAGE: Fortran 90
28 !   MACHINE:  IBM SP
30 !$$$
31 !      use grib_mod
32     
33       character(len=1),intent(in) :: csec3(*)
34       integer,intent(in) :: lcsec3
35       integer,intent(out) :: width,height,iscan
36       
37       integer,pointer,dimension(:) :: igdstmpl,list_opt
38       integer :: igds(5)
39       integer iofst,igdtlen,num_opt,jerr
41       interface
42          subroutine gf_unpack3(cgrib,lcgrib,iofst,igds,igdstmpl,
43      &                         mapgridlen,ideflist,idefnum,ierr)
44             character(len=1),intent(in) :: cgrib(lcgrib)
45             integer,intent(in) :: lcgrib
46             integer,intent(inout) :: iofst
47             integer,pointer,dimension(:) :: igdstmpl,ideflist
48             integer,intent(out) :: igds(5)
49             integer,intent(out) :: ierr,idefnum
50          end subroutine gf_unpack3
51       end interface
53       nullify(igdstmpl,list_opt)
54         !
55       iofst=0       ! set offset to beginning of section
56       call gf_unpack3(csec3,lcsec3,iofst,igds,igdstmpl,
57      &                 igdtlen,list_opt,num_opt,jerr)
58       if (jerr.eq.0) then
59          selectcase( igds(5) )     !  Template number
60            case (0:3)   ! Lat/Lon
61               width=igdstmpl(8)
62               height=igdstmpl(9)
63               iscan=igdstmpl(19)
64            case (10)   ! Mercator
65               width=igdstmpl(8)
66               height=igdstmpl(9)
67               iscan=igdstmpl(16)
68            case (20)   ! Polar Stereographic
69               width=igdstmpl(8)
70               height=igdstmpl(9)
71               iscan=igdstmpl(18)
72            case (30)   ! Lambert Conformal
73               width=igdstmpl(8)
74               height=igdstmpl(9)
75               iscan=igdstmpl(18)
76            case (40:43)   ! Gaussian
77               width=igdstmpl(8)
78               height=igdstmpl(9)
79               iscan=igdstmpl(19)
80            case (90)   ! Space View/Orthographic
81               width=igdstmpl(8)
82               height=igdstmpl(9)
83               iscan=igdstmpl(17)
84            case (110)   ! Equatorial Azimuthal
85               width=igdstmpl(8)
86               height=igdstmpl(9)
87               iscan=igdstmpl(16)
88            case default
89               width=0
90               height=0
91               iscan=0
92          end select
93       else
94          width=0
95          height=0
96       endif
97         !
98       if (associated(igdstmpl)) deallocate(igdstmpl)
99       if (associated(list_opt)) deallocate(list_opt)
101       return
102       end