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.
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
netcdfgroup
archives: