Changeset 1410 for XIOS/dev/XIOS_DEV_CMIP6/src
- Timestamp:
- 01/24/18 18:45:14 (6 years ago)
- Location:
- XIOS/dev/XIOS_DEV_CMIP6/src
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/XIOS_DEV_CMIP6/src/config/domain_attribute_private.conf
r1158 r1410 10 10 DECLARE_ATTRIBUTE_PRIVATE(double, bounds_lat_end) 11 11 12 // Array contain whole value (non distributed) of longitude and latitude read from a file12 // Array contain whole value (non distributed) of longitude and latitude read from a file 13 13 DECLARE_ARRAY_PRIVATE(double, 1, lonvalue_rectilinear_read_from_file) 14 14 DECLARE_ARRAY_PRIVATE(double, 1, latvalue_rectilinear_read_from_file) 15 15 16 // Array contain whole value (non distributed) of longitude and latitude of curvilinearread from a file16 // Array containing longitude and latitude of LOCAL curvilinear domain to be read from a file 17 17 DECLARE_ARRAY_PRIVATE(double, 2, lonvalue_curvilinear_read_from_file) 18 18 DECLARE_ARRAY_PRIVATE(double, 2, latvalue_curvilinear_read_from_file) … … 20 20 DECLARE_ARRAY_PRIVATE(double, 3, bounds_latvalue_curvilinear_read_from_file) 21 21 22 // Array contain whole value (non distributed) of longitude and latitude of unstructuredread from a file22 // Array containing longitude and latitude of LOCAL unstructured domain to be read from a file 23 23 DECLARE_ARRAY_PRIVATE(double, 1, lonvalue_unstructured_read_from_file) 24 24 DECLARE_ARRAY_PRIVATE(double, 1, latvalue_unstructured_read_from_file) -
XIOS/dev/XIOS_DEV_CMIP6/src/io/nc4_data_input.cpp
r1310 r1410 264 264 if ((CDomain::type_attr::rectilinear == domain->type)) 265 265 { 266 // Ok, try to read some f..attributes such as longitude and latitude266 // Ok, try to read some attributes such as longitude and latitude 267 267 bool hasLat = SuperClassWriter::hasVariable(itMapNj->first); 268 268 if (hasLat) … … 283 283 else if ((CDomain::type_attr::curvilinear == domain->type)) 284 284 { 285 int ni = domain->ni; 286 int nj = domain->nj; 285 int ni, nj; 287 286 std::vector<StdSize> nBeginLatLon(2), nSizeLatLon(2); 288 nBeginLatLon[0] = 0; nBeginLatLon[1] = 0; 289 nSizeLatLon[0] = domain->nj_glo.getValue(); nSizeLatLon[1] = domain->ni_glo.getValue(); 287 288 if (domain->ni.isEmpty()) 289 { 290 ERROR("void CNc4DataInput::readDomainAttributeValueFromFile(...)", 291 << " Value of attribute ni should be defined for domain " << domain->getDomainOutputName() 292 << " in file " << this->filename << "." 293 << " The value can be provided by a user or generated automatically by XIOS." 294 << " Functionality generate_rectilinear_domain can also be used for curvilinear domains." 295 << std::endl); 296 } 297 298 if (domain->nj.isEmpty()) 299 { 300 ERROR("void CNc4DataInput::readDomainAttributeValueFromFile(...)", 301 << " Value of attribute nj should be defined for domain " << domain->getDomainOutputName() 302 << " in file " << this->filename << "." 303 << " The value can be provided by a user or generated automatically by XIOS." 304 << " Functionality generate_rectilinear_domain can also be used for curvilinear domains." 305 << std::endl); 306 } 307 308 if (domain->ibegin.isEmpty()) 309 { 310 ERROR("void CNc4DataInput::readDomainAttributeValueFromFile(...)", 311 << " Value of attribute ibegin should be defined for domain " << domain->getDomainOutputName() 312 << " in file " << this->filename << "." 313 << " The value can be provided by a user or generated automatically by XIOS." 314 << " Functionality generate_rectilinear_domain can also be used for curvilinear domains." 315 << std::endl); 316 } 317 318 if (domain->jbegin.isEmpty()) 319 { 320 ERROR("void CNc4DataInput::readDomainAttributeValueFromFile(...)", 321 << " Value of attribute jbegin should be defined for domain " << domain->getDomainOutputName() 322 << " in file " << this->filename << "." 323 << " The value can be provided by a user or generated automatically by XIOS." 324 << " Functionality generate_rectilinear_domain can also be used for curvilinear domains." 325 << std::endl); 326 } 327 328 ni = domain->ni; 329 nj = domain->nj; 330 nBeginLatLon[0] = domain->jbegin; nBeginLatLon[1] = domain->ibegin; 331 nSizeLatLon[0] = nj; nSizeLatLon[1] = ni; 332 // ni = domain->ni_glo; 333 // nj = domain->nj_glo; 334 // nBeginLatLon[0] = 0; nBeginLatLon[1] = 0; 335 // nSizeLatLon[0] = domain->nj_glo.getValue(); nSizeLatLon[1] = domain->ni_glo.getValue(); 290 336 291 337 StdString latName = this->getLatCoordName(fieldId); 292 338 if (SuperClassWriter::hasVariable(latName)) 293 339 { 294 domain->latvalue_curvilinear_read_from_file.resize( domain->ni_glo,domain->nj_glo);340 domain->latvalue_curvilinear_read_from_file.resize(ni,nj); 295 341 readFieldVariableValue(domain->latvalue_curvilinear_read_from_file, latName, nBeginLatLon, nSizeLatLon); 296 342 } … … 298 344 if (SuperClassWriter::hasVariable(lonName)) 299 345 { 300 domain->lonvalue_curvilinear_read_from_file.resize( domain->ni_glo,domain->nj_glo);346 domain->lonvalue_curvilinear_read_from_file.resize(ni,nj); 301 347 readFieldVariableValue(domain->lonvalue_curvilinear_read_from_file, lonName, nBeginLatLon, nSizeLatLon); 302 348 } … … 320 366 321 367 std::vector<StdSize> nBeginBndsLatLon(3), nSizeBndsLatLon(3); 322 nBeginBndsLatLon[0] = 0; nSizeBndsLatLon[0] = domain->nj_glo.getValue();323 nBeginBndsLatLon[1] = 0; nSizeBndsLatLon[1] = domain->ni_glo.getValue();368 nBeginBndsLatLon[0] = domain->jbegin; nSizeBndsLatLon[0] = domain->nj.getValue(); 369 nBeginBndsLatLon[1] = domain->ibegin; nSizeBndsLatLon[1] = domain->ni.getValue(); 324 370 nBeginBndsLatLon[2] = 0; nSizeBndsLatLon[2] = nbVertex; 371 // nBeginBndsLatLon[0] = 0; nSizeBndsLatLon[0] = domain->nj_glo.getValue(); 372 // nBeginBndsLatLon[1] = 0; nSizeBndsLatLon[1] = domain->ni_glo.getValue(); 373 // nBeginBndsLatLon[2] = 0; nSizeBndsLatLon[2] = nbVertex; 325 374 326 375 if (SuperClassWriter::hasVariable(boundsLatName)) 327 376 { 328 domain->bounds_latvalue_curvilinear_read_from_file.resize(nbVertex, domain->ni_glo,domain->nj_glo);377 domain->bounds_latvalue_curvilinear_read_from_file.resize(nbVertex,ni,nj); 329 378 readFieldVariableValue(domain->bounds_latvalue_curvilinear_read_from_file, boundsLatName, nBeginBndsLatLon, nSizeBndsLatLon); 330 379 … … 332 381 if (SuperClassWriter::hasVariable(boundsLonName)) 333 382 { 334 domain->bounds_lonvalue_curvilinear_read_from_file.resize(nbVertex, domain->ni_glo,domain->nj_glo);383 domain->bounds_lonvalue_curvilinear_read_from_file.resize(nbVertex,ni,nj); 335 384 readFieldVariableValue(domain->bounds_lonvalue_curvilinear_read_from_file, boundsLonName, nBeginBndsLatLon, nSizeBndsLatLon); 336 385 } … … 338 387 else if ((CDomain::type_attr::unstructured == domain->type))// || (this->isUnstructured(fieldId))) 339 388 { 389 if (domain->ni.isEmpty()) 390 { 391 ERROR("void CNc4DataInput::readDomainAttributeValueFromFile(...)", 392 << " Value of attribute ni should be defined for domain " << domain->getDomainOutputName() 393 << " in file " << this->filename << "." 394 << std::endl); 395 } 396 397 if (domain->ibegin.isEmpty()) 398 { 399 ERROR("void CNc4DataInput::readDomainAttributeValueFromFile(...)", 400 << " Value of attribute ibegin should be defined for domain " << domain->getDomainOutputName() 401 << " in file " << this->filename << "." 402 << std::endl); 403 } 404 405 int ni; 340 406 std::vector<StdSize> nBeginLatLon(1,0), nSizeLatLon(1,0); 341 nSizeLatLon[0] = domain->ni_glo.getValue(); 342 CArray<double,1> globalLonLat(domain->ni_glo.getValue()); 407 408 ni = domain->ni; 409 nBeginLatLon[0] = domain->ibegin; 410 // ni = domain->ni_glo; 411 // nBeginLatLon[0] = 0; 412 nSizeLatLon[0] = ni; 343 413 344 414 StdString latName = this->getLatCoordName(fieldId); 345 415 if (SuperClassWriter::hasVariable(latName)) 346 416 { 347 domain->latvalue_unstructured_read_from_file.resize( domain->ni_glo);417 domain->latvalue_unstructured_read_from_file.resize(ni); 348 418 readFieldVariableValue(domain->latvalue_unstructured_read_from_file, latName, nBeginLatLon, nSizeLatLon); 349 419 } … … 352 422 if (SuperClassWriter::hasVariable(lonName)) //(0 != lonName.compare("")) 353 423 { 354 // readFieldVariableValue(globalLonLat, lonName, nBeginLatLon, nSizeLatLon); 355 domain->lonvalue_unstructured_read_from_file.resize(domain->ni_glo); 424 domain->lonvalue_unstructured_read_from_file.resize(ni); 356 425 readFieldVariableValue(domain->lonvalue_unstructured_read_from_file, lonName, nBeginLatLon, nSizeLatLon); 357 426 } … … 375 444 376 445 std::vector<StdSize> nBeginBndsLatLon(2), nSizeBndsLatLon(2); 377 nBeginBndsLatLon[0] = 0; nSizeBndsLatLon[0] = domain->ni_glo.getValue(); 378 nBeginBndsLatLon[1] = 0; nSizeBndsLatLon[1] = nbVertex; 379 380 if (SuperClassWriter::hasVariable(boundsLatName)) 446 447 nBeginBndsLatLon[0] = 0; nSizeBndsLatLon[0] = domain->ni.getValue(); 448 nBeginBndsLatLon[1] = domain->ibegin.getValue(); nSizeBndsLatLon[1] = nbVertex; 449 // nBeginBndsLatLon[0] = 0; nSizeBndsLatLon[0] = domain->ni_glo.getValue(); 450 // nBeginBndsLatLon[1] = 0; nSizeBndsLatLon[1] = nbVertex; 451 452 if (SuperClassWriter::hasVariable(boundsLatName)) 381 453 { 382 454 domain->bounds_latvalue_unstructured_read_from_file.resize(nSizeBndsLatLon[1], nSizeBndsLatLon[0]); -
XIOS/dev/XIOS_DEV_CMIP6/src/node/domain.cpp
r1390 r1410 256 256 257 257 /*! 258 Redistribute RECTILINEAR domain with a number of local domains.258 Redistribute RECTILINEAR or CURVILINEAR domain with a number of local domains. 259 259 All attributes ni,nj,ibegin,jbegin (if defined) will be rewritten 260 260 The optional attributes lonvalue, latvalue will be added. Because this function only serves (for now) … … 531 531 void CDomain::fillInCurvilinearLonLat() 532 532 { 533 533 534 if (!lonvalue_curvilinear_read_from_file.isEmpty() && lonvalue_2d.isEmpty()) 534 535 { … … 536 537 for (int jdx = 0; jdx < nj; ++jdx) 537 538 for (int idx = 0; idx < ni; ++idx) 538 lonvalue_2d(idx,jdx) = lonvalue_curvilinear_read_from_file(idx+ibegin, jdx+jbegin); 539 lonvalue_2d(idx,jdx) = lonvalue_curvilinear_read_from_file(idx, jdx); 540 // lonvalue_2d(idx,jdx) = lonvalue_curvilinear_read_from_file(idx+ibegin, jdx+jbegin); 539 541 540 542 lonvalue_curvilinear_read_from_file.free(); … … 546 548 for (int jdx = 0; jdx < nj; ++jdx) 547 549 for (int idx = 0; idx < ni; ++idx) 548 latvalue_2d(idx,jdx) = latvalue_curvilinear_read_from_file(idx+ibegin, jdx+jbegin); 550 latvalue_2d(idx,jdx) = latvalue_curvilinear_read_from_file(idx, jdx); 551 // latvalue_2d(idx,jdx) = latvalue_curvilinear_read_from_file(idx+ibegin, jdx+jbegin); 549 552 550 553 latvalue_curvilinear_read_from_file.free(); … … 557 560 for (int idx = 0; idx < ni; ++idx) 558 561 for (int ndx = 0; ndx < nvertex; ++ndx) 559 bounds_lon_2d(ndx,idx,jdx) = bounds_lonvalue_curvilinear_read_from_file(ndx,idx+ibegin, jdx+jbegin); 562 bounds_lon_2d(ndx,idx,jdx) = bounds_lonvalue_curvilinear_read_from_file(ndx,idx, jdx); 563 // bounds_lon_2d(ndx,idx,jdx) = bounds_lonvalue_curvilinear_read_from_file(ndx,idx+ibegin, jdx+jbegin); 560 564 561 565 bounds_lonvalue_curvilinear_read_from_file.free(); … … 568 572 for (int idx = 0; idx < ni; ++idx) 569 573 for (int ndx = 0; ndx < nvertex; ++ndx) 570 bounds_lat_2d(ndx,idx,jdx) = bounds_latvalue_curvilinear_read_from_file(ndx,idx+ibegin, jdx+jbegin); 574 bounds_lat_2d(ndx,idx,jdx) = bounds_latvalue_curvilinear_read_from_file(ndx,idx, jdx); 575 // bounds_lat_2d(ndx,idx,jdx) = bounds_latvalue_curvilinear_read_from_file(ndx,idx+ibegin, jdx+jbegin); 571 576 572 577 bounds_latvalue_curvilinear_read_from_file.free(); … … 584 589 { 585 590 i_index.resize(ni); 586 for(int idx = 0; idx < ni; ++idx) i_index(idx)=ibegin+idx;591 // for(int idx = 0; idx < ni; ++idx) i_index(idx)=ibegin+idx; 587 592 } 588 593 … … 591 596 lonvalue_1d.resize(ni); 592 597 for (int idx = 0; idx < ni; ++idx) 593 lonvalue_1d(idx) = lonvalue_unstructured_read_from_file(i_index(idx)); 598 // lonvalue_1d(idx) = lonvalue_unstructured_read_from_file(i_index(idx)); 599 lonvalue_1d(idx) = lonvalue_unstructured_read_from_file(idx); 594 600 595 601 // We dont need these values anymore, so just delete them … … 601 607 latvalue_1d.resize(ni); 602 608 for (int idx = 0; idx < ni; ++idx) 603 latvalue_1d(idx) = latvalue_unstructured_read_from_file(i_index(idx)); 609 // latvalue_1d(idx) = latvalue_unstructured_read_from_file(i_index(idx)); 610 latvalue_1d(idx) = latvalue_unstructured_read_from_file(idx); 604 611 605 612 // We dont need these values anymore, so just delete them … … 613 620 for (int idx = 0; idx < ni; ++idx) 614 621 for (int jdx = 0; jdx < nbVertex; ++jdx) 615 bounds_lon_1d(jdx,idx) = bounds_lonvalue_unstructured_read_from_file(jdx, i_index(idx)); 622 // bounds_lon_1d(jdx,idx) = bounds_lonvalue_unstructured_read_from_file(jdx, i_index(idx)); 623 bounds_lon_1d(jdx,idx) = bounds_lonvalue_unstructured_read_from_file(jdx, idx); 616 624 617 625 // We dont need these values anymore, so just delete them … … 625 633 for (int idx = 0; idx < ni; ++idx) 626 634 for (int jdx = 0; jdx < nbVertex; ++jdx) 627 bounds_lat_1d(jdx,idx) = bounds_latvalue_unstructured_read_from_file(jdx, i_index(idx)); 635 // bounds_lat_1d(jdx,idx) = bounds_latvalue_unstructured_read_from_file(jdx, i_index(idx)); 636 bounds_lat_1d(jdx,idx) = bounds_latvalue_unstructured_read_from_file(jdx, idx); 628 637 629 638 // We dont need these values anymore, so just delete them -
XIOS/dev/XIOS_DEV_CMIP6/src/transformation/domain_algorithm_generate_rectilinear.hpp
r827 r1410 20 20 /*! 21 21 \class CDomainAlgorithmGenerateRectilinear 22 Generate a rectilinear domain and fill in necessary its attributes automatically23 A new rectilinear domain will also be distributed automatically among the processes.22 Generate a rectilinear or CURVILINEAR domain and fill in necessary its attributes automatically 23 A new rectilinear (or CURVILINEAR) domain will also be distributed automatically among the processes. 24 24 The number of processes is deduced from the distribution of the grid source. 25 25 */
Note: See TracChangeset
for help on using the changeset viewer.