Ignore:
Timestamp:
06/18/18 20:32:55 (6 years ago)
Author:
yushan
Message:

branch_openmp merged with trunk r1544

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/branch_openmp/src/node/field.cpp

    r1482 r1545  
    219219      // Gather all data from different clients       
    220220      recvDataSrv.resize(storeClient.numElements()); 
    221       recvFoperationSrv = boost::shared_ptr<func::CFunctor>(new func::CInstant(recvDataSrv)); 
     221      recvFoperationSrv = std::shared_ptr<func::CFunctor>(new func::CInstant(recvDataSrv)); 
    222222    } 
    223223 
     
    505505    if (!nstepMaxRead) 
    506506    { 
    507        //MPI_Allreduce(MPI_IN_PLACE, &nstepMax, 1, MPI_INT, MPI_MAX, context->server->intraComm); 
    508507       MPI_Allreduce(&nstepMax, &nstepMax, 1, MPI_INT, MPI_MAX, context->server->intraComm); 
    509508       nstepMaxRead = true; 
     
    720719   //---------------------------------------------------------------- 
    721720 
    722    boost::shared_ptr<COutputPin> CField::getInstantDataFilter() 
     721   std::shared_ptr<COutputPin> CField::getInstantDataFilter() 
    723722   { 
    724723     return instantDataFilter; 
     
    988987              << "An operation must be defined for field \"" << getId() << "\"."); 
    989988 
    990       boost::shared_ptr<func::CFunctor> functor; 
     989      std::shared_ptr<func::CFunctor> functor; 
    991990      CArray<double, 1> dummyData; 
    992991 
     
    10311030     { 
    10321031        if (!instantDataFilter) 
    1033           instantDataFilter = clientSourceFilter = boost::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid,true)); 
     1032          instantDataFilter = clientSourceFilter = std::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid,true)); 
    10341033 
    10351034 
     
    10391038         if (file && (file->mode.isEmpty() || file->mode == CFile::mode_attr::write)) 
    10401039         { 
    1041            fileServerWriterFilter = boost::shared_ptr<CFileServerWriterFilter>(new CFileServerWriterFilter(gc, this)); 
     1040           fileServerWriterFilter = std::shared_ptr<CFileServerWriterFilter>(new CFileServerWriterFilter(gc, this)); 
    10421041           instantDataFilter->connectOutput(fileServerWriterFilter, 0); 
    10431042         } 
     
    10471046     { 
    10481047       if (!instantDataFilter) 
    1049          instantDataFilter = clientSourceFilter = boost::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid, true)); 
     1048         instantDataFilter = clientSourceFilter = std::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid, true)); 
    10501049 
    10511050             // If the field data is to be read by the client or/and written to a file 
     
    10541053         if (file && (file->mode.isEmpty() || file->mode == CFile::mode_attr::write)) 
    10551054         { 
    1056            fileWriterFilter = boost::shared_ptr<CFileWriterFilter>(new CFileWriterFilter(gc, this)); 
     1055           fileWriterFilter = std::shared_ptr<CFileWriterFilter>(new CFileWriterFilter(gc, this)); 
    10571056           instantDataFilter->connectOutput(fileWriterFilter, 0); 
    10581057         } 
     
    10681067         { 
    10691068           boost::scoped_ptr<IFilterExprNode> expr(parseExpr(getExpression() + '\0')); 
    1070            boost::shared_ptr<COutputPin> filter = expr->reduce(gc, *this); 
     1069           std::shared_ptr<COutputPin> filter = expr->reduce(gc, *this); 
    10711070 
    10721071           // Check if a spatial transformation is needed 
     
    10771076             if (grid && grid != gridRef && grid->hasTransform()) 
    10781077             { 
    1079                  std::pair<boost::shared_ptr<CFilter>, boost::shared_ptr<CFilter> > filters = CSpatialTransformFilter::buildFilterGraph(gc, gridRef, grid, detectMissingValues, defaultValue);  
     1078                 std::pair<std::shared_ptr<CFilter>, std::shared_ptr<CFilter> > filters = CSpatialTransformFilter::buildFilterGraph(gc, gridRef, grid, detectMissingValues, defaultValue);  
    10801079 
    10811080               filter->connectOutput(filters.first, 0); 
     
    10931092         { 
    10941093           checkTimeAttributes(); 
    1095            instantDataFilter = serverSourceFilter = boost::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid, true, freq_offset, true, 
     1094           instantDataFilter = serverSourceFilter = std::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid, true, freq_offset, true, 
    10961095                                                                                                       detectMissingValues, defaultValue)); 
    10971096         } 
     
    10991098         { 
    11001099            if (check_if_active.isEmpty()) check_if_active = false;  
    1101             instantDataFilter = clientSourceFilter = boost::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid, false, NoneDu, false, 
     1100            instantDataFilter = clientSourceFilter = std::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid, false, NoneDu, false, 
    11021101                                                                                                        detectMissingValues, defaultValue)); 
    11031102         } 
     
    11091108         if (!read_access.isEmpty() && read_access) 
    11101109         { 
    1111            storeFilter = boost::shared_ptr<CStoreFilter>(new CStoreFilter(gc, CContext::getCurrent(), grid, 
     1110           storeFilter = std::shared_ptr<CStoreFilter>(new CStoreFilter(gc, CContext::getCurrent(), grid, 
    11121111                                                                          detectMissingValues, defaultValue)); 
    11131112           instantDataFilter->connectOutput(storeFilter, 0); 
     
    11161115         if (file && (file->mode.isEmpty() || file->mode == CFile::mode_attr::write)) 
    11171116         { 
    1118            fileWriterFilter = boost::shared_ptr<CFileWriterFilter>(new CFileWriterFilter(gc, this)); 
     1117           fileWriterFilter = std::shared_ptr<CFileWriterFilter>(new CFileWriterFilter(gc, this)); 
    11191118           getTemporalDataFilter(gc, file->output_freq)->connectOutput(fileWriterFilter, 0); 
    11201119         } 
     
    11301129    * \return the output pin corresponding to the field reference 
    11311130    */ 
    1132    boost::shared_ptr<COutputPin> CField::getFieldReference(CGarbageCollector& gc) 
     1131   std::shared_ptr<COutputPin> CField::getFieldReference(CGarbageCollector& gc) 
    11331132   { 
    11341133     if (instantDataFilter || field_ref.isEmpty()) 
     
    11391138     fieldRef->buildFilterGraph(gc, false); 
    11401139 
    1141      std::pair<boost::shared_ptr<CFilter>, boost::shared_ptr<CFilter> > filters; 
     1140     std::pair<std::shared_ptr<CFilter>, std::shared_ptr<CFilter> > filters; 
    11421141     // Check if a spatial transformation is needed 
    11431142     if (grid && grid != fieldRef->grid && grid->hasTransform()) 
     
    11481147     } 
    11491148     else 
    1150        filters.first = filters.second = boost::shared_ptr<CFilter>(new CPassThroughFilter(gc)); 
     1149       filters.first = filters.second = std::shared_ptr<CFilter>(new CPassThroughFilter(gc)); 
    11511150 
    11521151     fieldRef->getInstantDataFilter()->connectOutput(filters.first, 0); 
     
    11641163    * \return the output pin corresponding to a self reference 
    11651164    */ 
    1166    boost::shared_ptr<COutputPin> CField::getSelfReference(CGarbageCollector& gc) 
     1165   std::shared_ptr<COutputPin> CField::getSelfReference(CGarbageCollector& gc) 
    11671166   { 
    11681167     if (instantDataFilter || !hasExpression()) 
     
    11801179         { 
    11811180           checkTimeAttributes(); 
    1182            serverSourceFilter = boost::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid, true, freq_offset, true, 
     1181           serverSourceFilter = std::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid, true, freq_offset, true, 
    11831182                                                                                   detectMissingValues, defaultValue)); 
    11841183         } 
     
    11971196         { 
    11981197           if (check_if_active.isEmpty()) check_if_active = false; 
    1199            clientSourceFilter = boost::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid, true, NoneDu, false, 
     1198           clientSourceFilter = std::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid, true, NoneDu, false, 
    12001199                                                                                   detectMissingValues, defaultValue)); 
    12011200         } 
     
    12171216    * \return the output pin corresponding to the requested temporal filter 
    12181217    */ 
    1219    boost::shared_ptr<COutputPin> CField::getTemporalDataFilter(CGarbageCollector& gc, CDuration outFreq) 
    1220    { 
    1221      std::map<CDuration, boost::shared_ptr<COutputPin> >::iterator it = temporalDataFilters.find(outFreq); 
     1218   std::shared_ptr<COutputPin> CField::getTemporalDataFilter(CGarbageCollector& gc, CDuration outFreq) 
     1219   { 
     1220     std::map<CDuration, std::shared_ptr<COutputPin> >::iterator it = temporalDataFilters.find(outFreq); 
    12221221 
    12231222     if (it == temporalDataFilters.end()) 
     
    12301229 
    12311230       const bool detectMissingValues = (!detect_missing_value.isEmpty()  && detect_missing_value == true); 
    1232        boost::shared_ptr<CTemporalFilter> temporalFilter(new CTemporalFilter(gc, operation, 
     1231       std::shared_ptr<CTemporalFilter> temporalFilter(new CTemporalFilter(gc, operation, 
    12331232                                                                             CContext::getCurrent()->getCalendar()->getInitDate(), 
    12341233                                                                             freq_op, freq_offset, outFreq, detectMissingValues)); 
     
    12511250    */ 
    12521251    
    1253    boost::shared_ptr<COutputPin> CField::getSelfTemporalDataFilter(CGarbageCollector& gc, CDuration outFreq) 
     1252   std::shared_ptr<COutputPin> CField::getSelfTemporalDataFilter(CGarbageCollector& gc, CDuration outFreq) 
    12541253   { 
    12551254     if (instantDataFilter || !hasExpression()) 
     
    12681267 
    12691268       const bool detectMissingValues = (!detect_missing_value.isEmpty() && detect_missing_value == true); 
    1270        boost::shared_ptr<CTemporalFilter> temporalFilter(new CTemporalFilter(gc, operation, 
     1269       std::shared_ptr<CTemporalFilter> temporalFilter(new CTemporalFilter(gc, operation, 
    12711270                                                                             CContext::getCurrent()->getCalendar()->getInitDate(), 
    12721271                                                                             freq_op, freq_offset, outFreq, detectMissingValues)); 
     
    13191318        std::vector<CScalar*> vecScalar; 
    13201319        std::vector<int> axisDomainOrderTmp; 
     1320 
     1321        std::vector<CDomain*> vecDomRef; 
     1322        std::vector<CAxis*> vecAxisRef; 
     1323        std::vector<CScalar*> vecScalarRef; 
     1324 
    13211325         
    13221326        if (!domain_ref.isEmpty()) 
     
    13261330          { 
    13271331            vecDom.push_back(CDomain::get(domain_ref)); 
     1332            vecDomRef.push_back(CDomain::createDomain()); 
     1333            vecDomRef.back()->domain_ref=domain_ref; 
    13281334            axisDomainOrderTmp.push_back(2); 
    13291335          } 
    1330           else 
    1331             ERROR("CField::solveGridReference(void)", 
    1332                   << "Invalid reference to domain '" << domain_ref.getValue() << "'."); 
     1336          else  ERROR("CField::solveGridReference(void)", 
     1337                      << "Invalid reference to domain '" << domain_ref.getValue() << "'."); 
    13331338        } 
    13341339 
     
    13381343          { 
    13391344            vecAxis.push_back(CAxis::get(axis_ref)); 
     1345            vecAxisRef.push_back(CAxis::createAxis()); 
     1346            vecAxisRef.back()->axis_ref=axis_ref; 
    13401347            axisDomainOrderTmp.push_back(1); 
    13411348          } 
    1342           else 
    1343             ERROR("CField::solveGridReference(void)", 
    1344                   << "Invalid reference to axis '" << axis_ref.getValue() << "'."); 
     1349          else  ERROR("CField::solveGridReference(void)", 
     1350                      << "Invalid reference to axis '" << axis_ref.getValue() << "'."); 
    13451351        } 
    13461352 
     
    13501356          { 
    13511357            vecScalar.push_back(CScalar::get(scalar_ref)); 
     1358            vecScalarRef.push_back(CScalar::createScalar()); 
     1359            vecScalarRef.back()->scalar_ref=scalar_ref; 
    13521360            axisDomainOrderTmp.push_back(0); 
    13531361          } 
    1354           else 
    1355             ERROR("CField::solveGridReference(void)", 
    1356                   << "Invalid reference to scalar '" << scalar_ref.getValue() << "'."); 
     1362          else ERROR("CField::solveGridReference(void)", 
     1363                     << "Invalid reference to scalar '" << scalar_ref.getValue() << "'."); 
    13571364        } 
    13581365         
     
    13651372        // Warning: the gridId shouldn't be set as the grid_ref since it could be inherited 
    13661373        StdString gridId = CGrid::generateId(vecDom, vecAxis, vecScalar,axisDomainOrder); 
    1367         if (CGrid::has(gridId)) 
    1368           this->grid = CGrid::get(gridId); 
    1369         else 
    1370           this->grid = CGrid::createGrid(gridId, vecDom, vecAxis, vecScalar,axisDomainOrder); 
     1374        if (CGrid::has(gridId)) this->grid = CGrid::get(gridId); 
     1375        else  this->grid = CGrid::createGrid(gridId, vecDomRef, vecAxisRef, vecScalarRef,axisDomainOrder); 
    13711376      } 
    13721377      else 
    13731378      { 
    1374         if (CGrid::has(grid_ref)) 
    1375           this->grid = CGrid::get(grid_ref); 
    1376         else 
    1377           ERROR("CField::solveGridReference(void)", 
    1378                 << "Invalid reference to grid '" << grid_ref.getValue() << "'."); 
     1379        if (CGrid::has(grid_ref)) this->grid = CGrid::get(grid_ref); 
     1380        else  ERROR("CField::solveGridReference(void)", 
     1381                     << "Invalid reference to grid '" << grid_ref.getValue() << "'."); 
    13791382      } 
    13801383   } 
     
    16211624   } 
    16221625 
     1626 
     1627   /*! 
     1628    * Send all Attributes to server. This method is overloaded, since only grid_ref attribute 
     1629    * must be sent to server and not domain_ref/axis_ref/scalar_ref.  
     1630    */ 
     1631     
     1632   void CField::sendAllAttributesToServer(CContextClient* client) 
     1633   { 
     1634     if (grid_ref.isEmpty()) 
     1635     { 
     1636       grid_ref=grid->getId() ; 
     1637       SuperClass::sendAllAttributesToServer(client) ; 
     1638       grid_ref.reset(); 
     1639     } 
     1640     else SuperClass::sendAllAttributesToServer(client) ; 
     1641   } 
     1642     
    16231643   void CField::sendAddVariable(const string& id, CContextClient* client) 
    16241644   { 
     
    16701690     bool isFieldRead  = file && !file->mode.isEmpty() && file->mode == CFile::mode_attr::read; 
    16711691     bool isFieldWrite = file && ( file->mode.isEmpty() ||  file->mode == CFile::mode_attr::write); 
    1672      if (isFieldRead && operation.getValue() != "instant") 
     1692     if (isFieldRead && !(operation.getValue() == "instant" || operation.getValue() == "once") )      
    16731693       ERROR("void CField::checkTimeAttributes(void)", 
    16741694             << "Unsupported operation for field '" << getFieldOutputName() << "'." << std::endl 
Note: See TracChangeset for help on using the changeset viewer.