Changeset 1030
- Timestamp:
- 01/20/17 16:17:57 (6 years ago)
- 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 307 307 308 308 indexToInfoMappingLevel_.swap(indexToInfoMapping); 309 309 310 if (0 != recvNbIndexCount) delete [] recvIndexBuff; 310 311 for (boost::unordered_map<int,size_t*>::const_iterator it = client2ClientIndex.begin(); -
XIOS/dev/dev_olga/src/client_server_mapping.hpp
r1025 r1030 26 26 public: 27 27 typedef boost::unordered_map<int, std::vector<size_t> > GlobalIndexMap; 28 // typedef boost::map<int, std::vector<size_t> > GlobalIndexMap; 28 29 public: 29 30 /** Default constructor */ -
XIOS/dev/dev_olga/src/distribution_server.cpp
r1025 r1030 134 134 globalIndex = globalIndexOnEachDimension[0](i); 135 135 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]; 139 139 globalIndex += (currentIndex[k])*mulDim; 140 140 } -
XIOS/dev/dev_olga/src/group_template_impl.hpp
r1021 r1030 445 445 { 446 446 // 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; 448 449 for (int i = 0; i < nbSrvPools; ++i) 449 450 { -
XIOS/dev/dev_olga/src/io/nc4_data_output.cpp
r1027 r1030 1044 1044 CContext* context = CContext::getCurrent(); 1045 1045 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 1048 1062 { 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) 1067 1065 { 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()) 1070 1082 { 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: 1087 1102 { 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; 1092 1113 } 1093 1094 StdString axisBoundsId = axisid + "_bounds"; 1095 if (!axis->bounds.isEmpty()) 1114 case ONE_FILE: 1096 1115 { 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; 1100 1133 } 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 !"); 1144 1138 } 1145 1139 } 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 1157 1152 axis->addRelFile(this->filename); 1158 1153 } -
XIOS/dev/dev_olga/src/io/netCdfInterface_impl.hpp
r833 r1030 121 121 inqVarName(ncid, varId, varName); 122 122 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; 123 135 throw CNetCdfException(sstr.str()); 124 136 } -
XIOS/dev/dev_olga/src/node/axis.cpp
r1027 r1030 453 453 { 454 454 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; 456 457 for (int i = 0; i < nbSrvPools; ++i) 457 458 { … … 748 749 { 749 750 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; 752 753 for (int i = 0; i < nbSrvPools; ++i) 753 754 { … … 854 855 int ns, n, i, j, ind, nv, idx; 855 856 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; 858 859 for (int i = 0; i < nbSrvPools; ++i) 859 860 { -
XIOS/dev/dev_olga/src/node/context.cpp
r1027 r1030 520 520 { 521 521 // 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; 523 524 for (int i = 0; i < nbSrvPools; ++i) 524 525 { … … 693 694 { 694 695 this->enabledFiles[i]->generateNewTransformationGridDest(); 696 } 697 698 for (int i = 0; i < size; ++i) 699 { 700 //this->enabledFiles[i]->checkGridOfEnabledFields(); 695 701 } 696 702 } … … 898 904 { 899 905 // 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; 901 908 for (int i = 0; i < nbSrvPools; ++i) 902 909 { … … 926 933 *buffer>>id; 927 934 get(id)->closeDefinition(); 928 // if (get(id)->hasClient && get(id)->hasServer)929 // {930 // get(id)->sendCloseDefinition();931 // }932 935 } 933 936 … … 937 940 // Use correct context client to send message 938 941 // 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; 940 944 for (int i = 0; i < nbSrvPools; ++i) 941 945 { … … 984 988 { 985 989 // 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; 987 992 for (int i = 0; i < nbSrvPools; ++i) 988 993 { … … 1032 1037 { 1033 1038 // 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; 1035 1041 for (int i = 0; i < nbSrvPools; ++i) 1036 1042 { … … 1064 1070 { 1065 1071 // 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; 1067 1074 for (int i = 0; i < nbSrvPools; ++i) 1068 1075 { … … 1568 1575 1569 1576 // 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; 1571 1579 for (int i = 0; i < nbSrvPools; ++i) 1572 1580 { -
XIOS/dev/dev_olga/src/node/domain.cpp
r1027 r1030 1442 1442 CContext* context = CContext::getCurrent(); 1443 1443 // 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; 1445 1446 for (int i = 0; i < nbSrvPools; ++i) 1446 1447 { 1447 1448 CContextClient* contextClientTmp = (context->hasServer) ? context->clientPrimServer[i] 1448 1449 : context->client; 1449 1450 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); 1455 1456 if (isUnstructed_) serverDescription.computeServerDistribution(false, 0); 1456 1457 else serverDescription.computeServerDistribution(false, 1); … … 1495 1496 { 1496 1497 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; 1498 1500 for (int i = 0; i < nbSrvPools; ++i) 1499 1501 { … … 1666 1668 for (it = globalIndexDomainOnServer.begin(); it != ite; ++it) { 1667 1669 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; 1668 1673 } 1669 1674 … … 1710 1715 int ns, n, i, j, ind, nv, idx; 1711 1716 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; 1713 1719 for (int i = 0; i < nbSrvPools; ++i) 1714 1720 { … … 1780 1786 int ns, n, i, j, ind, nv, idx; 1781 1787 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; 1783 1790 for (int i = 0; i < nbSrvPools; ++i) 1784 1791 { … … 1826 1833 int ns, n, i, j, ind, nv, idx; 1827 1834 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; 1829 1837 for (int i = 0; i < nbSrvPools; ++i) 1830 1838 { … … 1875 1883 int ns, n, i, j, ind, nv, idx; 1876 1884 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; 1878 1887 for (int i = 0; i < nbSrvPools; ++i) 1879 1888 { … … 1960 1969 int ns, n, i, j, ind, nv, idx; 1961 1970 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; 1963 1973 for (int i = 0; i < nbSrvPools; ++i) 1964 1974 { … … 2150 2160 { 2151 2161 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; 2154 2164 ++nbIndGlob; 2155 2165 } … … 2172 2182 { 2173 2183 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; 2176 2186 ++nbZoomInd; 2177 2187 } … … 2201 2211 count_write_index_[0] = nbIZoom; 2202 2212 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 } 2203 2237 } 2204 2238 -
XIOS/dev/dev_olga/src/node/field.cpp
r1027 r1030 124 124 CContext* context = CContext::getCurrent(); 125 125 // 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; 127 128 for (int i = 0; i < nbSrvPools; ++i) 128 129 { -
XIOS/dev/dev_olga/src/node/grid.cpp
r1027 r1030 273 273 { 274 274 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; 277 278 for (int i = 0; i < nbSrvPools; ++i) 278 { 279 CContextClient* client= context->hasServer ? context->clientPrimServer[i] : context->client; 279 { 280 280 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 314 292 if (!(this->hasTransform() && !this->isTransformed())) 315 293 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; 334 314 } 335 315 … … 521 501 CContext* context = CContext::getCurrent(); 522 502 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 524 509 for (int i = 0; i < nbSrvPools; ++i) 525 510 { 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; 529 516 530 517 // First of all, compute distribution on client side … … 538 525 int nbStoreIndex = storeIndex_client.numElements(); 539 526 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 } 542 530 } 543 531 … … 545 533 { 546 534 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; 548 538 for (int i = 0; i < nbSrvPools; ++i) 549 539 { … … 636 626 // isDataDistributed_= clientDistribution_->isDataDistributed(); 637 627 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 646 634 647 635 // connectedServerRank_.clear(); … … 715 703 { 716 704 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; 718 708 for (int i = 0; i < nbSrvPools; ++i) 719 709 { … … 1109 1099 void CGrid::restoreField_arr(const CArray<double, 1>& stored, double* const data) const 1110 1100 { 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); 1118 1109 1119 1110 } … … 1122 1113 { 1123 1114 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; 1125 1117 for (int i = 0; i < nbSrvPools; ++i) 1126 1118 { … … 1182 1174 { 1183 1175 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; 1185 1178 for (int i = 0; i < nbSrvPools; ++i) 1186 1179 { … … 1241 1234 CContext* context = CContext::getCurrent(); 1242 1235 // 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; 1244 1238 for (int i = 0; i < nbSrvPools; ++i) 1245 1239 { … … 1251 1245 list<CArray<size_t,1> > listOutIndex; 1252 1246 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; 1255 1250 1256 1251 if (!doGridHaveDataDistributed()) … … 1300 1295 else 1301 1296 { 1302 CClientServerMapping::GlobalIndexMap::const_iterator iteGlobalMap, itGlobalMap ;1303 it GlobalMap = globalIndexOnServer_.begin();1297 CClientServerMapping::GlobalIndexMap::const_iterator iteGlobalMap, itGlobalMap, itbGlobalMap; 1298 itbGlobalMap = globalIndexOnServer_.begin(), itGlobalMap; 1304 1299 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) 1309 1303 { 1310 1304 int serverRank = itGlobalMap->first; 1311 int indexSize = itGlobalMap->second.size();1305 nbGlobalLocalTmp[serverRank] = 0; 1312 1306 const std::vector<size_t>& indexVec = itGlobalMap->second; 1307 int indexSize = indexVec.size(); 1313 1308 for (int idx = 0; idx < indexSize; ++idx) 1314 1309 { … … 1316 1311 if (iteIndex != itIndex) 1317 1312 { 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]; 1320 1342 } 1321 1343 } … … 1373 1395 { 1374 1396 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; 1376 1399 for (int i = 0; i < nbSrvPools; ++i) 1377 1400 { -
XIOS/dev/dev_olga/src/node/variable.cpp
r1021 r1030 86 86 { 87 87 // 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; 89 90 for (int i = 0; i < nbSrvPools; ++i) 90 91 { -
XIOS/dev/dev_olga/src/object_template_impl.hpp
r1025 r1030 166 166 // Use correct context client to send message 167 167 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; 169 170 for (int i = 0; i < nbSrvPools; ++i) 170 171 { … … 275 276 if (context->hasClient) 276 277 { 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; 278 280 for (int i = 0; i < nbSrvPools; ++i) 279 281 { … … 349 351 { 350 352 // 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; 352 355 for (int i = 0; i < nbSrvPools; ++i) 353 356 { -
XIOS/dev/dev_olga/src/test/test_client.f90
r1025 r1030 19 19 INTEGER,PARAMETER :: ni_glo=4 20 20 INTEGER,PARAMETER :: nj_glo=4 21 INTEGER,PARAMETER :: llm= 521 INTEGER,PARAMETER :: llm=2 22 22 DOUBLE PRECISION :: lval(llm)=1 23 23 TYPE(xios_field) :: field_hdl … … 133 133 DO ts=1,40 134 134 CALL xios_update_calendar(ts) 135 !CALL xios_send_field("field_A",field_A)135 CALL xios_send_field("field_A",field_A) 136 136 ! CALL xios_send_field("field_Axis",axisValue) 137 137 ! CALL xios_send_field("field_Axis",lval)
Note: See TracChangeset
for help on using the changeset viewer.