NOTICE: This version of the NSF Unidata web site (archive.unidata.ucar.edu) is no longer being updated.
Current content can be found at unidata.ucar.edu.

To learn about what's going on, see About the Archive Site.

Re: Incorrect netCDF file growth


>      From: "Glenn P. Davis" <davis@xxxxxxxxxxxxxxxx>

> Byte and short variable sizes are rounded up to the next even 32 bit boundary.
> This is so that 'seeks' are always done "words", not bytes within a word.
> This is true within "record" varables as well.
> 

Yes, it sounds reasonable, but seems not to be true in all cases.
For example, you have one variable and 9 NC_BYTE-long vector-records
were written into the file.  main() is fed by 1,2,3,4,5 etc., the
number of records:

---------------------------------------------------------------------*/
#include <stdio.h>
#include "netcdf.h"

int cdfid;
int v1_id, v2_id;
short v1;
char  v2;
char* cp;

main(argc,argv)
int argc;
char **argv;
{
        int n,i,ix[1];
        if(argc < 2)
          {
            n = 1;                              /* default to one record */
            cp="1";
          }
        else
          {
            n = atoi(argv[1]);  /* or request number of records */
            cp=argv[1];
          }
        docdf();                                /* define and create the file */
        v1 = 1;
        v2 = 2;
        for(i = 0; i < n; i++)  /* write the requested records */
        {
                ix[0] = i;
                ncvarput1(cdfid, v1_id, ix, (void *) &v1);
        }
        ncclose(cdfid);
}       
/*---------------------------------------------------------------------*/
docdf()
{
        int dims[3];
        int record_dim;
        int vector_dim;
        char name[100];
                
        strcat(name, "gabor.");
        strcat(name, cp);
        cdfid = nccreate( name, NC_CLOBBER);

        record_dim = ncdimdef(cdfid, "record", NC_UNLIMITED);
        vector_dim = ncdimdef(cdfid, "vector", 9);

        dims[0] = record_dim;
        dims[1] = vector_dim;

        v1_id = ncvardef (cdfid, "var1", NC_BYTE, 2, dims);
        ncattput(cdfid,NC_GLOBAL,"title",NC_CHAR,13,(void *)"CDF TEST DATA");
        ncendef (cdfid);
}
/*----------------------------------------------------------------------*/

And see the sizes I received:

-rw-r-----  1 gabor         152 Mar 26 16:27 gabor.1  <--   1 record
-rw-r-----  1 gabor         161 Mar 26 16:27 gabor.2  <--   2 records
-rw-r-----  1 gabor         170 Mar 26 16:27 gabor.3  <--   3 records
-rw-r-----  1 gabor         179 Mar 26 16:27 gabor.4  <--   4 records
-rw-r-----  1 gabor         188 Mar 26 16:27 gabor.5  <--   5 records

Absolute file size is not adjusted to word boundary. The increment
caused by adding one more record is always 9 bytes, it is not rounded
to word boundary.

********************************************************************************
********************************************************************************

And now the honey on the cake: I had TWO variables, Each contained
1,2,3 records. The record was 1,2,3 and 5 NC_BYTE long.

record = 1 NC_BYTE
variable 1 - NC_BYTE(1) : variable 2 - NC_BYTE(1)
file size w/ 1 record = 188  - 2 records = 196 - 3 records = 204 (diff = 8)

                                                                should be 2
record = 2 NC_BYTEs
variable 1 - NC_BYTE(2) : variable 2 - NC_BYTE(2)
file size w/ 1 record = 188  - 2 records = 196 - 3 records = 204 (diff = 8)
                                                                should be 4

record = 3 NC_BYTEs
variable 1 - NC_BYTE(3) : variable 2 - NC_BYTE(3)
file size w/ 1 record = 188  - 2 records = 196 - 3 records = 204 (diff = 8)
                                                                should be 6

record = 5 NC_BYTEs
variable 1 - NC_BYTE(5) : variable 2 - NC_BYTE(5)
file size w/ 1 record = 196  - 2 records = 212 - 3 records = 228 (diff = 16)
                                                                should be 10


NOW it was rounded!!! But when I had only ONE variable, it was not
rounded!?!? How does it come? //
********************************************************************************
********************************************************************************

                                Gabor Fichtinger

                                Scientific Visualization Group,
                                Center for High Performance Computing
                                The University of Texas System
                                Balcones Research Center, 1.154 CMS
                                10100 Burnet Road, Austin, TX, 78758-4497
                                Ph.  : (512) 471 2409
                                Ph.  : 1-800-262-2472/2409 (toll free)
                                Fax  : (512) 471 2445   
                                Email: gabor@xxxxxxxxxxxxxxx
                              __o
             __o             -\<,
            -\<,  __________O / O
___________O / O                        


  • 1992 messages navigation, sorted by:
    1. Thread
    2. Subject
    3. Author
    4. Date
    5. ↑ Table Of Contents
  • Search the netcdfgroup archives: