SUBROUTINE GDSWZD_C(KGDS,IOPT,NPTS,FILL,XPTS,YPTS,RLON,RLAT,NRET, & CROT,SROT,XLON,XLAT,YLON,YLAT,AREA) BIND(C, NAME='gdswzd') !$$$ SUBPROGRAM DOCUMENTATION BLOCK ! ! 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 ! ! USAGE: ! ! EXAMPLE: MIXED PRECSION IPLIB CALL ! ! include "iplib.h" ! ! int kgds[200]; ! int iopt, npts, nret; ! double fill; ! double *xpts, *ypts, *rlon, *rlat; ! double *crot, *srot, *xlon, *xlat, *ylon, *ylat, *area; ! ! gdswzd(kgds, iopt, npts, fill, ! xpts, ypts, rlon, rlat, ! &nret, crot, srot, xlon, ! xlat, ylon, ylat, area); ! ! INPUT ARGUMENT LIST: ! KGDS - INTEGER (200) GDS PARAMETERS AS DECODED BY W3FI63 ! 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) :: KGDS(200) INTEGER(KIND=C_LONG), VALUE, INTENT(IN) :: IOPT INTEGER(KIND=C_LONG), VALUE, INTENT(IN) :: NPTS INTEGER(KIND=C_LONG), INTENT(OUT) :: NRET #else INTEGER(KIND=C_INT), INTENT(IN) :: KGDS(200) INTEGER(KIND=C_INT), VALUE, INTENT(IN) :: IOPT INTEGER(KIND=C_INT), VALUE, INTENT(IN) :: 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(KGDS,IOPT,NPTS,FILL,XPTS,YPTS,RLON,RLAT,NRET, & CROT,SROT,XLON,XLAT,YLON,YLAT,AREA) END SUBROUTINE GDSWZD_C