Changeset 1030


Ignore:
Timestamp:
01/20/17 16:17:57 (7 years ago)
Author:
oabramkina
Message:

dev: intermediate commit.

Location:
XIOS/dev/dev_olga/src
Files:
14 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/dev_olga/src/client_client_dht_template_impl.hpp

    r892 r1030  
    307307 
    308308  indexToInfoMappingLevel_.swap(indexToInfoMapping); 
     309 
    309310  if (0 != recvNbIndexCount) delete [] recvIndexBuff; 
    310311  for (boost::unordered_map<int,size_t*>::const_iterator it = client2ClientIndex.begin(); 
  • XIOS/dev/dev_olga/src/client_server_mapping.hpp

    r1025 r1030  
    2626public: 
    2727  typedef boost::unordered_map<int, std::vector<size_t> > GlobalIndexMap; 
     28//  typedef boost::map<int, std::vector<size_t> > GlobalIndexMap; 
    2829  public: 
    2930    /** Default constructor */ 
  • XIOS/dev/dev_olga/src/distribution_server.cpp

    r1025 r1030  
    134134      globalIndex = globalIndexOnEachDimension[0](i); 
    135135 
    136       for (int k = 1; k < nbDim; ++k) 
    137       { 
    138         mulDim *= nbGlobal[k-1]; 
     136      for (int k = 0; k < nbDim; ++k) 
     137      { 
     138        mulDim *= nbGlobal[k]; 
    139139        globalIndex += (currentIndex[k])*mulDim; 
    140140      } 
  • XIOS/dev/dev_olga/src/group_template_impl.hpp

    r1021 r1030  
    445445    { 
    446446      // Use correct context client to send message 
    447       int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
     447      // int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
     448      int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 1) : 1; 
    448449      for (int i = 0; i < nbSrvPools; ++i) 
    449450      { 
  • XIOS/dev/dev_olga/src/io/nc4_data_output.cpp

    r1027 r1030  
    10441044        CContext* context = CContext::getCurrent(); 
    10451045 
    1046         int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
    1047         for (int i = 0; i < nbSrvPools; ++i) 
     1046        if (axis->IsWritten(this->filename)) return; 
     1047        axis->checkAttributes(); 
     1048 
     1049        int local_size_write  = axis->getLocalWriteSize(); 
     1050        int global_size_write = axis->getGlobalWriteSize(); 
     1051        int start_write = axis->getStartWriteIndex(); 
     1052        int count_write = axis->getCountWriteIndex(); 
     1053 
     1054        if ((0 == local_size_write) && (MULTI_FILE == SuperClass::type)) return; 
     1055 
     1056        std::vector<StdString> dims; 
     1057        StdString axisid = axis->getAxisOutputName(); 
     1058        if (isWrittenAxis(axisid)) return ; 
     1059        else setWrittenAxis(axisid); 
     1060 
     1061        try 
    10481062        { 
    1049           CContextServer* server = (context->hasServer) ? context->server : context->serverPrimServer[i]; 
    1050  
    1051           if (axis->IsWritten(this->filename)) return; 
    1052           axis->checkAttributes(); 
    1053  
    1054           int local_size_write  = axis->getLocalWriteSize(); 
    1055           int global_size_write = axis->getGlobalWriteSize(); 
    1056           int start_write = axis->getStartWriteIndex(); 
    1057           int count_write = axis->getCountWriteIndex(); 
    1058  
    1059           if ((0 == local_size_write) && (MULTI_FILE == SuperClass::type)) return; 
    1060  
    1061           std::vector<StdString> dims; 
    1062           StdString axisid = axis->getAxisOutputName(); 
    1063           if (isWrittenAxis(axisid)) return ; 
    1064           else setWrittenAxis(axisid); 
    1065  
    1066           try 
     1063          SuperClassWriter::addDimension(axisid, global_size_write); 
     1064          if (axis->hasValue) 
    10671065          { 
    1068             SuperClassWriter::addDimension(axisid, global_size_write); 
    1069             if (axis->hasValue) 
     1066            dims.push_back(axisid); 
     1067            SuperClassWriter::addVariable(axisid, NC_FLOAT, dims); 
     1068 
     1069            if (!axis->name.isEmpty()) 
     1070              SuperClassWriter::addAttribute("name", axis->name.getValue(), &axisid); 
     1071 
     1072            if (!axis->standard_name.isEmpty()) 
     1073              SuperClassWriter::addAttribute("standard_name", axis->standard_name.getValue(), &axisid); 
     1074 
     1075            if (!axis->long_name.isEmpty()) 
     1076              SuperClassWriter::addAttribute("long_name", axis->long_name.getValue(), &axisid); 
     1077 
     1078            if (!axis->unit.isEmpty()) 
     1079              SuperClassWriter::addAttribute("units", axis->unit.getValue(), &axisid); 
     1080 
     1081            if (!axis->positive.isEmpty()) 
    10701082            { 
    1071               dims.push_back(axisid); 
    1072               SuperClassWriter::addVariable(axisid, NC_FLOAT, dims); 
    1073  
    1074               if (!axis->name.isEmpty()) 
    1075                 SuperClassWriter::addAttribute("name", axis->name.getValue(), &axisid); 
    1076  
    1077               if (!axis->standard_name.isEmpty()) 
    1078                 SuperClassWriter::addAttribute("standard_name", axis->standard_name.getValue(), &axisid); 
    1079  
    1080               if (!axis->long_name.isEmpty()) 
    1081                 SuperClassWriter::addAttribute("long_name", axis->long_name.getValue(), &axisid); 
    1082  
    1083               if (!axis->unit.isEmpty()) 
    1084                 SuperClassWriter::addAttribute("units", axis->unit.getValue(), &axisid); 
    1085  
    1086               if (!axis->positive.isEmpty()) 
     1083              SuperClassWriter::addAttribute("axis", string("Z"), &axisid); 
     1084              SuperClassWriter::addAttribute("positive", 
     1085                                             (axis->positive == CAxis::positive_attr::up) ? string("up") : string("down"), 
     1086                                             &axisid); 
     1087            } 
     1088 
     1089            StdString axisBoundsId = axisid + "_bounds"; 
     1090            if (!axis->bounds.isEmpty()) 
     1091            { 
     1092              dims.push_back("axis_nbounds"); 
     1093              SuperClassWriter::addVariable(axisBoundsId, NC_FLOAT, dims); 
     1094              SuperClassWriter::addAttribute("bounds", axisBoundsId, &axisid); 
     1095            } 
     1096 
     1097            SuperClassWriter::definition_end(); 
     1098 
     1099            switch (SuperClass::type) 
     1100            { 
     1101              case MULTI_FILE: 
    10871102              { 
    1088                 SuperClassWriter::addAttribute("axis", string("Z"), &axisid); 
    1089                 SuperClassWriter::addAttribute("positive", 
    1090                                                (axis->positive == CAxis::positive_attr::up) ? string("up") : string("down"), 
    1091                                                &axisid); 
     1103                CArray<double,1> axis_value(local_size_write); 
     1104                for (int i = 0; i < local_size_write; i++) axis_value(i) = axis->value(i); 
     1105                SuperClassWriter::writeData(axis_value, axisid, isCollective, 0); 
     1106 
     1107                if (!axis->bounds.isEmpty()) 
     1108                  SuperClassWriter::writeData(axis->bounds, axisBoundsId, isCollective, 0); 
     1109 
     1110                SuperClassWriter::definition_start(); 
     1111 
     1112                break; 
    10921113              } 
    1093  
    1094               StdString axisBoundsId = axisid + "_bounds"; 
    1095               if (!axis->bounds.isEmpty()) 
     1114              case ONE_FILE: 
    10961115              { 
    1097                 dims.push_back("axis_nbounds"); 
    1098                 SuperClassWriter::addVariable(axisBoundsId, NC_FLOAT, dims); 
    1099                 SuperClassWriter::addAttribute("bounds", axisBoundsId, &axisid); 
     1116                CArray<double,1> axis_value(count_write); 
     1117                axis_value = axis->value; 
     1118 
     1119                std::vector<StdSize> start(1), startBounds(2) ; 
     1120                std::vector<StdSize> count(1), countBounds(2) ; 
     1121                start[0] = startBounds[0] = start_write; 
     1122                count[0] = countBounds[0] = count_write; 
     1123                startBounds[1] = 0; 
     1124                countBounds[1] = 2; 
     1125                SuperClassWriter::writeData(axis_value, axisid, isCollective, 0, &start, &count); 
     1126 
     1127                if (!axis->bounds.isEmpty()) 
     1128                  SuperClassWriter::writeData(axis->bounds, axisBoundsId, isCollective, 0, &startBounds, &countBounds); 
     1129 
     1130                SuperClassWriter::definition_start(); 
     1131 
     1132                break; 
    11001133              } 
    1101  
    1102               SuperClassWriter::definition_end(); 
    1103  
    1104               switch (SuperClass::type) 
    1105               { 
    1106                 case MULTI_FILE: 
    1107                 { 
    1108                   CArray<double,1> axis_value(local_size_write); 
    1109                   for (int i = 0; i < local_size_write; i++) axis_value(i) = axis->value(i); 
    1110                   SuperClassWriter::writeData(axis_value, axisid, isCollective, 0); 
    1111  
    1112                   if (!axis->bounds.isEmpty()) 
    1113                     SuperClassWriter::writeData(axis->bounds, axisBoundsId, isCollective, 0); 
    1114  
    1115                   SuperClassWriter::definition_start(); 
    1116  
    1117                   break; 
    1118                 } 
    1119                 case ONE_FILE: 
    1120                 { 
    1121                   CArray<double,1> axis_value(count_write); 
    1122                   axis_value = axis->value; 
    1123  
    1124                   std::vector<StdSize> start(1), startBounds(2) ; 
    1125                   std::vector<StdSize> count(1), countBounds(2) ; 
    1126                   start[0] = startBounds[0] = start_write; 
    1127                   count[0] = countBounds[0] = count_write; 
    1128                   startBounds[1] = 0; 
    1129                   countBounds[1] = 2; 
    1130                   SuperClassWriter::writeData(axis_value, axisid, isCollective, 0, &start, &count); 
    1131  
    1132                   if (!axis->bounds.isEmpty()) 
    1133                     SuperClassWriter::writeData(axis->bounds, axisBoundsId, isCollective, 0, &startBounds, &countBounds); 
    1134  
    1135                   SuperClassWriter::definition_start(); 
    1136  
    1137                   break; 
    1138                 } 
    1139                 default : 
    1140                   ERROR("CNc4DataOutput::writeAxis_(CAxis* axis)", 
    1141                         << "[ type = " << SuperClass::type << "]" 
    1142                         << " not implemented yet !"); 
    1143               } 
     1134              default : 
     1135                ERROR("CNc4DataOutput::writeAxis_(CAxis* axis)", 
     1136                      << "[ type = " << SuperClass::type << "]" 
     1137                      << " not implemented yet !"); 
    11441138            } 
    11451139          } 
    1146           catch (CNetCdfException& e) 
    1147           { 
    1148             StdString msg("On writing the axis : "); 
    1149             msg.append(axisid); msg.append("\n"); 
    1150             msg.append("In the context : "); 
    1151             CContext* context = CContext::getCurrent() ; 
    1152             msg.append(context->getId()); msg.append("\n"); 
    1153             msg.append(e.what()); 
    1154             ERROR("CNc4DataOutput::writeAxis_(CAxis* axis)", << msg); 
    1155           } 
    1156       } // loop over nbSrvPools 
     1140        } 
     1141        catch (CNetCdfException& e) 
     1142        { 
     1143          StdString msg("On writing the axis : "); 
     1144          msg.append(axisid); msg.append("\n"); 
     1145          msg.append("In the context : "); 
     1146          CContext* context = CContext::getCurrent() ; 
     1147          msg.append(context->getId()); msg.append("\n"); 
     1148          msg.append(e.what()); 
     1149          ERROR("CNc4DataOutput::writeAxis_(CAxis* axis)", << msg); 
     1150        } 
     1151       
    11571152      axis->addRelFile(this->filename); 
    11581153     } 
  • XIOS/dev/dev_olga/src/io/netCdfInterface_impl.hpp

    r833 r1030  
    121121      inqVarName(ncid, varId, varName); 
    122122      sstr << "Unable to write data given the location id: " << ncid << " and the variable whose id: " << varId << " and name: " << varName << std::endl; 
     123//      if (status == NC_ENOTVAR ) 
     124//        sstr <<   "Variable not found. "<< std::endl; 
     125//      else if (status == NC_EINVALCOORDS) 
     126//        sstr <<   "Index exceeds dimension bound. "<< std::endl; 
     127//      else if (status == NC_EEDGE) 
     128//        sstr <<   " Start+count exceeds dimension bound. "<< std::endl; 
     129//      else if (status == NC_ERANGE) 
     130//        sstr <<   " One or more of the values are out of range. "<< std::endl; 
     131//      else if (status == NC_EINDEFINE) 
     132//        sstr <<   " Operation not allowed in define mode. "<< std::endl; 
     133//      else if (status == NC_EBADID) 
     134//        sstr <<   "Bad ncid. "<< std::endl; 
    123135      throw CNetCdfException(sstr.str()); 
    124136    } 
  • XIOS/dev/dev_olga/src/node/axis.cpp

    r1027 r1030  
    453453  { 
    454454    CContext* context = CContext::getCurrent(); 
    455     int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
     455    // int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
     456    int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 1) : 1; 
    456457    for (int i = 0; i < nbSrvPools; ++i) 
    457458    { 
     
    748749  { 
    749750    CContext* context = CContext::getCurrent(); 
    750     int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
    751      
     751    // int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
     752    int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 1) : 1; 
    752753    for (int i = 0; i < nbSrvPools; ++i) 
    753754    { 
     
    854855    int ns, n, i, j, ind, nv, idx; 
    855856    CContext* context = CContext::getCurrent(); 
    856     int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
    857  
     857    //int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
     858    int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 1) : 1; 
    858859    for (int i = 0; i < nbSrvPools; ++i) 
    859860    { 
  • XIOS/dev/dev_olga/src/node/context.cpp

    r1027 r1030  
    520520   { 
    521521      // Use correct context client to send message 
    522      int nbSrvPools = (hasServer) ? clientPrimServer.size() : 1; 
     522     // int nbSrvPools = (hasServer) ? clientPrimServer.size() : 1; 
     523    int nbSrvPools = (this->hasServer) ? (this->hasClient ? this->clientPrimServer.size() : 0) : 1; 
    523524     for (int i = 0; i < nbSrvPools; ++i) 
    524525     { 
     
    693694     { 
    694695       this->enabledFiles[i]->generateNewTransformationGridDest(); 
     696     } 
     697 
     698     for (int i = 0; i < size; ++i) 
     699     { 
     700       //this->enabledFiles[i]->checkGridOfEnabledFields(); 
    695701     } 
    696702   } 
     
    898904   { 
    899905     // Use correct context client to send message 
    900      int nbSrvPools = (hasServer) ? clientPrimServer.size() : 1; 
     906     // int nbSrvPools = (hasServer) ? clientPrimServer.size() : 1; 
     907     int nbSrvPools = (this->hasServer) ? (this->hasClient ? this->clientPrimServer.size() : 0) : 1; 
    901908     for (int i = 0; i < nbSrvPools; ++i) 
    902909     { 
     
    926933      *buffer>>id; 
    927934      get(id)->closeDefinition(); 
    928       // if (get(id)->hasClient && get(id)->hasServer) 
    929       // {         
    930       //   get(id)->sendCloseDefinition(); 
    931       // } 
    932935   } 
    933936 
     
    937940     // Use correct context client to send message 
    938941//     CContextClient* contextClientTmp = (0 != clientPrimServer) ? clientPrimServer : client; 
    939      int nbSrvPools = (hasServer) ? clientPrimServer.size() : 1; 
     942     // int nbSrvPools = (hasServer) ? clientPrimServer.size() : 1; 
     943    int nbSrvPools = (this->hasServer) ? (this->hasClient ? this->clientPrimServer.size() : 0) : 1; 
    940944     for (int i = 0; i < nbSrvPools; ++i) 
    941945     { 
     
    984988   { 
    985989     // Use correct context client to send message 
    986      int nbSrvPools = (hasServer) ? clientPrimServer.size() : 1; 
     990     // int nbSrvPools = (hasServer) ? clientPrimServer.size() : 1; 
     991     int nbSrvPools = (this->hasServer) ? (this->hasClient ? this->clientPrimServer.size() : 0) : 1; 
    987992     for (int i = 0; i < nbSrvPools; ++i) 
    988993     { 
     
    10321037   { 
    10331038      // Use correct context client to send message 
    1034      int nbSrvPools = (hasServer) ? clientPrimServer.size() : 1; 
     1039     // int nbSrvPools = (hasServer) ? clientPrimServer.size() : 1; 
     1040     int nbSrvPools = (this->hasServer) ? (this->hasClient ? this->clientPrimServer.size() : 0) : 1; 
    10351041     for (int i = 0; i < nbSrvPools; ++i) 
    10361042     { 
     
    10641070   { 
    10651071      // Use correct context client to send message 
    1066      int nbSrvPools = (hasServer) ? clientPrimServer.size() : 1; 
     1072     // int nbSrvPools = (hasServer) ? clientPrimServer.size() : 1; 
     1073     int nbSrvPools = (this->hasServer) ? (this->hasClient ? this->clientPrimServer.size() : 0) : 1; 
    10671074     for (int i = 0; i < nbSrvPools; ++i) 
    10681075     { 
     
    15681575 
    15691576    // Use correct context client to send message 
    1570     int nbSrvPools = (hasServer) ? clientPrimServer.size() : 1; 
     1577    // int nbSrvPools = (hasServer) ? clientPrimServer.size() : 1; 
     1578    int nbSrvPools = (this->hasServer) ? (this->hasClient ? this->clientPrimServer.size() : 0) : 1; 
    15711579    for (int i = 0; i < nbSrvPools; ++i) 
    15721580    { 
  • XIOS/dev/dev_olga/src/node/domain.cpp

    r1027 r1030  
    14421442    CContext* context = CContext::getCurrent(); 
    14431443     // Use correct context client to send message 
    1444     int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
     1444    // int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
     1445    int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 0) : 1; 
    14451446    for (int i = 0; i < nbSrvPools; ++i) 
    14461447    { 
    1447        CContextClient* contextClientTmp = (context->hasServer) ? context->clientPrimServer[i] 
     1448      CContextClient* contextClientTmp = (context->hasServer) ? context->clientPrimServer[i] 
    14481449                                                                         : context->client;     
    14491450      int nbServer = contextClientTmp->serverSize; 
    1450     std::vector<int> nGlobDomain(2); 
    1451     nGlobDomain[0] = this->ni_glo; 
    1452     nGlobDomain[1] = this->nj_glo; 
    1453  
    1454     CServerDistributionDescription serverDescription(nGlobDomain, nbServer); 
     1451      std::vector<int> nGlobDomain(2); 
     1452      nGlobDomain[0] = this->ni_glo; 
     1453      nGlobDomain[1] = this->nj_glo; 
     1454 
     1455      CServerDistributionDescription serverDescription(nGlobDomain, nbServer); 
    14551456      if (isUnstructed_) serverDescription.computeServerDistribution(false, 0); 
    14561457      else serverDescription.computeServerDistribution(false, 1); 
     
    14951496  { 
    14961497    CContext* context=CContext::getCurrent() ; 
    1497     int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
     1498    // int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
     1499    int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 0) : 1; 
    14981500    for (int i = 0; i < nbSrvPools; ++i) 
    14991501    { 
     
    16661668      for (it = globalIndexDomainOnServer.begin(); it != ite; ++it) { 
    16671669        connectedServerRank_.push_back(it->first); 
     1670//        std::vector<size_t> vec = it->second; 
     1671//        std::sort(vec.begin(), vec.end()); 
     1672//        indSrv_[it->first] = vec; 
    16681673      } 
    16691674 
     
    17101715    int ns, n, i, j, ind, nv, idx; 
    17111716    CContext* context = CContext::getCurrent(); 
    1712     int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
     1717    // int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
     1718    int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 0) : 1; 
    17131719    for (int i = 0; i < nbSrvPools; ++i) 
    17141720    { 
     
    17801786    int ns, n, i, j, ind, nv, idx; 
    17811787    CContext* context = CContext::getCurrent(); 
    1782     int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
     1788    // int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
     1789    int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 0) : 1; 
    17831790    for (int i = 0; i < nbSrvPools; ++i) 
    17841791    { 
     
    18261833    int ns, n, i, j, ind, nv, idx; 
    18271834    CContext* context = CContext::getCurrent(); 
    1828     int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
     1835    // int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
     1836    int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 0) : 1; 
    18291837    for (int i = 0; i < nbSrvPools; ++i) 
    18301838    { 
     
    18751883    int ns, n, i, j, ind, nv, idx; 
    18761884    CContext* context = CContext::getCurrent(); 
    1877     int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
     1885    // int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
     1886    int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 0) : 1; 
    18781887    for (int i = 0; i < nbSrvPools; ++i) 
    18791888    { 
     
    19601969    int ns, n, i, j, ind, nv, idx; 
    19611970    CContext* context = CContext::getCurrent(); 
    1962     int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
     1971    // int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
     1972    int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 0) : 1; 
    19631973    for (int i = 0; i < nbSrvPools; ++i) 
    19641974    { 
     
    21502160      { 
    21512161         index = tmp(ind); 
    2152          i_index(nbIndGlob) = index / ni_glo; 
    2153          j_index(nbIndGlob) = index % ni_glo; 
     2162         i_index(nbIndGlob) = index % ni_glo; 
     2163         j_index(nbIndGlob) = index / ni_glo; 
    21542164         ++nbIndGlob; 
    21552165      }  
     
    21722182      { 
    21732183         index = tmp(ind); 
    2174          zoom_i_index(nbZoomInd) = index / ni_glo; 
    2175          zoom_j_index(nbZoomInd) = index % ni_glo; 
     2184         zoom_i_index(nbZoomInd) = index % ni_glo; 
     2185         zoom_j_index(nbZoomInd) = index / ni_glo; 
    21762186         ++nbZoomInd; 
    21772187      }  
     
    22012211        count_write_index_[0] = nbIZoom; 
    22022212        count_write_index_[1] = nbJZoom; 
     2213 
     2214        // Reoder the zoom_index 
     2215        for (int j = 0; j < nbJZoom; ++j) 
     2216          for (int i = 0; i < nbIZoom; ++i) 
     2217          { 
     2218            idx = nbIZoom * j + i; 
     2219            if (idx < ni_zoom) 
     2220            { 
     2221              zoom_i_index(idx) = ibegin + i; 
     2222              zoom_j_index(idx) = jbegin + j; 
     2223            } 
     2224          }   
     2225 
     2226        // Reorder the global index 
     2227        for (int j = 0; j < nj; ++j) 
     2228          for (int i = 0; i < ni; ++i) 
     2229          { 
     2230            idx = ni * j + i; 
     2231            if (idx < nbIndGlob) 
     2232            { 
     2233              i_index(idx) = ibegin + i; 
     2234              j_index(idx) = jbegin + j; 
     2235            } 
     2236          }          
    22032237      } 
    22042238             
  • XIOS/dev/dev_olga/src/node/field.cpp

    r1027 r1030  
    124124    CContext* context = CContext::getCurrent(); 
    125125//    CContextClient* client = context->client; 
    126     int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
     126    // int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
     127    int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 0) : 1; 
    127128    for (int i = 0; i < nbSrvPools; ++i) 
    128129    { 
  • XIOS/dev/dev_olga/src/node/grid.cpp

    r1027 r1030  
    273273   { 
    274274     CContext* context = CContext::getCurrent(); 
    275      int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
    276  
     275     // int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
     276     int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 0) : 1;    
     277     nbSrvPools = 1;   
    277278     for (int i = 0; i < nbSrvPools; ++i) 
    278      { 
    279        CContextClient* client= context->hasServer ? context->clientPrimServer[i] : context->client; 
     279     {        
    280280       if (isScalarGrid()) 
    281        { 
    282          // if (context->hasClient && !context->hasServer) 
    283         if (context->hasClient) 
    284           if (this->isChecked && doSendingIndex && !isIndexSent) { sendIndexScalarGrid(); this->isIndexSent = true; } 
    285  
    286          if (this->isChecked) return; 
    287          // if (context->hasClient && !context->hasServer) 
    288          if (context->hasClient) 
    289          { 
    290           this->computeIndexScalarGrid(); 
    291          } 
    292  
    293   //         this->isChecked = true; 
    294            if (!(this->hasTransform() && !this->isTransformed())) 
    295             this->isChecked = true; 
    296          return; 
    297        } 
    298  
    299        // if (context->hasClient && !context->hasServer) 
    300       // if (context->hasClient) 
    301       //   if (doSendingIndex && !isIndexSent) 
    302         { 
    303         if (context->hasClient) 
    304         { 
    305           if (this->isChecked && doSendingIndex && !isIndexSent) 
    306             {sendIndex(); this->isIndexSent = true;} 
    307         } 
    308  
    309         if (this->isChecked) return; 
    310         this->checkAttributesAfterTransformation(); 
    311         this->checkMask(); 
    312         this->computeIndex(); 
    313     //       this->isChecked = true; 
     281       {   
     282          if (context->hasClient) 
     283            if (this->isChecked && doSendingIndex && !isIndexSent) { sendIndexScalarGrid(); this->isIndexSent = true; } 
     284 
     285          if (this->isChecked) continue; 
     286   
     287          if (context->hasClient) 
     288          { 
     289            this->computeIndexScalarGrid(); 
     290          } 
     291   
    314292         if (!(this->hasTransform() && !this->isTransformed())) 
    315293          this->isChecked = true; 
    316  
    317          if (!(this->hasTransform() && (!this->isGenerated()))) 
    318           this->isChecked = true; 
    319  
    320  
    321         } 
    322  
    323       //  if (this->isChecked) return; 
    324  
    325       //  // if (context->hasClient && !context->hasServer) 
    326       // // if (context->hasClient) 
    327       //  { 
    328       //     this->checkAttributesAfterTransformation(); 
    329       //     this->checkMask(); 
    330       //     this->computeIndex(); 
    331       //  } 
    332       //  this->isChecked = true; 
    333       } 
     294         continue; 
     295       } 
     296 
     297       if (context->hasClient) 
     298       { 
     299         if (this->isChecked && doSendingIndex && !isIndexSent) 
     300            {sendIndex(); this->isIndexSent = true;} 
     301       } 
     302     } 
     303     
     304     if (this->isChecked) return; 
     305     this->checkAttributesAfterTransformation(); 
     306     this->checkMask(); 
     307     this->computeIndex(); 
     308 
     309     if (!(this->hasTransform() && !this->isTransformed())) 
     310      this->isChecked = true; 
     311 
     312     if (!(this->hasTransform() && (!this->isGenerated()))) 
     313      this->isChecked = true; 
    334314   } 
    335315 
     
    521501     CContext* context = CContext::getCurrent(); 
    522502 
    523      int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
     503     // int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
     504     // int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 1) : 1; 
     505     // This needs to change one day 
     506     // It works only for the same number of procs on secondary pools 
     507     int nbSrvPools = 1;  
     508 
    524509     for (int i = 0; i < nbSrvPools; ++i) 
    525510     { 
    526        CContextClient* client = (context->hasServer) ? context->clientPrimServer[i] : context->client; 
    527        CContextServer* server = (context->hasServer) ? context->server : 0 ; 
    528        int rank = (server && !client) ? server->intraCommRank : client->clientRank; 
     511       CContextClient* client = (context->hasServer) ? (context->hasClient ? context->clientPrimServer[i] : context->client) : context->client; 
     512       // CContextClient* client = (context->hasServer) ? context->clientPrimServer[i] : context->client; 
     513       // CContextServer* server = (context->hasServer) ? context->server : 0 ; 
     514       // int rank = (server && !client) ? server->intraCommRank : client->clientRank; 
     515       int rank = client->clientRank; 
    529516 
    530517       // First of all, compute distribution on client side 
     
    538525       int nbStoreIndex = storeIndex_client.numElements(); 
    539526       for (int idx = 0; idx < nbStoreIndex; ++idx) storeIndex_client(idx) = (clientDistribution_->getLocalDataIndexOnClient())[idx]; 
    540        isDataDistributed_= clientDistribution_->isDataDistributed(); 
    541      } 
     527       if (0 == serverDistribution_)  
     528        isDataDistributed_= clientDistribution_->isDataDistributed(); 
     529      } 
    542530   } 
    543531 
     
    545533   { 
    546534     CContext* context = CContext::getCurrent(); 
    547      int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
     535     // int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
     536     int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 1) : 1; 
     537     // int nbSrvPools = 1; 
    548538     for (int i = 0; i < nbSrvPools; ++i) 
    549539     { 
     
    636626     // isDataDistributed_= clientDistribution_->isDataDistributed(); 
    637627 
    638      int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
    639      for (int i = 0; i < nbSrvPools; ++i) 
    640      { 
    641        CContextClient* client = (context->hasServer) ? context->clientPrimServer[i] : context->client; 
    642        computeClientIndex(); 
    643        if (context->hasClient) 
    644         computeConnectedClients(); 
    645          } 
     628     // int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
     629 
     630     computeClientIndex(); 
     631     if (context->hasClient) 
     632      computeConnectedClients(); 
     633 
    646634 
    647635     // connectedServerRank_.clear(); 
     
    715703   { 
    716704     CContext* context = CContext::getCurrent(); 
    717      int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
     705     // int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
     706     int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 1) : 1; 
     707     nbSrvPools = 1; 
    718708     for (int i = 0; i < nbSrvPools; ++i) 
    719709     { 
     
    11091099   void CGrid::restoreField_arr(const CArray<double, 1>& stored, double* const data) const 
    11101100   { 
    1111       // const StdSize size = storeIndex_client.numElements(); 
    1112  
    1113       // for(StdSize i = 0; i < size; i++) data[storeIndex_client(i)] = stored(i); 
    1114        
    1115       const StdSize size = indexFromClients.numElements(); 
    1116  
    1117       for(StdSize i = 0; i < size; i++) data[indexFromClients(i)] = stored(i); 
     1101      const StdSize size = storeIndex_client.numElements(); 
     1102 
     1103      for(StdSize i = 0; i < size; i++) data[storeIndex_client(i)] = stored(i); 
     1104 
     1105     // This is a solution for multilevel server       
     1106      // const StdSize size = indexFromClients.numElements(); 
     1107 
     1108      // for(StdSize i = 0; i < size; i++) data[indexFromClients(i)] = stored(i); 
    11181109 
    11191110   } 
     
    11221113  { 
    11231114    CContext* context = CContext::getCurrent(); 
    1124     int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
     1115    // int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
     1116    int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 1) : 1; 
    11251117    for (int i = 0; i < nbSrvPools; ++i) 
    11261118    { 
     
    11821174  { 
    11831175    CContext* context = CContext::getCurrent(); 
    1184     int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
     1176    // int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
     1177    int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 0) : 1; 
    11851178    for (int i = 0; i < nbSrvPools; ++i) 
    11861179    { 
     
    12411234    CContext* context = CContext::getCurrent(); 
    12421235//    CContextClient* client = context->client; 
    1243     int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
     1236    // int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
     1237    int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 1) : 1; 
    12441238    for (int i = 0; i < nbSrvPools; ++i) 
    12451239    { 
     
    12511245      list<CArray<size_t,1> > listOutIndex; 
    12521246      const CDistributionClient::GlobalLocalDataMap& globalLocalIndexSendToServer = clientDistribution_->getGlobalLocalDataSendToServer(); 
    1253       CDistributionClient::GlobalLocalDataMap::const_iterator itIndex = globalLocalIndexSendToServer.begin(), 
    1254                                                              iteIndex = globalLocalIndexSendToServer.end(); 
     1247      CDistributionClient::GlobalLocalDataMap::const_iterator itbIndex = globalLocalIndexSendToServer.begin(), itIndex, 
     1248                                                              iteIndex = globalLocalIndexSendToServer.end(); 
     1249      itIndex = itbIndex;                                                               
    12551250 
    12561251      if (!doGridHaveDataDistributed()) 
     
    13001295      else 
    13011296      { 
    1302         CClientServerMapping::GlobalIndexMap::const_iterator iteGlobalMap, itGlobalMap; 
    1303         itGlobalMap = globalIndexOnServer_.begin(); 
     1297        CClientServerMapping::GlobalIndexMap::const_iterator iteGlobalMap, itGlobalMap, itbGlobalMap; 
     1298        itbGlobalMap = globalIndexOnServer_.begin(), itGlobalMap; 
    13041299        iteGlobalMap = globalIndexOnServer_.end(); 
    1305  
    1306         std::map<int,std::vector<int> >localIndexTmp; 
    1307         std::map<int,std::vector<size_t> > globalIndexTmp; 
    1308         for (; itGlobalMap != iteGlobalMap; ++itGlobalMap) 
     1300         
     1301        std::map<int,int > nbGlobalLocalTmp; 
     1302        for (itGlobalMap = itbGlobalMap; itGlobalMap != iteGlobalMap; ++itGlobalMap) 
    13091303        { 
    13101304          int serverRank = itGlobalMap->first; 
    1311           int indexSize = itGlobalMap->second.size(); 
     1305          nbGlobalLocalTmp[serverRank] = 0; 
    13121306          const std::vector<size_t>& indexVec = itGlobalMap->second; 
     1307          int indexSize = indexVec.size();           
    13131308          for (int idx = 0; idx < indexSize; ++idx) 
    13141309          { 
     
    13161311            if (iteIndex != itIndex) 
    13171312            { 
    1318               globalIndexTmp[serverRank].push_back(itIndex->first); 
    1319               localIndexTmp[serverRank].push_back(itIndex->second); 
     1313              ++nbGlobalLocalTmp[serverRank]; 
     1314            } 
     1315          } 
     1316        } 
     1317 
     1318        std::map<int,std::vector<int> >localIndexTmp; 
     1319        std::map<int,std::vector<size_t> > globalIndexTmp; 
     1320        for (std::map<int,int>::iterator it = nbGlobalLocalTmp.begin(); it != nbGlobalLocalTmp.end(); ++it) 
     1321        { 
     1322          localIndexTmp[it->first].resize(it->second); 
     1323          globalIndexTmp[it->first].resize(it->second); 
     1324          it->second = 0; 
     1325        } 
     1326 
     1327        for (itGlobalMap = itbGlobalMap; itGlobalMap != iteGlobalMap; ++itGlobalMap) 
     1328        { 
     1329          int serverRank = itGlobalMap->first;           
     1330          const std::vector<size_t>& indexVec = itGlobalMap->second; 
     1331          int indexSize = indexVec.size();           
     1332          int ind = 0; 
     1333          for (int idx = 0; idx < indexSize; ++idx) 
     1334          { 
     1335            itIndex = globalLocalIndexSendToServer.find(indexVec[idx]); 
     1336            if (iteIndex != itIndex) 
     1337            {               
     1338              ind = nbGlobalLocalTmp[serverRank]; 
     1339              globalIndexTmp[serverRank][ind] = itIndex->first; 
     1340              localIndexTmp[serverRank][ind]  = itIndex->second; 
     1341              ++nbGlobalLocalTmp[serverRank]; 
    13201342            } 
    13211343          } 
     
    13731395  { 
    13741396    CContext* context = CContext::getCurrent(); 
    1375     int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
     1397    int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 1) : 1; 
     1398    nbSrvPools = 1; 
    13761399    for (int i = 0; i < nbSrvPools; ++i) 
    13771400    { 
  • XIOS/dev/dev_olga/src/node/variable.cpp

    r1021 r1030  
    8686     { 
    8787       // Use correct context client to send message 
    88        int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
     88       // int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
     89      int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 0) : 1; 
    8990       for (int i = 0; i < nbSrvPools; ++i) 
    9091       { 
  • XIOS/dev/dev_olga/src/object_template_impl.hpp

    r1025 r1030  
    166166     // Use correct context client to send message 
    167167     CContext* context = CContext::getCurrent(); 
    168      int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
     168     // int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
     169     int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 1) : 1; 
    169170     for (int i = 0; i < nbSrvPools; ++i) 
    170171     { 
     
    275276    if (context->hasClient) 
    276277    { 
    277       int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
     278      // int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
     279      int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 0) : 1; 
    278280      for (int i = 0; i < nbSrvPools; ++i) 
    279281      { 
     
    349351    { 
    350352      // Use correct context client to send message 
    351       int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
     353      // int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
     354      int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 0) : 1; 
    352355      for (int i = 0; i < nbSrvPools; ++i) 
    353356      { 
  • XIOS/dev/dev_olga/src/test/test_client.f90

    r1025 r1030  
    1919  INTEGER,PARAMETER :: ni_glo=4 
    2020  INTEGER,PARAMETER :: nj_glo=4 
    21   INTEGER,PARAMETER :: llm=5 
     21  INTEGER,PARAMETER :: llm=2 
    2222  DOUBLE PRECISION  :: lval(llm)=1 
    2323  TYPE(xios_field) :: field_hdl 
     
    133133  DO ts=1,40 
    134134    CALL xios_update_calendar(ts) 
    135     ! CALL xios_send_field("field_A",field_A) 
     135    CALL xios_send_field("field_A",field_A) 
    136136    ! CALL xios_send_field("field_Axis",axisValue) 
    137137    ! CALL xios_send_field("field_Axis",lval) 
Note: See TracChangeset for help on using the changeset viewer.