NCEPLIBS-ip 4.0.0
gdswzd_c.F90
Go to the documentation of this file.
1module gdswzd_c_mod
2 use gdswzd_mod
3 implicit none
4
5contains
6
7 SUBROUTINE gdswzd_c(IGDTNUM,IGDTMPL,IGDTLEN,IOPT,NPTS,FILL, &
8 XPTS,YPTS,RLON,RLAT,NRET,CROT,SROT, &
9 XLON,XLAT,YLON,YLAT,AREA) bind(C, NAME='gdswzd')
10 !$$$ SUBPROGRAM DOCUMENTATION BLOCK
11 !
12 ! SUBPROGRAM: GDSWZD_C 'C' WRAPPER FOR ROUTINE GDSWZD
13 ! PRGMMR: JOVIC ORG: W/NMC23 DATE: 2016-04-10
14 !
15 ! ABSTRACT: USE THIS ROUTINE TO CALL 'GDSWZD' FROM A 'C' OR 'C++' PROGRAM.
16 ! TAKES ADVANTAGE OF THE FORTRAN/C INTEROPERABILITY STANDARD.
17 !
18 ! PROGRAM HISTORY LOG:
19 ! 2016-04-10 JOVIC INITIAL VERSION.
20 ! 2016-04-26 GAYNO UPDATE FOR GRIB 2
21 !
22 ! USAGE:
23 !
24 ! EXAMPLE: MIXED PRECSION IPLIB CALL
25 !
26 ! include "iplib.h"
27 !
28 ! int *igdtmpl;
29 ! int igdtnum, igdtlen, iopt, npts, nret;
30 ! double fill;
31 ! double *xpts, *ypts, *rlon, *rlat;
32 ! double *crot, *srot, *xlon, *xlat, *ylon, *ylat, *area;
33 !
34 ! gdswzd(igdtnum, igdtmpl, igdtlen, iopt, npts,
35 ! fill, xpts, ypts, rlon, rlat,
36 ! &nret, crot, srot, xlon,
37 ! xlat, ylon, ylat, area);
38 !
39 ! INPUT ARGUMENT LIST:
40 ! IGDTNUM - INTEGER GRID DEFINITION TEMPLATE NUMBER.
41 ! CORRESPONDS TO THE GFLD%IGDTNUM COMPONENT OF THE
42 ! NCEP G2 LIBRARY GRIDMOD DATA STRUCTURE.
43 ! 00 - EQUIDISTANT CYLINDRICAL
44 ! 01 - ROTATED EQUIDISTANT CYLINDRICAL. "E"
45 ! AND NON-"E" STAGGERED
46 ! 10 - MERCATOR CYCLINDRICAL
47 ! 20 - POLAR STEREOGRAPHIC AZIMUTHAL
48 ! 30 - LAMBERT CONFORMAL CONICAL
49 ! 40 - GAUSSIAN EQUIDISTANT CYCLINDRICAL
50 ! IGDTMPL - INTEGER (IGDTLEN) GRID DEFINITION TEMPLATE ARRAY.
51 ! CORRESPONDS TO THE GFLD%IGDTMPL COMPONENT OF THE
52 ! NCEP G2 LIBRARY GRIDMOD DATA STRUCTURE FOR
53 ! SECTION THREE.
54 ! ALL PROJECTIONS:
55 ! (1): SHAPE OF EARTH, OCTET 15
56 ! (2): SCALE FACTOR OF SPHERICAL EARTH RADIUS,
57 ! OCTET 16
58 ! (3): SCALED VALUE OF RADIUS OF SPHERICAL EARTH,
59 ! OCTETS 17-20
60 ! (4): SCALE FACTOR OF MAJOR AXIS OF ELLIPTICAL EARTH,
61 ! OCTET 21
62 ! (5): SCALED VALUE OF MAJOR AXIS OF ELLIPTICAL EARTH,
63 ! OCTETS 22-25
64 ! (6): SCALE FACTOR OF MINOR AXIS OF ELLIPTICAL EARTH,
65 ! OCTET 26
66 ! (7): SCALED VALUE OF MINOR AXIS OF ELLIPTICAL EARTH,
67 ! OCTETS 27-30
68 ! EQUIDISTANT CYCLINDRICAL:
69 ! (8): NUMBER OF POINTS ALONG A PARALLEL, OCTS 31-34
70 ! (9): NUMBER OF POINTS ALONG A MERIDIAN, OCTS 35-38
71 ! (10): BASIC ANGLE OF INITIAL PRODUCTION DOMAIN,
72 ! OCTETS 39-42.
73 ! (11): SUBDIVISIONS OF BASIC ANGLE, OCTETS 43-46
74 ! (12): LATITUDE OF FIRST GRID POINT, OCTETS 47-50
75 ! (13): LONGITUDE OF FIRST GRID POINT, OCTETS 51-54
76 ! (14): RESOLUTION AND COMPONENT FLAGS, OCTET 55
77 ! (15): LATITUDE OF LAST GRID POINT, OCTETS 56-59
78 ! (16): LONGITUDE OF LAST GRID POINT, OCTETS 60-63
79 ! (17): I-DIRECTION INCREMENT, OCTETS 64-67
80 ! (18): J-DIRECTION INCREMENT, OCTETS 68-71
81 ! (19): SCANNING MODE, OCTET 72
82 ! MERCATOR CYCLINDRICAL:
83 ! (8): NUMBER OF POINTS ALONG A PARALLEL, OCTS 31-34
84 ! (9): NUMBER OF POINTS ALONG A MERIDIAN, OCTS 35-38
85 ! (10): LATITUDE OF FIRST POINT, OCTETS 39-42
86 ! (11): LONGITUDE OF FIRST POINT, OCTETS 43-46
87 ! (12): RESOLUTION AND COMPONENT FLAGS, OCTET 47
88 ! (13): TANGENT LATITUDE, OCTETS 48-51
89 ! (14): LATITUDE OF LAST POINT, OCTETS 52-55
90 ! (15): LONGITUDE OF LAST POINT, OCTETS 56-59
91 ! (16): SCANNING MODE FLAGS, OCTET 60
92 ! (17): ORIENTATION OF GRID, OCTETS 61-64
93 ! (18): LONGITUDINAL GRID LENGTH, OCTETS 65-68
94 ! (19): LATITUDINAL GRID LENGTH, OCTETS 69-72
95 ! LAMBERT CONFORMAL CONICAL:
96 ! (8): NUMBER OF POINTS ALONG X-AXIS, OCTS 31-34
97 ! (9): NUMBER OF POINTS ALONG Y-AXIS, OCTS 35-38
98 ! (10): LATITUDE OF FIRST POINT, OCTETS 39-42
99 ! (11): LONGITUDE OF FIRST POINT, OCTETS 43-46
100 ! (12): RESOLUTION OF COMPONENT FLAG, OCTET 47
101 ! (13): LATITUDE WHERE GRID LENGTHS SPECIFIED,
102 ! OCTETS 48-51
103 ! (14): LONGITUDE OF MERIDIAN THAT IS PARALLEL TO
104 ! Y-AXIS, OCTETS 52-55
105 ! (15): X-DIRECTION GRID LENGTH, OCTETS 56-59
106 ! (16): Y-DIRECTION GRID LENGTH, OCTETS 60-63
107 ! (17): PROJECTION CENTER FLAG, OCTET 64
108 ! (18): SCANNING MODE, OCTET 65
109 ! (19): FIRST TANGENT LATITUDE FROM POLE, OCTETS 66-69
110 ! (20): SECOND TANGENT LATITUDE FROM POLE, OCTETS 70-73
111 ! (21): LATITUDE OF SOUTH POLE OF PROJECTION,
112 ! OCTETS 74-77
113 ! (22): LONGITUDE OF SOUTH POLE OF PROJECTION,
114 ! OCTETS 78-81
115 ! GAUSSIAN CYLINDRICAL:
116 ! (8): NUMBER OF POINTS ALONG A PARALLEL, OCTS 31-34
117 ! (9): NUMBER OF POINTS ALONG A MERIDIAN, OCTS 35-38
118 ! (10): BASIC ANGLE OF INITIAL PRODUCTION DOMAIN,
119 ! OCTETS 39-42
120 ! (11): SUBDIVISIONS OF BASIC ANGLE, OCTETS 43-46
121 ! (12): LATITUDE OF FIRST GRID POINT, OCTETS 47-50
122 ! (13): LONGITUDE OF FIRST GRID POINT, OCTETS 51-54
123 ! (14): RESOLUTION AND COMPONENT FLAGS, OCTET 55
124 ! (15): LATITUDE OF LAST GRID POINT, OCTETS 56-59
125 ! (16): LONGITUDE OF LAST GRID POINT, OCTETS 60-63
126 ! (17): I-DIRECTION INCREMENT, OCTETS 64-67
127 ! (18): NUMBER OF PARALLELS BETWEEN POLE AND EQUATOR,
128 ! OCTETS 68-71
129 ! (19): SCANNING MODE, OCTET 72
130 ! POLAR STEREOGRAPHIC AZIMUTHAL:
131 ! (8): NUMBER OF POINTS ALONG X-AXIS, OCTETS 31-34
132 ! (9): NUMBER OF POINTS ALONG Y-AXIS, OCTETS 35-38
133 ! (10): LATITUDE OF FIRST GRID POINT, OCTETS 39-42
134 ! (11): LONGITUDE OF FIRST GRID POINT, OCTETS 43-46
135 ! (12): RESOLUTION AND COMPONENT FLAGS, OCTET 47
136 ! (13): TRUE LATITUDE, OCTETS 48-51
137 ! (14): ORIENTATION LONGITUDE, OCTETS 52-55
138 ! (15): X-DIRECTION GRID LENGTH, OCTETS 56-59
139 ! (16): Y-DIRECTION GRID LENGTH, OCTETS 60-63
140 ! (17): PROJECTION CENTER FLAG, OCTET 64
141 ! (18): SCANNING MODE FLAGS, OCTET 65
142 ! ROTATED EQUIDISTANT CYCLINDRICAL:
143 ! (8): NUMBER OF POINTS ALONG A PARALLEL, OCTS 31-34
144 ! (9): NUMBER OF POINTS ALONG A MERIDIAN, OCTS 35-38
145 ! (10): BASIC ANGLE OF INITIAL PRODUCTION DOMAIN,
146 ! OCTETS 39-42
147 ! (11): SUBDIVISIONS OF BASIC ANGLE, OCTETS 43-46
148 ! (12): LATITUDE OF FIRST GRID POINT, OCTETS 47-50
149 ! (13): LONGITUDE OF FIRST GRID POINT, OCTETS 51-54
150 ! (14): RESOLUTION AND COMPONENT FLAGS, OCTET 55
151 ! (15): LATITUDE OF LAST GRID POINT, OCTETS 56-59
152 ! (16): LONGITUDE OF LAST GRID POINT, OCTETS 60-63
153 ! (17): I-DIRECTION INCREMENT, OCTETS 64-67
154 ! (18): J-DIRECTION INCREMENT, OCTETS 68-71
155 ! (19): SCANNING MODE, OCTET 72
156 ! (20): LATITUDE OF SOUTHERN POLE OF PROJECTION,
157 ! OCTETS 73-76
158 ! (21): LONGITUDE OF SOUTHERN POLE OF PROJECTION,
159 ! OCTETS 77-80
160 ! (22): ANGLE OF ROTATION OF PROJECTION, OCTS 81-84
161 ! IGDTLEN - INTEGER NUMBER OF ELEMENTS OF THE GRID DEFINITION
162 ! TEMPLATE ARRAY. CORRESPONDS TO THE GFLD%IGDTLEN
163 ! COMPONENT OF THE NCEP G2 LIBRARY GRIDMOD DATA STRUCTURE.
164 ! IOPT - INTEGER OPTION FLAG
165 ! ( 0 TO COMPUTE EARTH COORDS OF ALL THE GRID POINTS)
166 ! (+1 TO COMPUTE EARTH COORDS OF SELECTED GRID COORDS)
167 ! (-1 TO COMPUTE GRID COORDS OF SELECTED EARTH COORDS)
168 ! NPTS - INTEGER MAXIMUM NUMBER OF COORDINATES
169 ! FILL - REAL FILL VALUE TO SET INVALID OUTPUT DATA
170 ! (MUST BE IMPOSSIBLE VALUE; SUGGESTED VALUE: -9999.)
171 ! XPTS - REAL (NPTS) GRID X POINT COORDINATES IF IOPT>0
172 ! YPTS - REAL (NPTS) GRID Y POINT COORDINATES IF IOPT>0
173 ! RLON - REAL (NPTS) EARTH LONGITUDES IN DEGREES E IF IOPT<0
174 ! (ACCEPTABLE RANGE: -360. TO 360.)
175 ! RLAT - REAL (NPTS) EARTH LATITUDES IN DEGREES N IF IOPT<0
176 ! (ACCEPTABLE RANGE: -90. TO 90.)
177 !
178 ! OUTPUT ARGUMENT LIST:
179 ! XPTS - REAL (NPTS) GRID X POINT COORDINATES IF IOPT<=0
180 ! YPTS - REAL (NPTS) GRID Y POINT COORDINATES IF IOPT<=0
181 ! RLON - REAL (NPTS) EARTH LONGITUDES IN DEGREES E IF IOPT>=0
182 ! RLAT - REAL (NPTS) EARTH LATITUDES IN DEGREES N IF IOPT>=0
183 ! NRET - INTEGER NUMBER OF VALID POINTS COMPUTED
184 ! (-1 IF PROJECTION UNRECOGNIZED)
185 ! CROT - REAL (NPTS) CLOCKWISE VECTOR ROTATION COSINES
186 ! SROT - REAL (NPTS) CLOCKWISE VECTOR ROTATION SINES
187 ! (UGRID=CROT*UEARTH-SROT*VEARTH;
188 ! VGRID=SROT*UEARTH+CROT*VEARTH)
189 ! XLON - REAL (NPTS) DX/DLON IN 1/DEGREES
190 ! XLAT - REAL (NPTS) DX/DLAT IN 1/DEGREES
191 ! YLON - REAL (NPTS) DY/DLON IN 1/DEGREES
192 ! YLAT - REAL (NPTS) DY/DLAT IN 1/DEGREES
193 ! AREA - REAL (NPTS) AREA WEIGHTS IN M**2
194 ! (PROPORTIONAL TO THE SQUARE OF THE MAP FACTOR
195 ! IN THE CASE OF CONFORMAL PROJECTIONS)
196 !
197 ! SUBPROGRAMS CALLED:
198 ! GDSWZD GDS WIZARD
199 !
200 ! ATTRIBUTES:
201 ! LANGUAGE: FORTRAN 90
202 !
203 !$$$
204 !
205 use, INTRINSIC :: iso_c_binding
206
207 USE gdswzd_mod
208
209 IMPLICIT NONE
210
211#if (LSIZE==8)
212 INTEGER(KIND=C_LONG), INTENT(IN) :: IGDTMPL(IGDTLEN)
213 INTEGER(KIND=C_LONG), VALUE, INTENT(IN) :: IGDTNUM, IGDTLEN
214 INTEGER(KIND=C_LONG), VALUE, INTENT(IN) :: IOPT, NPTS
215 INTEGER(KIND=C_LONG), INTENT(OUT) :: NRET
216#else
217 INTEGER(KIND=C_INT), INTENT(IN) :: IGDTMPL(IGDTLEN)
218 INTEGER(KIND=C_INT), VALUE, INTENT(IN) :: IGDTNUM, IGDTLEN
219 INTEGER(KIND=C_INT), VALUE, INTENT(IN) :: IOPT, NPTS
220 INTEGER(KIND=C_INT), INTENT(OUT) :: NRET
221#endif
222
223#if (LSIZE==8 || LSIZE==D)
224 REAL(KIND=c_double), VALUE, INTENT(IN) :: fill
225 REAL(KIND=c_double), INTENT(INOUT) :: xpts(npts),ypts(npts),rlon(npts),rlat(npts)
226 REAL(KIND=c_double), INTENT(OUT) :: crot(npts),srot(npts),xlon(npts),xlat(npts)
227 REAL(KIND=c_double), INTENT(OUT) :: ylon(npts),ylat(npts),area(npts)
228#else
229 REAL(KIND=c_float), VALUE, INTENT(IN) :: fill
230 REAL(KIND=c_float), INTENT(INOUT) :: xpts(npts),ypts(npts),rlon(npts),rlat(npts)
231 REAL(KIND=c_float), INTENT(OUT) :: crot(npts),srot(npts),xlon(npts),xlat(npts)
232 REAL(KIND=c_float), INTENT(OUT) :: ylon(npts),ylat(npts),area(npts)
233#endif
234
235 CALL gdswzd(igdtnum,igdtmpl,igdtlen,iopt,npts,fill, &
236 xpts,ypts,rlon,rlat,nret, &
237 crot,srot,xlon,xlat,ylon,ylat,area)
238
239 END SUBROUTINE gdswzd_c
240
241
245 !! TAKES ADVANTAGE OF THE FORTRAN/C INTEROPERABILITY STANDARD.
295 SUBROUTINE gdswzd_c_grib1(KGDS,IOPT,NPTS,FILL,XPTS,YPTS,RLON,RLAT,NRET, &
296 CROT,SROT,XLON,XLAT,YLON,YLAT,AREA) bind(C, NAME='gdswzd_grib1')
297 use, INTRINSIC :: iso_c_binding
298
299 USE gdswzd_mod
300
301 IMPLICIT NONE
302
303#if (LSIZE==8)
304 INTEGER(KIND=C_LONG), INTENT(IN) :: KGDS(200)
305 INTEGER(KIND=C_LONG), VALUE, INTENT(IN) :: IOPT
306 INTEGER(KIND=C_LONG), VALUE, INTENT(IN) :: NPTS
307 INTEGER(KIND=C_LONG), INTENT(OUT) :: NRET
308#else
309 INTEGER(KIND=C_INT), INTENT(IN) :: KGDS(200)
310 INTEGER(KIND=C_INT), VALUE, INTENT(IN) :: IOPT
311 INTEGER(KIND=C_INT), VALUE, INTENT(IN) :: NPTS
312 INTEGER(KIND=C_INT), INTENT(OUT) :: NRET
313#endif
314
315#if (LSIZE==8 || LSIZE==D)
316 REAL(KIND=c_double), VALUE, INTENT(IN) :: fill
317 REAL(KIND=c_double), INTENT(INOUT) :: xpts(npts),ypts(npts),rlon(npts),rlat(npts)
318 REAL(KIND=c_double), INTENT(OUT) :: crot(npts),srot(npts),xlon(npts),xlat(npts)
319 REAL(KIND=c_double), INTENT(OUT) :: ylon(npts),ylat(npts),area(npts)
320#else
321 REAL(KIND=c_float), VALUE, INTENT(IN) :: fill
322 REAL(KIND=c_float), INTENT(INOUT) :: xpts(npts),ypts(npts),rlon(npts),rlat(npts)
323 REAL(KIND=c_float), INTENT(OUT) :: crot(npts),srot(npts),xlon(npts),xlat(npts)
324 REAL(KIND=c_float), INTENT(OUT) :: ylon(npts),ylat(npts),area(npts)
325#endif
326
327 CALL gdswzd(kgds,iopt,npts,fill,xpts,ypts,rlon,rlat,nret, &
328 crot,srot,xlon,xlat,ylon,ylat,area)
329
330 END SUBROUTINE gdswzd_c_grib1
331
332end module gdswzd_c_mod
Driver module for gdswzd routines.
Definition: gdswzd_mod.f90:25