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.

[netcdfgroup] Setting Unlimited Size on a Dimension using NetCDF-C++

I'm using the NetCDF-C++ library (4.3.1), and I want to write a netCDF file
with an unlimited-size dimension. From what I understood from the
documentation, you call the ncFile addDim method without specifying the
size of the data.

When I write my program with that, the netCDF header says that my dimension
is unlimited, but when I look at the variable I used that is directly
associated with that dimension it becomes all nulls... If I specify the
size of that dimension then the data is no longer nulls, but I don't get
the unlimited dimension size. I've got an example below where I want time
to be the unlimited dimension:

NetCDF example
netcdf example {
dimensions:
        latitude = 181 ;
        longitude = 360 ;
        time = UNLIMITED ; // (30 currently)
variables:
        float latitude(latitude) ;
                latitude:units = "degrees_north" ;
                latitude:long_name = "latitude" ;
        float longitude(longitude) ;
                longitude:units = "degrees_east" ;
                longitude:long_name = "longitude" ;
        double time(time) ;
                time:units = "seconds since 1970-01-01 00:00:00.0 0:00" ;
                time:reference_time = "1637193600." ;
                time:reference_time_type = "3" ;
                time:reference_date = "2021.11.18 00:00:00 UTC" ;
                time:time_step_setting = "auto" ;
                time:time_step = "21600." ;
        float sample_observation(time, latitude, longitude) ;
                sample_observation:units = "m" ;
                sample_observation:long_name = "sample observation" ;
                sample_observation:short_name = "so" ;
data:

 time = _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _,
    _, _, _, _, _, _, _ ;
}

Code Part:
```
void addData(netCDF::NcFile* file) {
    netCDF::NcDim latDim = file->addDim(LATITUDE, LAT_SIZE);
    netCDF::NcDim lonDim = file->addDim(LONGITUDE, LON_SIZE);
    netCDF::NcDim timeDim = file->addDim(TIME);
    std::vector<netCDF::NcDim> dims;
    dims.push_back(timeDim);
    dims.push_back(latDim);
    dims.push_back(lonDim);

    float lats[LAT_SIZE] = {-90, -89, -88, -87, -86, -85, -84, -83, -82,
-81, -80, -79, -78,
                            -77, -76, -75, -74, -73, -72, -71, -70, -69,
-68, -67, -66, -65, -64,
                            -63, -62, -61, -60, -59, -58, -57, -56, -55,
-54, -53, -52, -51, -50,
                            -49, -48, -47, -46, -45, -44, -43, -42, -41,
-40, -39, -38, -37, -36,
                            -35, -34, -33, -32, -31, -30, -29, -28, -27,
-26, -25, -24, -23, -22,
                            -21, -20, -19, -18, -17, -16, -15, -14, -13,
-12, -11, -10, -9, -8, -7,
                            -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7,
8, 9, 10, 11, 12, 13, 14,
                            15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
27, 28, 29, 30, 31, 32,
                            33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
45, 46, 47, 48, 49, 50,
                            51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
63, 64, 65, 66, 67, 68,
                            69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
81, 82, 83, 84, 85, 86,
                            87, 88, 89, 90};
     float lons[LON_SIZE] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
14, 15, 16, 17,
                            18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
30, 31, 32, 33, 34, 35,
                            36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
48, 49, 50, 51, 52, 53,
                            54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
66, 67, 68, 69, 70, 71,
                            72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
84, 85, 86, 87, 88, 89,
                            90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100,
101, 102, 103, 104, 105,
                            106, 107, 108, 109, 110, 111, 112, 113, 114,
115, 116, 117, 118, 119,
                            120, 121, 122, 123, 124, 125, 126, 127, 128,
129, 130, 131, 132, 133,
                            134, 135, 136, 137, 138, 139, 140, 141, 142,
143, 144, 145, 146, 147,
                            148, 149, 150, 151, 152, 153, 154, 155, 156,
157, 158, 159, 160, 161,
                            162, 163, 164, 165, 166, 167, 168, 169, 170,
171, 172, 173, 174, 175,
                            176, 177, 178, 179, 180, 181, 182, 183, 184,
185, 186, 187, 188, 189,
                            190, 191, 192, 193, 194, 195, 196, 197, 198,
199, 200, 201, 202, 203,
                            204, 205, 206, 207, 208, 209, 210, 211, 212,
213, 214, 215, 216, 217,
                            218, 219, 220, 221, 222, 223, 224, 225, 226,
227, 228, 229, 230, 231,
                            232, 233, 234, 235, 236, 237, 238, 239, 240,
241, 242, 243, 244, 245,
                            246, 247, 248, 249, 250, 251, 252, 253, 254,
255, 256, 257, 258, 259,
                            260, 261, 262, 263, 264, 265, 266, 267, 268,
269, 270, 271, 272, 273,
                            274, 275, 276, 277, 278, 279, 280, 281, 282,
283, 284, 285, 286, 287,
                            288, 289, 290, 291, 292, 293, 294, 295, 296,
297, 298, 299, 300, 301,
                            302, 303, 304, 305, 306, 307, 308, 309, 310,
311, 312, 313, 314, 315,
                            316, 317, 318, 319, 320, 321, 322, 323, 324,
325, 326, 327, 328, 329,
                            330, 331, 332, 333, 334, 335, 336, 337, 338,
339, 340, 341, 342, 343,
                            344, 345, 346, 347, 348, 349, 350, 351, 352,
353, 354, 355, 356, 357,
                            358, 359 };

    double times[TIME_SIZE] = {1637215200, 1637236800, 1637258400,
1637280000, 1637301600,
                               1637323200, 1637344800, 1637366400,
1637388000, 1637409600, 1637431200,
                               1637452800, 1637474400, 1637496000,
1637517600, 1637539200, 1637560800,
                               1637582400, 1637604000, 1637625600,
1637647200, 1637668800, 1637690400,
                               1637712000, 1637733600, 1637755200,
1637776800, 1637798400, 1637820000};

    netCDF::NcVar latVar = file->addVar(LATITUDE, netCDF::ncFloat, latDim);
    latVar.putVar(lats);
    netCDF::NcVar lonVar = file->addVar(LONGITUDE, netCDF::ncFloat, lonDim);
    lonVar.putVar(lons);
    netCDF::NcVar timeVar = file->addVar(TIME, netCDF::ncDouble, timeDim);
    timeVar.putVar(times);
...
```

Any recommendations on how to set the unlimited dimension without losing
the data?

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