awips2/nativeLib/rary.cots.g2clib/gridtemplates.c
Bryan Kowal 9a472e1bbe Issue #2396 - updated grib2.so to use a newer version of g2clib
Former-commit-id: 6730ef07554b6e335427bcf08dded302fcc4a398
2013-10-16 12:54:58 -05:00

184 lines
5.9 KiB
C
Executable file

#include <stdlib.h>
#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;j<MAXGRIDTEMP;j++) {
if (number == templatesgrid[j].template_num) {
getgridindex=j;
return(getgridindex);
}
}
return(getgridindex);
}
gtemplate *getgridtemplate(g2int number)
/*!$$$ SUBPROGRAM DOCUMENTATION BLOCK
! . . . .
! SUBPROGRAM: getgridtemplate
! PRGMMR: Gilbert ORG: W/NP11 DATE: 2000-05-09
!
! ABSTRACT: This subroutine returns grid template information for a
! specified Grid Definition Template 3.NN.
! The number of entries in the template is returned along with a map
! of the number of octets occupied by each entry. Also, a flag is
! returned to indicate whether the template would need to be extended.
!
! PROGRAM HISTORY LOG:
! 2000-05-09 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)
! 2010-05-11 Vuong - Added GDT 3.32769 Rotate Lat/Lon Non-E Staggered grid (Arakawa)
! 2009-01-14 Vuong - Changed structure name template to gtemplate
!
! USAGE: gtemplate *getgridtemplate(number)
! INPUT ARGUMENT LIST:
! number - NN, indicating the number of the Grid Definition
! Template 3.NN that is being requested.
!
! RETURN VALUE:
! - Pointer to the returned template struct.
! Returns NULL pointer, if template not found.
!
! REMARKS: None
!
! ATTRIBUTES:
! LANGUAGE: C
! MACHINE: IBM SP
!
!$$$*/
{
g2int index;
gtemplate *new;
index=getgridindex(number);
if (index != -1) {
new=(gtemplate *)malloc(sizeof(gtemplate));
new->type=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;i<new->extlen;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;i<new->extlen;i++) {
new->ext[i]=4;
}
}
else if ( number == 1200 ) {
new->extlen=list[15];
new->ext=(g2int *)malloc(sizeof(g2int)*new->extlen);
for (i=0;i<new->extlen;i++) {
new->ext[i]=4;
}
}
return(new);
}