Changeset 1957


Ignore:
Timestamp:
10/08/20 13:12:35 (4 years ago)
Author:
ymipsl
Message:

Xios coupling.

Implementing grid and field compression (indexed_output) in output as before.

YM

Location:
XIOS/dev/dev_ym/XIOS_COUPLING/src/io
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/dev_ym/XIOS_COUPLING/src/io/nc4_data_output.cpp

    r1950 r1957  
    5959          
    6060        //domain->computeWrittenIndex(); 
    61         domain->computeWrittenCompressedIndex(comm_file); 
     61        //domain->computeWrittenCompressedIndex(comm_file); 
    6262 
    6363        if (domain->type == CDomain::type_attr::unstructured) 
     
    11601160 
    11611161//        axis->computeWrittenIndex(); 
    1162         axis->computeWrittenCompressedIndex(comm_file); 
     1162//        axis->computeWrittenCompressedIndex(comm_file); 
    11631163        
    11641164        int size  = (MULTI_FILE == SuperClass::type) ? axis->n.getValue() 
     
    14971497     void CNc4DataOutput::writeGridCompressed_(CGrid* grid) 
    14981498     { 
    1499        if (grid->isScalarGrid() || grid->isWrittenCompressed(this->filename)) return; 
    1500  
    1501        try 
    1502        { 
    1503          CArray<int,1> axisDomainOrder = grid->axis_domain_order; 
    1504          std::vector<StdString> domainList = grid->getDomainList(); 
    1505          std::vector<StdString> axisList   = grid->getAxisList(); 
    1506          std::vector<StdString> scalarList = grid->getScalarList(); 
    1507          int numElement = axisDomainOrder.numElements(), idxDomain = 0, idxAxis = 0, idxScalar = 0; 
    1508  
    1509          std::vector<StdString> dims; 
    1510  
    1511          if (grid->isCompressible()) 
    1512          { 
    1513            StdString varId = grid->getId() + "_points"; 
    1514  
    1515            int nbIndexes = (SuperClass::type == MULTI_FILE) ? grid->getNumberWrittenIndexes() : grid->getTotalNumberWrittenIndexes(); 
    1516            SuperClassWriter::addDimension(varId, nbIndexes); 
    1517  
    1518            dims.push_back(varId); 
    1519            SuperClassWriter::addVariable(varId, NC_INT, dims); 
    1520  
    1521            StdOStringStream compress; 
    1522            for (int i = numElement - 1; i >= 0; --i) 
    1523            { 
    1524              if (2 == axisDomainOrder(i)) 
    1525              { 
    1526                CDomain* domain = CDomain::get(domainList[domainList.size() - idxDomain - 1]); 
    1527                StdString domId = domain->getDomainOutputName(); 
    1528                StdString appendDomId  = singleDomain ? "" : "_" + domId; 
    1529  
    1530                switch (domain->type) 
    1531                { 
    1532                  case CDomain::type_attr::curvilinear: 
    1533                    compress << "y" << appendDomId << " x" << appendDomId; 
    1534                    break; 
    1535                  case CDomain::type_attr::rectilinear: 
    1536                    compress << "lat" << appendDomId << " lon" << appendDomId; 
    1537                    break; 
    1538                  case CDomain::type_attr::unstructured: 
    1539                    StdString cellName = (!domain->dim_i_name.isEmpty()) ? cellName=domain->dim_i_name : "cell"; 
    1540                    compress << cellName << appendDomId; 
    1541 //                   compress << "cell" << appendDomId; 
    1542                    break; 
    1543                } 
    1544                ++idxDomain; 
    1545              } 
    1546              else if (1 == axisDomainOrder(i)) 
    1547              { 
    1548                CAxis* axis = CAxis::get(axisList[axisList.size() - idxAxis - 1]); 
    1549                compress << axis->getAxisOutputName(); 
    1550                ++idxAxis; 
    1551              } 
    1552              else 
    1553              { 
    1554                CScalar* scalar = CScalar::get(scalarList[scalarList.size() - idxScalar - 1]); 
    1555                compress << scalar->getScalarOutputName(); 
    1556                ++idxScalar; 
    1557              } 
    1558  
    1559              if (i != 0) compress << ' '; 
    1560            } 
    1561            SuperClassWriter::addAttribute("compress", compress.str(), &varId);          
    1562  
    1563            CArray<int, 1> indexes(grid->getNumberWrittenIndexes()); 
    1564            indexes = grid->localIndexToWriteOnServer_; 
    1565  
    1566            switch (SuperClass::type) 
    1567            { 
    1568              case (MULTI_FILE): 
    1569              { 
    1570                SuperClassWriter::writeData(indexes, varId, isCollective, 0); 
    1571                break; 
    1572              } 
    1573              case (ONE_FILE): 
    1574              { 
    1575                if (grid->doGridHaveDataDistributed()) 
    1576                  grid->getServerDistribution()->computeGlobalIndex(indexes); 
    1577  
    1578                std::vector<StdSize> start, count; 
    1579                start.push_back(grid->getOffsetWrittenIndexes()); 
    1580                count.push_back(grid->getNumberWrittenIndexes()); 
    1581  
    1582                SuperClassWriter::writeData(indexes, varId, isCollective, 0, &start, &count); 
    1583                break; 
    1584              } 
    1585            } 
    1586          } 
    1587          else 
    1588          { 
    1589            for (int i = 0; i < numElement; ++i) 
    1590            { 
    1591              StdString varId, compress; 
    1592              CArray<int, 1> indexes; 
    1593              bool isDistributed; 
    1594              StdSize nbIndexes, totalNbIndexes, offset; 
    1595              int firstGlobalIndex; 
    1596  
    1597              if (2 == axisDomainOrder(i)) 
    1598              { 
    1599                CDomain* domain = CDomain::get(domainList[idxDomain]); 
    1600                StdString domId = domain->getDomainOutputName(); 
    1601  
    1602                if (!domain->isCompressible() 
    1603                     || domain->type == CDomain::type_attr::unstructured 
    1604                     || domain->isWrittenCompressed(this->filename) 
    1605                     || isWrittenCompressedDomain(domId)) 
    1606                  continue; 
    1607  
    1608                StdString appendDomId  = singleDomain ? "" : "_" + domId; 
    1609  
    1610                varId = domId + "_points"; 
    1611                switch (domain->type) 
    1612                { 
    1613                  case CDomain::type_attr::curvilinear: 
    1614                    compress = "y" + appendDomId + " x" + appendDomId; 
    1615                    break; 
    1616                  case CDomain::type_attr::rectilinear: 
    1617                    compress = "lat" + appendDomId + " lon" + appendDomId; 
    1618                    break; 
    1619                } 
    1620  
    1621                // indexes.resize(domain->compressedIndexToWriteOnServer[comm_file].numElements()); 
    1622                // indexes = domain->compressedIndexToWriteOnServer[com_file]; 
    1623                indexes.resize(domain->getCompressedIndexToWriteOnServer(comm_file).numElements()); 
    1624                indexes = domain->getCompressedIndexToWriteOnServer(comm_file); 
    1625  
    1626                isDistributed = domain->isDistributed(); 
    1627                nbIndexes = domain->getNumberWrittenIndexes(comm_file); 
    1628                totalNbIndexes = domain->getTotalNumberWrittenIndexes(comm_file); 
    1629                offset = domain->getOffsetWrittenIndexes(comm_file); 
    1630                firstGlobalIndex = domain->ibegin + domain->jbegin * domain->ni_glo; 
    1631  
    1632                domain->addRelFileCompressed(this->filename); 
    1633                setWrittenCompressedDomain(domId); 
    1634                ++idxDomain; 
    1635              } 
    1636              else if (1 == axisDomainOrder(i)) 
    1637              { 
    1638                CAxis* axis = CAxis::get(axisList[idxAxis]); 
    1639                StdString axisId = axis->getAxisOutputName(); 
    1640  
    1641                if (!axis->isCompressible() 
    1642                     || axis->isWrittenCompressed(this->filename) 
    1643                     || isWrittenCompressedAxis(axisId)) 
    1644                  continue; 
    1645  
    1646                varId = axisId + "_points"; 
    1647                compress = axisId; 
    1648  
    1649                // indexes.resize(axis->compressedIndexToWriteOnServer.numElements()); 
    1650                // indexes = axis->compressedIndexToWriteOnServer; 
    1651  
    1652                indexes.resize(axis->getCompressedIndexToWriteOnServer(comm_file).numElements()); 
    1653                indexes = axis->getCompressedIndexToWriteOnServer(comm_file); 
    1654  
    1655                isDistributed = axis->isDistributed(); 
    1656                nbIndexes = axis->getNumberWrittenIndexes(comm_file); 
    1657                totalNbIndexes = axis->getTotalNumberWrittenIndexes(comm_file); 
    1658                offset = axis->getOffsetWrittenIndexes(comm_file); 
    1659                firstGlobalIndex = axis->begin; 
    1660  
    1661                axis->addRelFileCompressed(this->filename); 
    1662                setWrittenCompressedAxis(axisId); 
    1663                ++idxAxis; 
    1664              } 
    1665              else 
    1666              { 
    1667              } 
    1668  
    1669              if (!varId.empty()) 
    1670              { 
    1671                SuperClassWriter::addDimension(varId, (SuperClass::type == MULTI_FILE) ? nbIndexes : totalNbIndexes); 
    1672  
    1673                dims.clear(); 
    1674                dims.push_back(varId); 
    1675                SuperClassWriter::addVariable(varId, NC_INT, dims); 
    1676  
    1677                SuperClassWriter::addAttribute("compress", compress, &varId); 
    1678  
    1679                switch (SuperClass::type) 
    1680                { 
    1681                  case (MULTI_FILE): 
    1682                  { 
    1683                    indexes -= firstGlobalIndex; 
    1684                    SuperClassWriter::writeData(indexes, varId, isCollective, 0); 
    1685                    break; 
    1686                  } 
    1687                  case (ONE_FILE): 
    1688                  { 
    1689                    std::vector<StdSize> start, count; 
    1690                    start.push_back(offset); 
    1691                    count.push_back(nbIndexes); 
    1692  
    1693                    SuperClassWriter::writeData(indexes, varId, isCollective, 0, &start, &count); 
    1694                    break; 
    1695                  } 
    1696                } 
    1697              } 
     1499        if (grid->isScalarGrid() || grid->isWrittenCompressed(this->filename)) return; 
     1500         
     1501        // NOTA : The cuurent algorithm to write compress elements of the grid 
     1502        //        will work pretting well when on server side you dont't get 
     1503        //        partial overlap on elements between differents participating process 
     1504        //        So the element must be totally distributed or non distributed 
     1505        //        If an element is partially overlaping betwwen process then the 
     1506        //        total compressed part will apear artificially greater than expected 
     1507        //        For the current implementation of writer which is decomposed only on 
     1508        //        one element, it will work as expected, but for future, it must be  
     1509        //        reconsidered again.  
     1510        try 
     1511        { 
     1512          CArray<int,1> axisDomainOrder = grid->axis_domain_order; 
     1513          std::vector<StdString> domainList = grid->getDomainList(); 
     1514          std::vector<StdString> axisList   = grid->getAxisList(); 
     1515          std::vector<StdString> scalarList = grid->getScalarList(); 
     1516          int numElement = axisDomainOrder.numElements(), idxDomain = 0, idxAxis = 0, idxScalar = 0; 
     1517          int commRank ; 
     1518          MPI_Comm_rank(comm_file,&commRank) ; 
     1519 
     1520          std::vector<StdString> dims; 
     1521 
     1522          for (int i = 0; i < numElement; ++i) 
     1523          { 
     1524            StdString varId, compress; 
     1525            CArray<size_t, 1> indexes; 
     1526            bool isDistributed; 
     1527            size_t nbIndexes, totalNbIndexes, offset; 
     1528            size_t firstGlobalIndex; 
     1529             
     1530            if (2 == axisDomainOrder(i)) 
     1531            { 
     1532              CDomain* domain = CDomain::get(domainList[idxDomain]); 
     1533              StdString domId = domain->getDomainOutputName(); 
     1534 
     1535              if (!domain->isCompressible() 
     1536                  || domain->type == CDomain::type_attr::unstructured 
     1537                  || domain->isWrittenCompressed(this->filename) 
     1538                  || isWrittenCompressedDomain(domId)) 
     1539                continue; 
     1540             
     1541              // unstructured grid seems not be taken into account why ? 
     1542 
     1543              string lonName,latName ; 
     1544 
     1545              if (domain->lon_name.isEmpty()) 
     1546              {  
     1547                if (domain->type==CDomain::type_attr::curvilinear) lonName = "nav_lon"; 
     1548                else lonName = "lon"; 
     1549              } 
     1550              else lonName = domain->lon_name; 
     1551 
     1552              if (domain->lat_name.isEmpty()) 
     1553              { 
     1554                if (domain->type==CDomain::type_attr::curvilinear) latName = "nav_lat"; 
     1555                else latName = "lat"; 
     1556              } 
     1557              else latName = domain->lat_name; 
     1558              
     1559              StdString appendDomId  = singleDomain ? "" : "_" + domId; 
     1560 
     1561              varId = domId + "_points"; 
     1562              compress = latName + appendDomId + " " + lonName + appendDomId; 
     1563      
     1564              CLocalView* workflowView = domain->getLocalView(CElementView::WORKFLOW) ; 
     1565              workflowView->getGlobalIndexView(indexes) ; 
     1566              nbIndexes = workflowView->getSize() ; 
     1567              isDistributed = domain->isDistributed(); 
     1568              if (isDistributed) 
     1569              { 
     1570                MPI_Exscan(&nbIndexes, &offset, 1, MPI_SIZE_T, MPI_SUM, comm_file) ; 
     1571                if (commRank==0) offset=0 ; 
     1572                MPI_Allreduce(&nbIndexes,&totalNbIndexes,1 , MPI_SIZE_T, MPI_SUM, comm_file) ; 
     1573              } 
     1574              else 
     1575              { 
     1576                offset=0 ; 
     1577                totalNbIndexes = nbIndexes ; 
     1578              } 
     1579 
     1580              firstGlobalIndex = domain->ibegin + domain->jbegin * domain->ni_glo; 
     1581 
     1582              domain->addRelFileCompressed(this->filename); 
     1583              setWrittenCompressedDomain(domId); 
     1584              ++idxDomain; 
    16981585            } 
    1699          } 
    1700  
    1701          grid->addRelFileCompressed(this->filename); 
    1702        } 
    1703        catch (CNetCdfException& e) 
    1704        { 
    1705          StdString msg("On writing compressed grid : "); 
    1706          msg.append(grid->getId()); msg.append("\n"); 
    1707          msg.append("In the context : "); 
    1708          CContext* context = CContext::getCurrent(); 
    1709          msg.append(context->getId()); msg.append("\n"); 
    1710          msg.append(e.what()); 
    1711          ERROR("CNc4DataOutput::writeGridCompressed_(CGrid* grid)", << msg); 
    1712        } 
    1713      } 
     1586            else if (1 == axisDomainOrder(i)) 
     1587            { 
     1588              CAxis* axis = CAxis::get(axisList[idxAxis]); 
     1589              StdString axisId = axis->getAxisOutputName(); 
     1590 
     1591              if (!axis->isCompressible() 
     1592                  || axis->isWrittenCompressed(this->filename) 
     1593                  || isWrittenCompressedAxis(axisId)) 
     1594                continue; 
     1595 
     1596              varId = axisId + "_points"; 
     1597              compress = axisId; 
     1598 
     1599              CLocalView* workflowView = axis->getLocalView(CElementView::WORKFLOW) ; 
     1600              workflowView->getGlobalIndexView(indexes) ; 
     1601              nbIndexes = workflowView->getSize() ; 
     1602              isDistributed = axis->isDistributed(); 
     1603              if (isDistributed) 
     1604              { 
     1605                MPI_Exscan(&nbIndexes, &offset, 1, MPI_SIZE_T, MPI_SUM, comm_file) ; 
     1606                if (commRank==0) offset=0 ; 
     1607                MPI_Allreduce(&nbIndexes,&totalNbIndexes,1 , MPI_SIZE_T, MPI_SUM, comm_file) ; 
     1608              } 
     1609              else 
     1610              { 
     1611                offset=0 ; 
     1612                totalNbIndexes = nbIndexes ; 
     1613              } 
     1614              firstGlobalIndex = axis->begin; 
     1615               
     1616              axis->addRelFileCompressed(this->filename); 
     1617              setWrittenCompressedAxis(axisId); 
     1618              ++idxAxis; 
     1619            } 
     1620            else 
     1621            { 
     1622              //for scalar  
     1623            } 
     1624 
     1625            if (!varId.empty()) 
     1626            { 
     1627              SuperClassWriter::addDimension(varId, (SuperClass::type == MULTI_FILE) ? nbIndexes : totalNbIndexes); 
     1628 
     1629              dims.clear(); 
     1630              dims.push_back(varId); 
     1631              SuperClassWriter::addVariable(varId, NC_UINT64, dims); 
     1632 
     1633              SuperClassWriter::addAttribute("compress", compress, &varId); 
     1634 
     1635              switch (SuperClass::type) 
     1636              { 
     1637                case (MULTI_FILE): 
     1638                { 
     1639                  indexes -= firstGlobalIndex; 
     1640                  SuperClassWriter::writeData(indexes, varId, isCollective, 0); 
     1641                  break; 
     1642                } 
     1643                case (ONE_FILE): 
     1644                { 
     1645                  std::vector<StdSize> start, count; 
     1646                  start.push_back(offset); 
     1647                  count.push_back(nbIndexes); 
     1648 
     1649                  SuperClassWriter::writeData(indexes, varId, isCollective, 0, &start, &count); 
     1650                  break; 
     1651                } 
     1652              } 
     1653            } 
     1654          } 
     1655 
     1656          grid->addRelFileCompressed(this->filename); 
     1657        } 
     1658        catch (CNetCdfException& e) 
     1659        { 
     1660          StdString msg("On writing compressed grid : "); 
     1661          msg.append(grid->getId()); msg.append("\n"); 
     1662          msg.append("In the context : "); 
     1663          CContext* context = CContext::getCurrent(); 
     1664          msg.append(context->getId()); msg.append("\n"); 
     1665          msg.append(e.what()); 
     1666          ERROR("CNc4DataOutput::writeGridCompressed_(CGrid* grid)", << msg); 
     1667        } 
     1668      } 
    17141669 
    17151670     //-------------------------------------------------------------- 
     
    24062361           if (!field->default_value.isEmpty()) fieldData = field->default_value; 
    24072362 
    2408            if (field->getUseCompressedOutput()) 
    2409              field->outputCompressedField(dataIn, fieldData); 
     2363           if (field->getUseCompressedOutput()) fieldData.reference(dataIn) ; 
     2364             // field->outputCompressedField(dataIn, fieldData); 
    24102365           else 
    24112366           { 
     
    24482403                if (field->getUseCompressedOutput()) 
    24492404                { 
    2450                   if (grid->isCompressible()) 
     2405                  CArray<int,1> axisDomainOrder = grid->axis_domain_order; 
     2406                  std::vector<StdString> domainList = grid->getDomainList(); 
     2407                  std::vector<StdString> axisList   = grid->getAxisList(); 
     2408                  int numElement = axisDomainOrder.numElements(); 
     2409                  int idxDomain = domainList.size() - 1, idxAxis = axisList.size() - 1; 
     2410                  int idx = domainList.size() * 2 + axisList.size() - 1; 
     2411                  int commRank ; 
     2412 
     2413                  MPI_Comm_rank(comm_file,&commRank) ; 
     2414 
     2415                  start.reserve(idx+1); 
     2416                  count.reserve(idx+1); 
     2417 
     2418                  for (int i = numElement - 1; i >= 0; --i) 
    24512419                  { 
    2452                     start.push_back(grid->getOffsetWrittenIndexes()); 
    2453                     count.push_back(grid->getNumberWrittenIndexes()); 
    2454                   } 
    2455                   else 
    2456                   { 
    2457                     CArray<int,1> axisDomainOrder = grid->axis_domain_order; 
    2458                     std::vector<StdString> domainList = grid->getDomainList(); 
    2459                     std::vector<StdString> axisList   = grid->getAxisList(); 
    2460                     int numElement = axisDomainOrder.numElements(); 
    2461                     int idxDomain = domainList.size() - 1, idxAxis = axisList.size() - 1; 
    2462                     int idx = domainList.size() * 2 + axisList.size() - 1; 
    2463  
    2464                     start.reserve(idx+1); 
    2465                     count.reserve(idx+1); 
    2466  
    2467                     for (int i = numElement - 1; i >= 0; --i) 
     2420                    if (2 == axisDomainOrder(i)) 
    24682421                    { 
    2469                       if (2 == axisDomainOrder(i)) 
     2422                      CDomain* domain = CDomain::get(domainList[idxDomain]); 
     2423 
     2424                      if (domain->isCompressible()) 
    24702425                      { 
    2471                         CDomain* domain = CDomain::get(domainList[idxDomain]); 
    2472  
    2473                         if (domain->isCompressible()) 
     2426                        size_t offset ; 
     2427                        size_t nbIndexes = domain->getLocalView(CElementView::WORKFLOW)->getSize() ; 
     2428                        if (domain->isDistributed()) 
    24742429                        { 
    2475                           start.push_back(domain->getOffsetWrittenIndexes(comm_file)); 
    2476                           count.push_back(domain->getNumberWrittenIndexes(comm_file)); 
    2477                           idx -= 2; 
     2430                          MPI_Exscan(&nbIndexes, &offset, 1, MPI_SIZE_T, MPI_SUM, comm_file) ; 
     2431                          if (commRank==0) offset=0 ; 
    24782432                        } 
    2479                         else 
     2433                        else offset=0 ; 
     2434 
     2435                        start.push_back(offset); 
     2436                        count.push_back(nbIndexes); 
     2437                        idx -= 2; 
     2438                      } 
     2439                      else 
     2440                      { 
     2441                        if ((domain->type) != CDomain::type_attr::unstructured) 
    24802442                        { 
    2481                           if ((domain->type) != CDomain::type_attr::unstructured) 
    2482                           { 
    2483                             start.push_back(domain->jbegin); 
    2484                             count.push_back(domain->nj); 
    2485                           } 
    2486                           --idx; 
    2487                           start.push_back(domain->ibegin); 
    2488                           count.push_back(domain->ni); 
    2489                           --idx; 
     2443                          start.push_back(domain->jbegin); 
     2444                          count.push_back(domain->nj); 
    24902445                        } 
    2491                         --idxDomain; 
    2492                       } 
    2493                       else if (1 == axisDomainOrder(i)) 
    2494                       { 
    2495                         CAxis* axis = CAxis::get(axisList[idxAxis]); 
    2496  
    2497                         if (axis->isCompressible()) 
    2498                         { 
    2499                           start.push_back(axis->getOffsetWrittenIndexes(comm_file)); 
    2500                           count.push_back(axis->getNumberWrittenIndexes(comm_file)); 
    2501                         } 
    2502                         else 
    2503                         { 
    2504                           start.push_back(axis->begin); 
    2505                           count.push_back(axis->n); 
    2506                         } 
    2507                         --idxAxis; 
     2446                        --idx; 
     2447                        start.push_back(domain->ibegin); 
     2448                        count.push_back(domain->ni); 
    25082449                        --idx; 
    25092450                      } 
     2451                      --idxDomain; 
     2452                    } 
     2453                    else if (1 == axisDomainOrder(i)) 
     2454                    { 
     2455                      CAxis* axis = CAxis::get(axisList[idxAxis]); 
     2456 
     2457                      if (axis->isCompressible()) 
     2458                      { 
     2459                        size_t offset ; 
     2460                        size_t nbIndexes = axis->getLocalView(CElementView::WORKFLOW)->getSize() ; 
     2461                        if (axis->isDistributed()) 
     2462                        { 
     2463                          MPI_Exscan(&nbIndexes, &offset, 1, MPI_SIZE_T, MPI_SUM, comm_file) ; 
     2464                          if (commRank==0) offset=0 ; 
     2465                        } 
     2466                        else offset=0 ; 
     2467 
     2468                        start.push_back(offset); 
     2469                        count.push_back(nbIndexes); 
     2470                      } 
     2471                      else 
     2472                      { 
     2473                        start.push_back(axis->begin); 
     2474                        count.push_back(axis->n); 
     2475                      } 
     2476                      --idxAxis; 
     2477                      --idx; 
    25102478                    } 
    25112479                  } 
    2512                 } 
     2480              } 
    25132481                else 
    25142482                { 
  • XIOS/dev/dev_ym/XIOS_COUPLING/src/io/netCdfInterface.cpp

    r1639 r1957  
    894894 
    895895template<> 
     896int CNetCdfInterface::ncGetAttType(int ncid, int varid, const char* attrName, size_t* data) 
     897{ 
     898  return nc_get_att_ulonglong(ncid, varid, attrName, (unsigned long long*)data); 
     899} 
     900 
     901template<> 
    896902int CNetCdfInterface::ncGetAttType(int ncid, int varid, const char* attrName, short* data) 
    897903{ 
     
    936942template<> 
    937943int CNetCdfInterface::ncPutAttType(int ncid, int varid, const char* attrName, 
     944                                   StdSize numVal, const size_t* data) 
     945{ 
     946  return nc_put_att_ulonglong(ncid, varid, attrName, NC_UINT64, numVal, (unsigned long long*) data); 
     947} 
     948 
     949template<> 
     950int CNetCdfInterface::ncPutAttType(int ncid, int varid, const char* attrName, 
    938951                                   StdSize numVal, const short* data) 
    939952{ 
     
    968981 
    969982template<> 
     983int CNetCdfInterface::ncGetVaraType(int ncid, int varid, const StdSize* start, const StdSize* count, size_t* data) 
     984{ 
     985  return nc_get_vara_ulonglong(ncid, varid, start, count, (unsigned long long*) data); 
     986} 
     987 
     988template<> 
    970989int CNetCdfInterface::ncGetVaraType(int ncid, int varid, const StdSize* start, const StdSize* count, char* data) 
    971990{ 
     
    9901009{ 
    9911010  return nc_put_vara_int(ncid, varid, start, count, data); 
     1011} 
     1012 
     1013template<> 
     1014int CNetCdfInterface::ncPutVaraType(int ncid, int varid, const StdSize* start, const StdSize* count, const size_t* data) 
     1015{ 
     1016  return nc_put_vara_ulonglong(ncid, varid, start, count, (unsigned long long*)data); 
    9921017} 
    9931018 
  • XIOS/dev/dev_ym/XIOS_COUPLING/src/io/netCdfInterface_decl.cpp

    r1158 r1957  
    2020  macroAtt(float) 
    2121  macroAtt(int) 
     22  macroAtt(size_t) 
    2223  macroAtt(long) 
    2324  macroAtt(short) 
     
    3334  macroPutVar(float) 
    3435  macroPutVar(int) 
     36  macroPutVar(size_t) 
    3537  macroPutVar(char) 
    3638   
     
    4143  macroType(float, NC_FLOAT) 
    4244  macroType(int, NC_INT) 
     45  macroType(size_t, NC_UINT64) 
    4346  macroType(long, NC_LONG) 
    4447  macroType(short, NC_SHORT) 
  • XIOS/dev/dev_ym/XIOS_COUPLING/src/io/onetcdf4.cpp

    r1639 r1957  
    538538       
    539539      template <> 
    540  
    541540      void CONetCDF4::writeData_(int grpid, int varid, 
    542541                                 const std::vector<StdSize>& sstart, 
    543542                                 const std::vector<StdSize>& scount, const int* data) 
     543      { 
     544          CNetCdfInterface::putVaraType(grpid, varid, &sstart[0], &scount[0], data); 
     545      } 
     546      //--------------------------------------------------------------- 
     547 
     548      template <> 
     549      void CONetCDF4::writeData_(int grpid, int varid, 
     550                                 const std::vector<StdSize>& sstart, 
     551                                 const std::vector<StdSize>& scount, const size_t* data) 
    544552      { 
    545553          CNetCdfInterface::putVaraType(grpid, varid, &sstart[0], &scount[0], data); 
  • XIOS/dev/dev_ym/XIOS_COUPLING/src/io/onetcdf4_decl.cpp

    r1392 r1957  
    1111  macro(int, 1) 
    1212  macro(int, 2) 
     13  macro(size_t, 1) 
     14  macro(size_t, 2) 
    1315  macro(double, 1) 
    1416  macro(double, 2) 
Note: See TracChangeset for help on using the changeset viewer.