Changeset 265 for XMLIO_V2/dev/dev_rv/src/xmlio/output
- Timestamp:
- 09/06/11 11:57:45 (13 years ago)
- Location:
- XMLIO_V2/dev/dev_rv/src/xmlio/output
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
XMLIO_V2/dev/dev_rv/src/xmlio/output/nc4_data_output.cpp
r205 r265 1 1 2 #include "nc4_data_output.hpp" 2 3 … … 137 138 domain->data_jbegin.getValue()*/); 138 139 139 SuperClassWriter::setDefaultValue(maskid, &dvm);140 //SuperClassWriter::setDefaultValue(maskid, &dvm); 140 141 141 142 SuperClassWriter::definition_end(); … … 223 224 ? field->name.getValue() : field->getBaseFieldReference()->getId(); 224 225 225 unsigned int ssize = domain-> ni.getValue() * domain->nj.getValue();226 unsigned int ssize = domain->zoom_ni_loc.getValue() * domain->zoom_nj_loc.getValue(); 226 227 bool isCurvilinear = (domain->lonvalue.getValue()->size() == ssize); 227 228 … … 380 381 if (grid->hasAxis()) // 3D 381 382 { 382 ARRAY(double, 3) field_data3D ;383 ARRAY(double, 3) field_data3D (new CArray<double,3>(grid->getLocalShape()/*, boost::c_storage_order()*/)); 383 384 grid->outputField(field_data, field_data3D); 384 SuperClassWriter::writeData(field_data3D, fieldid, true, 0);385 SuperClassWriter::writeData(field_data3D, fieldid, true, field->getNStep()-1); 385 386 386 387 } 387 388 else // 2D 388 389 { 389 ARRAY(double, 3) field_data2D;390 ARRAY(double, 2) field_data2D (new CArray<double, 2>(grid->getLocalShape()/*, boost::c_storage_order()*/)); 390 391 grid->outputField(field_data, field_data2D); 391 SuperClassWriter::writeData(field_data2D, fieldid, true, 0);392 SuperClassWriter::writeData(field_data2D, fieldid, true, field->getNStep()-1); 392 393 } 393 394 } -
XMLIO_V2/dev/dev_rv/src/xmlio/output/onetcdf4.cpp
r254 r265 142 142 } 143 143 144 StdString CONetCDF4::getUnlimitedDimensionName(void) 145 { 146 char full_name_in[NC_MAX_NAME +1]; 147 int grpid = this->getGroup(path); 148 int dimid = this->getUnlimitedDimension(); 149 150 if (dimid == -1) return (std::string()); 151 CheckError(nc_inq_dimname(grpid, dimid, full_name_in)); 152 153 StdString dimname(full_name_in); 154 return (dimname); 155 } 156 144 157 //--------------------------------------------------------------- 145 158 … … 166 179 return (retvalue); 167 180 } 181 182 std::vector<std::string> CONetCDF4::getDimensionsIdList (const std::string * _varname) 183 { 184 char full_name_in[NC_MAX_NAME +1]; 185 int nbdim = 0, *dimid = NULL; 186 int grpid = this->getCurrentGroup(); 187 int varid = (_varname != NULL) ? this->getVariable(*_varname) : NC_GLOBAL; 188 std::vector<std::string> retvalue; 189 190 if (_varname != NULL) 191 { 192 CheckError(nc_inq_varndims(grpid, varid, &nbdim)); 193 dimid = new int[nbdim](); 194 CheckError(nc_inq_vardimid(grpid, varid, dimid)); 195 } 196 else 197 { 198 CheckError(nc_inq_dimids(grpid, &nbdim, NULL, 1)); 199 dimid = new int[nbdim](); 200 CheckError(nc_inq_dimids(grpid, NULL, dimid, 1)); 201 } 202 203 for (int i = 0; i < nbdim; i++) 204 { 205 CheckError(nc_inq_dimname(grpid, dimid[i], full_name_in)); 206 std::string dimname(full_name_in); 207 retvalue.push_back(dimname); 208 } 209 delete [] dimid; 210 211 return (retvalue); 212 } 213 168 214 169 215 //--------------------------------------------------------------- … … 271 317 const std::vector<StdSize> * start, 272 318 const std::vector<StdSize> * count) 273 { 274 std::vector<StdSize> sizes = this->getDimensions(name); 275 std::vector<StdSize>::const_iterator 319 { 320 std::vector<std::size_t> sizes = this->getDimensions(name); 321 std::vector<std::string> iddims = this->getDimensionsIdList (&name); 322 std::vector<std::size_t>::const_iterator 276 323 it = sizes.begin(), end = sizes.end(); 277 324 int i = 0; 325 326 if (iddims.begin()->compare(this->getUnlimitedDimensionName()) == 0) 327 { 328 sstart.push_back(record); 329 scount.push_back(1); 330 if ((start == NULL) && 331 (count == NULL)) i++; 332 it++; 333 } 278 334 279 335 for (;it != end; it++) 280 { 281 StdSize s = *it; 336 { 282 337 if ((start != NULL) && (count != NULL)) 283 338 { 284 if (s == UNLIMITED_DIM) 285 { 286 sstart.push_back(record); 287 scount.push_back(1); 288 } 289 else 290 { 291 sstart.push_back((*start)[i]); 292 scount.push_back((*count)[i]); 293 array_size *= (*count)[i]; 294 i++; 295 } 339 sstart.push_back((*start)[i]); 340 scount.push_back((*count)[i]); 341 array_size *= (*count)[i]; 342 i++; 296 343 } 297 344 else 298 345 { 299 if (s == UNLIMITED_DIM) 300 { 301 sstart.push_back(record); 302 scount.push_back(1); 303 } 304 else 305 { 306 sstart.push_back(0); 307 scount.push_back(sizes[i]); 308 array_size *= sizes[i]; 309 } 346 sstart.push_back(0); 347 scount.push_back(sizes[i]); 348 array_size *= sizes[i]; 310 349 i++; 311 350 } 312 351 } 352 353 354 // for (StdSize u = 0; u < sstart.size(); u++) 355 // std::cout << "(" << sstart[u] << "," << scount[u] << ")" ; 356 // std::cout << std::endl; 313 357 } 314 358 -
XMLIO_V2/dev/dev_rv/src/xmlio/output/onetcdf4.hpp
r264 r265 12 12 #define MPI_INCLUDED 13 13 #include <netcdf.h> 14 extern "C" 15 { 14 extern "C" { 16 15 #include <netcdf_par.h> 17 16 } … … 95 94 int getVariable(const StdString & varname); 96 95 int getDimension(const StdString & dimname); 97 std::vector<StdSize> getDimensions(const StdString & varname); 98 int getUnlimitedDimension(void); 96 std::vector<StdSize> getDimensions (const StdString & varname); 97 std::vector<StdString> getDimensionsIdList (const StdString * varname); 98 int getUnlimitedDimension(void); 99 StdString getUnlimitedDimensionName(void); 99 100 100 101 bool varExist(const StdString & varname); … … 145 146 this->getWriteDataInfos 146 147 (name, record, array_size, sstart, scount, start, count); 148 if (data->num_elements() != array_size) 149 { 150 ERROR("CONetCDF4::writeData(...)", 151 << "[ input array size = " << data->num_elements() 152 << ", intern array size = " << array_size 153 << " ] Invalid input data !" ); 154 } 155 147 156 this->writeData_(grpid, varid, sstart, scount, data->data()); 148 157 }
Note: See TracChangeset
for help on using the changeset viewer.