Ignore:
Timestamp:
07/07/17 18:17:49 (7 years ago)
Author:
oabramkina
Message:

Two server levels: merging trunk r1200 (except for non-contiguous zoom) into dev. Tested on Curie. Todo: non-contiguous zoom.

File:
1 edited

Legend:

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

    r1166 r1201  
    131131 
    132132    CContext* context = CContext::getCurrent(); 
    133       CContextClient* client = (!context->hasServer) ? context->client : this->file->getContextClient(); 
    134  
    135       CEventClient event(getType(), EVENT_ID_UPDATE_DATA); 
    136  
    137       map<int, CArray<int,1> >::iterator it; 
    138       list<CMessage> list_msg; 
    139       list<CArray<double,1> > list_data; 
    140  
    141       if (!grid->doGridHaveDataDistributed()) 
     133    CContextClient* client = (!context->hasServer) ? context->client : this->file->getContextClient(); 
     134 
     135    CEventClient event(getType(), EVENT_ID_UPDATE_DATA); 
     136 
     137    map<int, CArray<int,1> >::iterator it; 
     138    list<CMessage> list_msg; 
     139    list<CArray<double,1> > list_data; 
     140 
     141    if (!grid->doGridHaveDataDistributed()) 
     142    { 
     143       if (client->isServerLeader()) 
     144       { 
     145          for (it = grid->storeIndex_toSrv.begin(); it != grid->storeIndex_toSrv.end(); it++) 
     146          { 
     147            int rank = it->first; 
     148            CArray<int,1>& index = it->second; 
     149 
     150            list_msg.push_back(CMessage()); 
     151            list_data.push_back(CArray<double,1>(index.numElements())); 
     152 
     153            CArray<double,1>& data_tmp = list_data.back(); 
     154            for (int n = 0; n < data_tmp.numElements(); n++) data_tmp(n) = data(index(n)); 
     155 
     156            list_msg.back() << getId() << data_tmp; 
     157            event.push(rank, 1, list_msg.back()); 
     158          } 
     159          client->sendEvent(event); 
     160        } 
     161      else client->sendEvent(event); 
     162    } 
     163    else 
     164    { 
     165      for (it = grid->storeIndex_toSrv.begin(); it != grid->storeIndex_toSrv.end(); it++) 
    142166      { 
    143          if (client->isServerLeader()) 
    144          { 
    145             for (it = grid->storeIndex_toSrv.begin(); it != grid->storeIndex_toSrv.end(); it++) 
    146             { 
    147               int rank = it->first; 
    148               CArray<int,1>& index = it->second; 
    149  
    150               list_msg.push_back(CMessage()); 
    151               list_data.push_back(CArray<double,1>(index.numElements())); 
    152  
    153               CArray<double,1>& data_tmp = list_data.back(); 
    154               for (int n = 0; n < data_tmp.numElements(); n++) data_tmp(n) = data(index(n)); 
    155  
    156               list_msg.back() << getId() << data_tmp; 
    157               event.push(rank, 1, list_msg.back()); 
    158             } 
    159             client->sendEvent(event); 
    160          } 
    161          else client->sendEvent(event); 
    162       } 
    163       else 
    164       { 
    165         for (it = grid->storeIndex_toSrv.begin(); it != grid->storeIndex_toSrv.end(); it++) 
    166         { 
    167           int rank = it->first; 
    168           CArray<int,1>& index = it->second; 
    169  
    170           list_msg.push_back(CMessage()); 
    171           list_data.push_back(CArray<double,1>(index.numElements())); 
    172  
    173           CArray<double,1>& data_tmp = list_data.back(); 
    174           for (int n = 0; n < data_tmp.numElements(); n++) data_tmp(n) = data(index(n)); 
    175  
    176           list_msg.back() << getId() << data_tmp; 
    177           event.push(rank, grid->nbSenders[0][rank], list_msg.back()); 
    178         } 
    179         client->sendEvent(event); 
    180       }     
     167        int rank = it->first; 
     168        CArray<int,1>& index = it->second; 
     169 
     170        list_msg.push_back(CMessage()); 
     171        list_data.push_back(CArray<double,1>(index.numElements())); 
     172 
     173        CArray<double,1>& data_tmp = list_data.back(); 
     174        for (int n = 0; n < data_tmp.numElements(); n++) data_tmp(n) = data(index(n)); 
     175 
     176        list_msg.back() << getId() << data_tmp; 
     177        event.push(rank, grid->nbSenders[0][rank], list_msg.back()); 
     178      } 
     179      client->sendEvent(event); 
     180    } 
    181181 
    182182    CTimer::get("Field : send data").suspend(); 
     
    276276  { 
    277277    CContext* context = CContext::getCurrent(); 
     278//    CContextClient* client = context->client; 
    278279    CContextClient* client = (!context->hasServer) ? context->client : this->file->getContextClient(); 
    279  
    280280 
    281281    lastDataRequestedFromServer = tsDataRequested; 
     
    336336    CContext* context = CContext::getCurrent(); 
    337337    CContextClient* client = context->client; 
     338//    CContextClient* client = (!context->hasServer) ? context->client : this->file->getContextClient(); 
    338339 
    339340    CEventClient event(getType(), EVENT_ID_READ_DATA_READY); 
     
    854855   {      
    855856    if (!isReferenceSolvedAndTransformed) solveAllEnabledFieldsAndTransform(); 
     857 
     858     const bool detectMissingValues = (!detect_missing_value.isEmpty() && !default_value.isEmpty() && detect_missing_value == true); 
     859     const double defaultValue  = detectMissingValues ? default_value : (!default_value.isEmpty() ? default_value : 0.0); 
     860 
    856861     CContext* context = CContext::getCurrent(); 
    857862     bool hasWriterServer = context->hasServer && !context->hasClient; 
     
    906911             if (grid && grid != gridRef && grid->hasTransform()) 
    907912             { 
    908                bool hasMissingValue = (!detect_missing_value.isEmpty() && !default_value.isEmpty() && detect_missing_value == true); 
    909                double defaultValue  = hasMissingValue ? default_value : (!default_value.isEmpty() ? default_value : 0.0); 
    910                std::pair<boost::shared_ptr<CFilter>, boost::shared_ptr<CFilter> > filters = CSpatialTransformFilter::buildFilterGraph(gc, gridRef, grid, hasMissingValue, defaultValue); 
     913                 std::pair<boost::shared_ptr<CFilter>, boost::shared_ptr<CFilter> > filters = CSpatialTransformFilter::buildFilterGraph(gc, gridRef, grid, detectMissingValues, defaultValue);  
    911914 
    912915               filter->connectOutput(filters.first, 0); 
     
    924927           instantDataFilter = serverSourceFilter = boost::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid, 
    925928                                                                                                       freq_offset.isEmpty() ? NoneDu : freq_offset, 
    926                                                                                                        true)); 
     929                                                                                                       true, 
     930                                                                                                       detectMissingValues, defaultValue)); 
    927931         else // The data might be passed from the model 
    928932         { 
    929             bool ignoreMissingValue = (!detect_missing_value.isEmpty() && !default_value.isEmpty() && detect_missing_value == true); 
    930             double defaultValue  = ignoreMissingValue ? default_value : (!default_value.isEmpty() ? default_value : 0.0); 
     933            if (check_if_active.isEmpty()) check_if_active = false;  
    931934            instantDataFilter = clientSourceFilter = boost::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid, NoneDu, false, 
    932                                                                                                         ignoreMissingValue, defaultValue)); 
     935                                                                                                        detectMissingValues, defaultValue)); 
    933936         } 
    934937       } 
     
    937940       if (enableOutput && !storeFilter && !fileWriterFilter) 
    938941       { 
    939          if (!read_access.isEmpty() && read_access) 
    940          { 
    941            storeFilter = boost::shared_ptr<CStoreFilter>(new CStoreFilter(gc, CContext::getCurrent(), grid)); 
    942            instantDataFilter->connectOutput(storeFilter, 0); 
    943          } 
    944  
    945          if (file && (file->mode.isEmpty() || file->mode == CFile::mode_attr::write)) 
    946          { 
    947            fileWriterFilter = boost::shared_ptr<CFileWriterFilter>(new CFileWriterFilter(gc, this)); 
    948            getTemporalDataFilter(gc, file->output_freq)->connectOutput(fileWriterFilter, 0); 
    949          } 
     942         storeFilter = boost::shared_ptr<CStoreFilter>(new CStoreFilter(gc, CContext::getCurrent(), grid, 
     943                                                                        detectMissingValues, defaultValue)); 
     944         instantDataFilter->connectOutput(storeFilter, 0); 
     945       } 
     946 
     947       if (file && (file->mode.isEmpty() || file->mode == CFile::mode_attr::write)) 
     948       { 
     949         fileWriterFilter = boost::shared_ptr<CFileWriterFilter>(new CFileWriterFilter(gc, this)); 
     950         getTemporalDataFilter(gc, file->output_freq)->connectOutput(fileWriterFilter, 0); 
    950951       } 
    951952     } 
     
    10011002     if (!selfReferenceFilter) 
    10021003     { 
     1004       const bool detectMissingValues = (!detect_missing_value.isEmpty() && !default_value.isEmpty() && detect_missing_value == true); 
     1005       const double defaultValue  = detectMissingValues ? default_value : (!default_value.isEmpty() ? default_value : 0.0); 
     1006 
    10031007       if (file && !file->mode.isEmpty() && file->mode == CFile::mode_attr::read) 
    10041008       { 
     
    10061010           serverSourceFilter = boost::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid, 
    10071011                                                                                   freq_offset.isEmpty() ? NoneDu : freq_offset, 
    1008                                                                                    true)); 
     1012                                                                                   true, 
     1013                                                                                   detectMissingValues, defaultValue)); 
     1014 
    10091015         selfReferenceFilter = serverSourceFilter; 
    10101016       } 
     
    10191025         if (!clientSourceFilter) 
    10201026         { 
    1021            bool ignoreMissingValue = (!detect_missing_value.isEmpty() && !default_value.isEmpty() && detect_missing_value == true); 
    1022            double defaultValue  = ignoreMissingValue ? default_value : (!default_value.isEmpty() ? default_value : 0.0);  
     1027           if (check_if_active.isEmpty()) check_if_active = false; 
    10231028           clientSourceFilter = boost::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid, NoneDu, false, 
    1024                                                                                    ignoreMissingValue, defaultValue)); 
     1029                                                                                   detectMissingValues, defaultValue)); 
    10251030         } 
    10261031 
     
    10561061         freq_offset.setValue(NoneDu); 
    10571062 
    1058        const bool ignoreMissingValue = (!detect_missing_value.isEmpty() && !default_value.isEmpty() && detect_missing_value == true); 
    1059  
     1063       const bool detectMissingValues = (!detect_missing_value.isEmpty() && !default_value.isEmpty() && detect_missing_value == true); 
     1064        
    10601065       boost::shared_ptr<CTemporalFilter> temporalFilter(new CTemporalFilter(gc, operation, 
    10611066                                                                             CContext::getCurrent()->getCalendar()->getInitDate(), 
    10621067                                                                             freq_op, freq_offset, outFreq, 
    1063                                                                              ignoreMissingValue, ignoreMissingValue ? default_value : 0.0)); 
     1068                                                                             detectMissingValues, detectMissingValues ? default_value : 0.0)); 
    10641069       instantDataFilter->connectOutput(temporalFilter, 0); 
    10651070 
     
    10961101       if (freq_offset.isEmpty()) freq_offset.setValue(NoneDu); 
    10971102 
    1098        const bool ignoreMissingValue = (!detect_missing_value.isEmpty() && !default_value.isEmpty() && detect_missing_value == true); 
     1103       const bool detectMissingValues = (!detect_missing_value.isEmpty() && !default_value.isEmpty() && detect_missing_value == true); 
    10991104 
    11001105       boost::shared_ptr<CTemporalFilter> temporalFilter(new CTemporalFilter(gc, operation, 
    11011106                                                                             CContext::getCurrent()->getCalendar()->getInitDate(), 
    11021107                                                                             freq_op, freq_offset, outFreq, 
    1103                                                                              ignoreMissingValue, ignoreMissingValue ? default_value : 0.0)); 
     1108                                                                             detectMissingValues, detectMissingValues ? default_value : 0.0)); 
    11041109       selfReferenceFilter->connectOutput(temporalFilter, 0); 
    11051110       return temporalFilter ; 
Note: See TracChangeset for help on using the changeset viewer.