#include #include "grib2.h" #include "gridtemplates.h" g2int getgridindex(g2int number) /*!$$$ SUBPROGRAM DOCUMENTATION BLOCK ! . . . . ! SUBPROGRAM: getgridindex ! PRGMMR: Gilbert ORG: W/NP11 DATE: 2001-06-28 ! ! ABSTRACT: This function returns the index of specified Grid ! Definition Template 3.NN (NN=number) in array templates. ! ! PROGRAM HISTORY LOG: ! 2001-06-28 Gilbert ! 2007-08-16 Vuong - Added GDT 3.204 Curvilinear Orthogonal Grid ! 2008-07-08 Vuong - Added GDT 3.32768 Rotate Lat/Lon E-grid (Arakawa) ! 2009-01-14 Vuong - Changed structure name template to gtemplate ! 2010-05-11 Vuong - Added GDT 3.32769 Rotate Lat/Lon Non-E Staggered grid (Arakawa) ! ! USAGE: index=getgridindex(number) ! INPUT ARGUMENT LIST: ! number - NN, indicating the number of the Grid Definition ! Template 3.NN that is being requested. ! ! RETURNS: Index of GDT 3.NN in array templates, if template exists. ! = -1, otherwise. ! ! REMARKS: None ! ! ATTRIBUTES: ! LANGUAGE: C ! MACHINE: IBM SP ! !$$$*/ { g2int j,getgridindex=-1; for (j=0;jtype=3; new->num=templatesgrid[index].template_num; new->maplen=templatesgrid[index].mapgridlen; new->needext=templatesgrid[index].needext; new->map=(g2int *)templatesgrid[index].mapgrid; new->extlen=0; new->ext=0; //NULL return(new); } else { printf("getgridtemplate: GDT Template 3.%d not defined.\n",(int)number); return(0); //NULL } return(0); //NULL } gtemplate *extgridtemplate(g2int number,g2int *list) /*!$$$ SUBPROGRAM DOCUMENTATION BLOCK ! . . . . ! SUBPROGRAM: extgridtemplate ! PRGMMR: Gilbert ORG: W/NP11 DATE: 2000-05-09 ! ! ABSTRACT: This subroutine generates the remaining octet map for a ! given Grid Definition Template, if required. Some Templates can ! vary depending on data values given in an earlier part of the ! Template, and it is necessary to know some of the earlier entry ! values to generate the full octet map of the Template. ! ! PROGRAM HISTORY LOG: ! 2000-05-09 Gilbert ! 2008-07-08 Vuong - Added GDT 3.32768 Rotate Lat/Lon E-grid (Arakawa) ! 2009-01-14 Vuong - Changed structure name template to gtemplate ! 2010-05-11 Vuong - Added GDT 3.32769 Rotate Lat/Lon Non-E Staggered grid (Arakawa) ! ! USAGE: CALL extgridtemplate(number,list) ! INPUT ARGUMENT LIST: ! number - NN, indicating the number of the Grid Definition ! Template 3.NN that is being requested. ! list() - The list of values for each entry in ! the Grid Definition Template. ! ! RETURN VALUE: ! - Pointer to the returned template struct. ! Returns NULL pointer, if template not found. ! ! ATTRIBUTES: ! LANGUAGE: C ! MACHINE: IBM SP ! !$$$*/ { gtemplate *new; g2int index,i; index=getgridindex(number); if (index == -1) return(0); new=getgridtemplate(number); if ( ! new->needext ) return(new); if ( number == 120 ) { new->extlen=list[1]*2; new->ext=(g2int *)malloc(sizeof(g2int)*new->extlen); for (i=0;iextlen;i++) { if ( i%2 == 0 ) { new->ext[i]=2; } else { new->ext[i]=-2; } } } else if ( number == 1000 ) { new->extlen=list[19]; new->ext=(g2int *)malloc(sizeof(g2int)*new->extlen); for (i=0;iextlen;i++) { new->ext[i]=4; } } else if ( number == 1200 ) { new->extlen=list[15]; new->ext=(g2int *)malloc(sizeof(g2int)*new->extlen); for (i=0;iextlen;i++) { new->ext[i]=4; } } return(new); }