Line data Source code
1 : #include "grib2.h" 2 : 3 13 : void cmplxpack(g2float *fld,g2int ndpts, g2int idrsnum,g2int *idrstmpl, 4 : unsigned char *cpack, g2int *lcpack) 5 : //$$$ SUBPROGRAM DOCUMENTATION BLOCK 6 : // . . . . 7 : // SUBPROGRAM: cmplxpack 8 : // PRGMMR: Gilbert ORG: W/NP11 DATE: 2004-08-27 9 : // 10 : // ABSTRACT: This subroutine packs up a data field using a complex 11 : // packing algorithm as defined in the GRIB2 documentation. It 12 : // supports GRIB2 complex packing templates with or without 13 : // spatial differences (i.e. DRTs 5.2 and 5.3). 14 : // It also fills in GRIB2 Data Representation Template 5.2 or 5.3 15 : // with the appropriate values. 16 : // 17 : // PROGRAM HISTORY LOG: 18 : // 2004-08-27 Gilbert 19 : // 20 : // USAGE: cmplxpack(g2float *fld,g2int ndpts, g2int idrsnum,g2int *idrstmpl, 21 : // unsigned char *cpack, g2int *lcpack) 22 : // INPUT ARGUMENT LIST: 23 : // fld[] - Contains the data values to pack 24 : // ndpts - The number of data values in array fld[] 25 : // idrsnum - Data Representation Template number 5.N 26 : // Must equal 2 or 3. 27 : // idrstmpl - Contains the array of values for Data Representation 28 : // Template 5.2 or 5.3 29 : // [0] = Reference value - ignored on input 30 : // [1] = Binary Scale Factor 31 : // [2] = Decimal Scale Factor 32 : // . 33 : // . 34 : // [6] = Missing value management 35 : // [7] = Primary missing value 36 : // [8] = Secondary missing value 37 : // . 38 : // . 39 : // [16] = Order of Spatial Differencing ( 1 or 2 ) 40 : // . 41 : // . 42 : // 43 : // OUTPUT ARGUMENT LIST: 44 : // idrstmpl - Contains the array of values for Data Representation 45 : // Template 5.3 46 : // [0] = Reference value - set by compack routine. 47 : // [1] = Binary Scale Factor - unchanged from input 48 : // [2] = Decimal Scale Factor - unchanged from input 49 : // . 50 : // . 51 : // cpack - The packed data field (character*1 array) 52 : // lcpack - length of packed field cpack[]. 53 : // 54 : // REMARKS: None 55 : // 56 : // ATTRIBUTES: 57 : // LANGUAGE: C 58 : // MACHINE: IBM SP 59 : // 60 : //$$$ 61 : { 62 : 63 : 64 13 : if ( idrstmpl[6] == 0 ) { // No internal missing values 65 9 : compack(fld,ndpts,idrsnum,idrstmpl,cpack,lcpack); 66 : } 67 4 : else if ( idrstmpl[6] == 1 || idrstmpl[6] == 2) { 68 4 : misspack(fld,ndpts,idrsnum,idrstmpl,cpack,lcpack); 69 : } 70 : else { 71 0 : printf("cmplxpack: Don:t recognize Missing value option."); 72 0 : *lcpack=-1; 73 : } 74 : 75 13 : }