SUBROUTINE GDSWZD_C(IGDTNUM,IGDTMPL,IGDTLEN,IOPT,NPTS,FILL, & XPTS,YPTS,RLON,RLAT,NRET,CROT,SROT, & XLON,XLAT,YLON,YLAT,AREA) BIND(C, NAME='gdswzd') !$$$ SUBPROGRAM DOCUMENTATION BLOCK ! ! $Revision: 74917 $ ! ! SUBPROGRAM: GDSWZD_C 'C' WRAPPER FOR ROUTINE GDSWZD ! PRGMMR: JOVIC ORG: W/NMC23 DATE: 2016-04-10 ! ! ABSTRACT: USE THIS ROUTINE TO CALL 'GDSWZD' FROM A 'C' OR 'C++' PROGRAM. ! TAKES ADVANTAGE OF THE FORTRAN/C INTEROPERABILITY STANDARD. ! ! PROGRAM HISTORY LOG: ! 2016-04-10 JOVIC INITIAL VERSION. ! 2016-04-26 GAYNO UPDATE FOR GRIB 2 ! ! USAGE: ! ! EXAMPLE: MIXED PRECSION IPLIB CALL ! ! include "iplib.h" ! ! int *igdtmpl; ! int igdtnum, igdtlen, iopt, npts, nret; ! double fill; ! double *xpts, *ypts, *rlon, *rlat; ! double *crot, *srot, *xlon, *xlat, *ylon, *ylat, *area; ! ! gdswzd(igdtnum, igdtmpl, igdtlen, iopt, npts, ! fill, xpts, ypts, rlon, rlat, ! &nret, crot, srot, xlon, ! xlat, ylon, ylat, area); ! ! INPUT ARGUMENT LIST: ! IGDTNUM - INTEGER GRID DEFINITION TEMPLATE NUMBER. ! CORRESPONDS TO THE GFLD%IGDTNUM COMPONENT OF THE ! NCEP G2 LIBRARY GRIDMOD DATA STRUCTURE. ! 00 - EQUIDISTANT CYLINDRICAL ! 01 - ROTATED EQUIDISTANT CYLINDRICAL. "E" ! AND NON-"E" STAGGERED ! 10 - MERCATOR CYCLINDRICAL ! 20 - POLAR STEREOGRAPHIC AZIMUTHAL ! 30 - LAMBERT CONFORMAL CONICAL ! 40 - GAUSSIAN EQUIDISTANT CYCLINDRICAL ! IGDTMPL - INTEGER (IGDTLEN) GRID DEFINITION TEMPLATE ARRAY. ! CORRESPONDS TO THE GFLD%IGDTMPL COMPONENT OF THE ! NCEP G2 LIBRARY GRIDMOD DATA STRUCTURE FOR ! SECTION THREE. ! ALL PROJECTIONS: ! (1): SHAPE OF EARTH, OCTET 15 ! (2): SCALE FACTOR OF SPHERICAL EARTH RADIUS, ! OCTET 16 ! (3): SCALED VALUE OF RADIUS OF SPHERICAL EARTH, ! OCTETS 17-20 ! (4): SCALE FACTOR OF MAJOR AXIS OF ELLIPTICAL EARTH, ! OCTET 21 ! (5): SCALED VALUE OF MAJOR AXIS OF ELLIPTICAL EARTH, ! OCTETS 22-25 ! (6): SCALE FACTOR OF MINOR AXIS OF ELLIPTICAL EARTH, ! OCTET 26 ! (7): SCALED VALUE OF MINOR AXIS OF ELLIPTICAL EARTH, ! OCTETS 27-30 ! EQUIDISTANT CYCLINDRICAL: ! (8): NUMBER OF POINTS ALONG A PARALLEL, OCTS 31-34 ! (9): NUMBER OF POINTS ALONG A MERIDIAN, OCTS 35-38 ! (10): BASIC ANGLE OF INITIAL PRODUCTION DOMAIN, ! OCTETS 39-42. ! (11): SUBDIVISIONS OF BASIC ANGLE, OCTETS 43-46 ! (12): LATITUDE OF FIRST GRID POINT, OCTETS 47-50 ! (13): LONGITUDE OF FIRST GRID POINT, OCTETS 51-54 ! (14): RESOLUTION AND COMPONENT FLAGS, OCTET 55 ! (15): LATITUDE OF LAST GRID POINT, OCTETS 56-59 ! (16): LONGITUDE OF LAST GRID POINT, OCTETS 60-63 ! (17): I-DIRECTION INCREMENT, OCTETS 64-67 ! (18): J-DIRECTION INCREMENT, OCTETS 68-71 ! (19): SCANNING MODE, OCTET 72 ! MERCATOR CYCLINDRICAL: ! (8): NUMBER OF POINTS ALONG A PARALLEL, OCTS 31-34 ! (9): NUMBER OF POINTS ALONG A MERIDIAN, OCTS 35-38 ! (10): LATITUDE OF FIRST POINT, OCTETS 39-42 ! (11): LONGITUDE OF FIRST POINT, OCTETS 43-46 ! (12): RESOLUTION AND COMPONENT FLAGS, OCTET 47 ! (13): TANGENT LATITUDE, OCTETS 48-51 ! (14): LATITUDE OF LAST POINT, OCTETS 52-55 ! (15): LONGITUDE OF LAST POINT, OCTETS 56-59 ! (16): SCANNING MODE FLAGS, OCTET 60 ! (17): ORIENTATION OF GRID, OCTETS 61-64 ! (18): LONGITUDINAL GRID LENGTH, OCTETS 65-68 ! (19): LATITUDINAL GRID LENGTH, OCTETS 69-72 ! LAMBERT CONFORMAL CONICAL: ! (8): NUMBER OF POINTS ALONG X-AXIS, OCTS 31-34 ! (9): NUMBER OF POINTS ALONG Y-AXIS, OCTS 35-38 ! (10): LATITUDE OF FIRST POINT, OCTETS 39-42 ! (11): LONGITUDE OF FIRST POINT, OCTETS 43-46 ! (12): RESOLUTION OF COMPONENT FLAG, OCTET 47 ! (13): LATITUDE WHERE GRID LENGTHS SPECIFIED, ! OCTETS 48-51 ! (14): LONGITUDE OF MERIDIAN THAT IS PARALLEL TO ! Y-AXIS, OCTETS 52-55 ! (15): X-DIRECTION GRID LENGTH, OCTETS 56-59 ! (16): Y-DIRECTION GRID LENGTH, OCTETS 60-63 ! (17): PROJECTION CENTER FLAG, OCTET 64 ! (18): SCANNING MODE, OCTET 65 ! (19): FIRST TANGENT LATITUDE FROM POLE, OCTETS 66-69 ! (20): SECOND TANGENT LATITUDE FROM POLE, OCTETS 70-73 ! (21): LATITUDE OF SOUTH POLE OF PROJECTION, ! OCTETS 74-77 ! (22): LONGITUDE OF SOUTH POLE OF PROJECTION, ! OCTETS 78-81 ! GAUSSIAN CYLINDRICAL: ! (8): NUMBER OF POINTS ALONG A PARALLEL, OCTS 31-34 ! (9): NUMBER OF POINTS ALONG A MERIDIAN, OCTS 35-38 ! (10): BASIC ANGLE OF INITIAL PRODUCTION DOMAIN, ! OCTETS 39-42 ! (11): SUBDIVISIONS OF BASIC ANGLE, OCTETS 43-46 ! (12): LATITUDE OF FIRST GRID POINT, OCTETS 47-50 ! (13): LONGITUDE OF FIRST GRID POINT, OCTETS 51-54 ! (14): RESOLUTION AND COMPONENT FLAGS, OCTET 55 ! (15): LATITUDE OF LAST GRID POINT, OCTETS 56-59 ! (16): LONGITUDE OF LAST GRID POINT, OCTETS 60-63 ! (17): I-DIRECTION INCREMENT, OCTETS 64-67 ! (18): NUMBER OF PARALLELS BETWEEN POLE AND EQUATOR, ! OCTETS 68-71 ! (19): SCANNING MODE, OCTET 72 ! POLAR STEREOGRAPHIC AZIMUTHAL: ! (8): NUMBER OF POINTS ALONG X-AXIS, OCTETS 31-34 ! (9): NUMBER OF POINTS ALONG Y-AXIS, OCTETS 35-38 ! (10): LATITUDE OF FIRST GRID POINT, OCTETS 39-42 ! (11): LONGITUDE OF FIRST GRID POINT, OCTETS 43-46 ! (12): RESOLUTION AND COMPONENT FLAGS, OCTET 47 ! (13): TRUE LATITUDE, OCTETS 48-51 ! (14): ORIENTATION LONGITUDE, OCTETS 52-55 ! (15): X-DIRECTION GRID LENGTH, OCTETS 56-59 ! (16): Y-DIRECTION GRID LENGTH, OCTETS 60-63 ! (17): PROJECTION CENTER FLAG, OCTET 64 ! (18): SCANNING MODE FLAGS, OCTET 65 ! ROTATED EQUIDISTANT CYCLINDRICAL: ! (8): NUMBER OF POINTS ALONG A PARALLEL, OCTS 31-34 ! (9): NUMBER OF POINTS ALONG A MERIDIAN, OCTS 35-38 ! (10): BASIC ANGLE OF INITIAL PRODUCTION DOMAIN, ! OCTETS 39-42 ! (11): SUBDIVISIONS OF BASIC ANGLE, OCTETS 43-46 ! (12): LATITUDE OF FIRST GRID POINT, OCTETS 47-50 ! (13): LONGITUDE OF FIRST GRID POINT, OCTETS 51-54 ! (14): RESOLUTION AND COMPONENT FLAGS, OCTET 55 ! (15): LATITUDE OF LAST GRID POINT, OCTETS 56-59 ! (16): LONGITUDE OF LAST GRID POINT, OCTETS 60-63 ! (17): I-DIRECTION INCREMENT, OCTETS 64-67 ! (18): J-DIRECTION INCREMENT, OCTETS 68-71 ! (19): SCANNING MODE, OCTET 72 ! (20): LATITUDE OF SOUTHERN POLE OF PROJECTION, ! OCTETS 73-76 ! (21): LONGITUDE OF SOUTHERN POLE OF PROJECTION, ! OCTETS 77-80 ! (22): ANGLE OF ROTATION OF PROJECTION, OCTS 81-84 ! IGDTLEN - INTEGER NUMBER OF ELEMENTS OF THE GRID DEFINITION ! TEMPLATE ARRAY. CORRESPONDS TO THE GFLD%IGDTLEN ! COMPONENT OF THE NCEP G2 LIBRARY GRIDMOD DATA STRUCTURE. ! IOPT - INTEGER OPTION FLAG ! ( 0 TO COMPUTE EARTH COORDS OF ALL THE GRID POINTS) ! (+1 TO COMPUTE EARTH COORDS OF SELECTED GRID COORDS) ! (-1 TO COMPUTE GRID COORDS OF SELECTED EARTH COORDS) ! NPTS - INTEGER MAXIMUM NUMBER OF COORDINATES ! FILL - REAL FILL VALUE TO SET INVALID OUTPUT DATA ! (MUST BE IMPOSSIBLE VALUE; SUGGESTED VALUE: -9999.) ! XPTS - REAL (NPTS) GRID X POINT COORDINATES IF IOPT>0 ! YPTS - REAL (NPTS) GRID Y POINT COORDINATES IF IOPT>0 ! RLON - REAL (NPTS) EARTH LONGITUDES IN DEGREES E IF IOPT<0 ! (ACCEPTABLE RANGE: -360. TO 360.) ! RLAT - REAL (NPTS) EARTH LATITUDES IN DEGREES N IF IOPT<0 ! (ACCEPTABLE RANGE: -90. TO 90.) ! ! OUTPUT ARGUMENT LIST: ! XPTS - REAL (NPTS) GRID X POINT COORDINATES IF IOPT<=0 ! YPTS - REAL (NPTS) GRID Y POINT COORDINATES IF IOPT<=0 ! RLON - REAL (NPTS) EARTH LONGITUDES IN DEGREES E IF IOPT>=0 ! RLAT - REAL (NPTS) EARTH LATITUDES IN DEGREES N IF IOPT>=0 ! NRET - INTEGER NUMBER OF VALID POINTS COMPUTED ! (-1 IF PROJECTION UNRECOGNIZED) ! CROT - REAL (NPTS) CLOCKWISE VECTOR ROTATION COSINES ! SROT - REAL (NPTS) CLOCKWISE VECTOR ROTATION SINES ! (UGRID=CROT*UEARTH-SROT*VEARTH; ! VGRID=SROT*UEARTH+CROT*VEARTH) ! XLON - REAL (NPTS) DX/DLON IN 1/DEGREES ! XLAT - REAL (NPTS) DX/DLAT IN 1/DEGREES ! YLON - REAL (NPTS) DY/DLON IN 1/DEGREES ! YLAT - REAL (NPTS) DY/DLAT IN 1/DEGREES ! AREA - REAL (NPTS) AREA WEIGHTS IN M**2 ! (PROPORTIONAL TO THE SQUARE OF THE MAP FACTOR ! IN THE CASE OF CONFORMAL PROJECTIONS) ! ! SUBPROGRAMS CALLED: ! GDSWZD GDS WIZARD ! ! ATTRIBUTES: ! LANGUAGE: FORTRAN 90 ! !$$$ ! USE, INTRINSIC :: ISO_C_BINDING USE GDSWZD_MOD IMPLICIT NONE !#if (LSIZE==8) ! INTEGER(KIND=C_LONG), INTENT(IN) :: IGDTMPL(IGDTLEN) ! INTEGER(KIND=C_LONG), VALUE, INTENT(IN) :: IGDTNUM, IGDTLEN ! INTEGER(KIND=C_LONG), VALUE, INTENT(IN) :: IOPT, NPTS ! INTEGER(KIND=C_LONG), INTENT(OUT) :: NRET !#else INTEGER(KIND=C_INT), INTENT(IN) :: IGDTMPL(IGDTLEN) INTEGER(KIND=C_INT), VALUE, INTENT(IN) :: IGDTNUM, IGDTLEN INTEGER(KIND=C_INT), VALUE, INTENT(IN) :: IOPT, NPTS INTEGER(KIND=C_INT), INTENT(OUT) :: NRET !#endif !#if (LSIZE==8 || LSIZE==D) REAL(KIND=C_DOUBLE), VALUE, INTENT(IN) :: FILL REAL(KIND=C_DOUBLE), INTENT(INOUT) :: XPTS(NPTS),YPTS(NPTS),RLON(NPTS),RLAT(NPTS) REAL(KIND=C_DOUBLE), INTENT(OUT) :: CROT(NPTS),SROT(NPTS),XLON(NPTS),XLAT(NPTS) REAL(KIND=C_DOUBLE), INTENT(OUT) :: YLON(NPTS),YLAT(NPTS),AREA(NPTS) !#else ! REAL(KIND=C_FLOAT), VALUE, INTENT(IN) :: FILL ! REAL(KIND=C_FLOAT), INTENT(INOUT) :: XPTS(NPTS),YPTS(NPTS),RLON(NPTS),RLAT(NPTS) ! REAL(KIND=C_FLOAT), INTENT(OUT) :: CROT(NPTS),SROT(NPTS),XLON(NPTS),XLAT(NPTS) ! REAL(KIND=C_FLOAT), INTENT(OUT) :: YLON(NPTS),YLAT(NPTS),AREA(NPTS) !#endif CALL GDSWZD(IGDTNUM,IGDTMPL,IGDTLEN,IOPT,NPTS,FILL, & XPTS,YPTS,RLON,RLAT,NRET, & CROT,SROT,XLON,XLAT,YLON,YLAT,AREA) END SUBROUTINE GDSWZD_C