Changeset 1136 for XIOS/dev/dev_olga/src/node/field.cpp
- Timestamp:
- 05/17/17 18:30:38 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/dev_olga/src/node/field.cpp
r1129 r1136 125 125 126 126 CContext* context = CContext::getCurrent(); 127 // CContextClient* client = context->client;128 // int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1;129 // int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 0) : 1;130 // for (int i = 0; i < nbSrvPools; ++i)131 // {132 127 CContextClient* client = (!context->hasServer) ? context->client : this->file->getContextClient(); 133 128 … … 261 256 { 262 257 CArray<int,1>& storeClient = grid->storeIndex_client; 263 // for (map<int, CArray<size_t, 1> >::iterator it = grid->outIndexFromClient.begin(); it != grid->outIndexFromClient.end(); ++it) 264 // { 265 // // sizeData += it->second.numElements(); 266 // data_srv.insert(std::make_pair(it->first, CArray<double,1>(it->second.numElements()))); 267 // } 268 269 // for (map<int, CArray<size_t, 1> >::iterator it = grid->outLocalIndexStoreOnClient.begin(); it != grid->outLocalIndexStoreOnClient.end(); ++it) 270 // { 271 // // sizeData += it->second.numElements(); 272 // data_srv.insert(std::make_pair(it->first, CArray<double,1>(it->second.numElements()))); 273 // } 274 275 // Gather all data from different clients 276 // recvDataSrv.resize(sizeData); 258 259 // Gather all data from different clients 277 260 recvDataSrv.resize(storeClient.numElements()); 278 261 recvFoperationSrv = boost::shared_ptr<func::CFunctor>(new func::CInstant(recvDataSrv)); 279 262 } 280 263 281 CArray<double,1> recv_data_tmp(recvDataSrv.numElements()); 282 // sizeData = 0; 264 CArray<double,1> recv_data_tmp(recvDataSrv.numElements()); 283 265 const CDate& currDate = context->getCalendar()->getCurrentDate(); 284 266 const CDate opeDate = last_operation_srv +freq_op + freq_operation_srv - freq_op; … … 286 268 if (opeDate <= currDate) 287 269 { 288 270 for (map<int, CArray<size_t, 1> >::iterator it = grid->outLocalIndexStoreOnClient.begin(); it != grid->outLocalIndexStoreOnClient.end(); ++it) 289 271 { 290 272 CArray<double,1> tmp; … … 294 276 { 295 277 recv_data_tmp(indexTmp(idx)) = tmp(idx); 296 } 297 // recv_data_tmp(Range(sizeData,sizeData+it->second.numElements()-1)) = tmp; 298 // sizeData += it->second.numElements(); 299 } 300 301 // for (map<int, CArray<size_t, 1> >::iterator it = grid->outIndexFromClient.begin(); it != grid->outIndexFromClient.end(); ++it) 302 // { 303 // CArray<double,1> tmp; 304 // CArray<size_t,1>& indexTmp = it->second; 305 // *(rankBuffers[it->first]) >> tmp; 306 // for (int idx = 0; idx < indexTmp.numElements(); ++idx) 307 // { 308 // recv_data_tmp(indexTmp(idx)) = tmp(idx); 309 // } 310 // // recv_data_tmp(Range(sizeData,sizeData+it->second.numElements()-1)) = tmp; 311 // // sizeData += it->second.numElements(); 312 // } 278 } 279 } 313 280 } 314 281 … … 328 295 (*recvFoperationSrv)(data); 329 296 last_operation_srv = currDate; 330 // sendUpdateData(fieldData);331 // Redirecting data to the correct secondary server332 //int fileIdx = std::find(context->enabledFiles.begin(), context->enabledFiles.end(), this->file) - context->enabledFiles.begin();333 //int srvId = fileIdx % context->clientPrimServer.size();334 //sendUpdateData(fieldData, context->clientPrimServer[srvId]);335 297 } 336 298 … … 416 378 if (grid->doGridHaveDataToWrite() || getRelFile()->type == CFile::type_attr::one_file) 417 379 { 418 getRelFile()->check File();380 getRelFile()->checkWriteFile(); 419 381 this->incrementNStep(); 420 382 getRelFile()->getDataOutput()->writeFieldData(CField::get(this)); … … 479 441 { 480 442 CContext* context = CContext::getCurrent(); 481 CContextClient* client = context->client; 443 CContextClient* client = context->client; 482 444 483 445 CEventClient event(getType(), EVENT_ID_READ_DATA_READY); … … 486 448 bool hasData = readField(); 487 449 488 map<int, CArray<double,1> >::iterator it; 489 // for (it = data_srv.begin(); it != data_srv.end(); it++) 490 // { 491 // msgs.push_back(CMessage()); 492 // CMessage& msg = msgs.back(); 493 // msg << getId(); 494 // if (hasData) 495 // msg << getNStep() - 1 << it->second; 496 // else 497 // msg << int(-1); 498 // event.push(it->first, grid->nbSenders[it->first], msg); 499 // } 500 // client->sendEvent(event); 450 501 451 if (!grid->doGridHaveDataDistributed()) 502 452 { 503 453 if (client->isServerLeader()) 504 454 { 505 if (!data_srv.empty()) 506 { 507 it = data_srv.begin(); 455 if (0 != recvDataSrv.numElements()) 456 { 508 457 const std::list<int>& ranks = client->getRanksServerLeader(); 509 458 for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) … … 513 462 msg << getId(); 514 463 if (hasData) 515 msg << getNStep() - 1 << it->second;464 msg << getNStep() - 1 << recvDataSrv; 516 465 else 517 466 msg << int(-1); … … 519 468 } 520 469 } 470 521 471 client->sendEvent(event); 522 472 } 523 473 else 524 474 { 525 // if (!data_srv.empty())526 // {527 // it = data_srv.begin();528 // const std::list<int>& ranks = client->getRanksServerNotLeader();529 // for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank)530 // {531 // msgs.push_back(CMessage());532 // CMessage& msg = msgs.back();533 // msg << getId();534 // if (hasData)535 // msg << getNStep() - 1 << it->second;536 // else537 // msg << int(-1);538 // event.push(*itRank, 1, msg);539 // }540 // }541 475 client->sendEvent(event); 542 476 } … … 544 478 else 545 479 { 546 for (it = data_srv.begin(); it != data_srv.end(); it++) 480 for (map<int, CArray<size_t, 1> >::iterator it = grid->outLocalIndexStoreOnClient.begin(); 481 it != grid->outLocalIndexStoreOnClient.end(); ++it) 547 482 { 483 CArray<size_t,1>& indexTmp = it->second; 484 CArray<double,1> tmp(indexTmp.numElements()); 485 for (int idx = 0; idx < indexTmp.numElements(); ++idx) 486 { 487 tmp(idx) = recvDataSrv(indexTmp(idx)); 488 } 489 548 490 msgs.push_back(CMessage()); 549 491 CMessage& msg = msgs.back(); 550 492 msg << getId(); 551 493 if (hasData) 552 msg << getNStep() - 1 << it->second;494 msg << getNStep() - 1 << tmp; 553 495 else 554 496 msg << int(-1); 555 event.push(it->first, grid->nb Senders[0][it->first], msg);497 event.push(it->first, grid->nbReadSenders[0][it->first], msg); 556 498 } 557 499 client->sendEvent(event); … … 561 503 bool CField::readField(void) 562 504 { 505 grid->computeWrittenIndex(); 563 506 if (!getRelFile()->allDomainEmpty) 564 507 { 565 508 if (grid->doGridHaveDataToWrite() || getRelFile()->type == CFile::type_attr::one_file) 566 509 { 567 if ( data_srv.empty())568 { 569 for (map<int, CArray<size_t, 1> >::iterator it = grid->outIndexFromClient.begin(); it != grid->outIndexFromClient.end(); ++it)570 data_srv.insert(std::make_pair(it->first, CArray<double,1>(it->second.numElements())));510 if (0 == recvDataSrv.numElements()) 511 { 512 CArray<int,1>& storeClient = grid->storeIndex_client; 513 recvDataSrv.resize(storeClient.numElements()); 571 514 } 572 515 573 getRelFile()->check File();516 getRelFile()->checkReadFile(); 574 517 if (!nstepMax) 575 518 { … … 578 521 579 522 this->incrementNStep(); 580 581 582 523 583 524 if (getNStep() > nstepMax && (getRelFile()->cyclic.isEmpty() || !getRelFile()->cyclic) ) … … 1426 1367 void CField::scaleFactorAddOffset(double scaleFactor, double addOffset) 1427 1368 { 1428 map<int, CArray<double,1> >::iterator it; 1429 for (it = data_srv.begin(); it != data_srv.end(); it++) it->second = (it->second - addOffset) / scaleFactor; 1369 // map<int, CArray<double,1> >::iterator it; 1370 // for (it = data_srv.begin(); it != data_srv.end(); it++) it->second = (it->second - addOffset) / scaleFactor; 1371 recvDataSrv = (recvDataSrv - addOffset) / scaleFactor; 1430 1372 } 1431 1373 1432 1374 void CField::invertScaleFactorAddOffset(double scaleFactor, double addOffset) 1433 1375 { 1434 map<int, CArray<double,1> >::iterator it; 1435 for (it = data_srv.begin(); it != data_srv.end(); it++) it->second = it->second * scaleFactor + addOffset; 1436 } 1437 1438 void CField::outputField(CArray<double,3>& fieldOut) 1439 { 1440 map<int, CArray<double,1> >::iterator it; 1441 for (it = data_srv.begin(); it != data_srv.end(); it++) 1442 { 1443 grid->outputField(it->first, it->second, fieldOut.dataFirst()); 1444 } 1445 } 1446 1447 void CField::outputField(CArray<double,2>& fieldOut) 1448 { 1449 map<int, CArray<double,1> >::iterator it; 1450 for(it=data_srv.begin();it!=data_srv.end();it++) 1451 { 1452 grid->outputField(it->first, it->second, fieldOut.dataFirst()); 1453 } 1376 // map<int, CArray<double,1> >::iterator it; 1377 // for (it = data_srv.begin(); it != data_srv.end(); it++) it->second = it->second * scaleFactor + addOffset; 1378 recvDataSrv = recvDataSrv * scaleFactor + addOffset; 1454 1379 } 1455 1380 1456 1381 void CField::outputField(CArray<double,1>& fieldOut) 1457 { 1458 map<int, CArray<double,1> >::iterator it; 1459 1382 { 1460 1383 CArray<size_t,1>& outIndexClient = grid->localIndexToWriteOnClient; 1461 1384 CArray<size_t,1>& outIndexServer = grid->localIndexToWriteOnServer; … … 1464 1387 fieldOut(outIndexServer(idx)) = recvDataSrv(outIndexClient(idx)); 1465 1388 } 1466 1389 } 1390 1391 void CField::inputField(CArray<double,1>& fieldIn) 1392 { 1393 // map<int, CArray<double,1> >::iterator it; 1467 1394 // for (it = data_srv.begin(); it != data_srv.end(); it++) 1468 1395 // { 1469 // grid-> outputField(it->first, it->second, fieldOut.dataFirst());1396 // grid->inputField(it->first, fieldOut.dataFirst(), it->second); 1470 1397 // } 1471 // grid->outputField(recvDataSrv, fieldOut); 1472 } 1473 1474 void CField::inputField(CArray<double,3>& fieldOut) 1475 { 1476 map<int, CArray<double,1> >::iterator it; 1477 for (it = data_srv.begin(); it != data_srv.end(); it++) 1398 CArray<size_t,1>& outIndexClient = grid->localIndexToWriteOnClient; 1399 CArray<size_t,1>& outIndexServer = grid->localIndexToWriteOnServer; 1400 for (size_t idx = 0; idx < outIndexServer.numElements(); ++idx) 1478 1401 { 1479 grid->inputField(it->first, fieldOut.dataFirst(), it->second); 1480 } 1481 } 1482 1483 void CField::inputField(CArray<double,2>& fieldOut) 1484 { 1485 map<int, CArray<double,1> >::iterator it; 1486 for(it = data_srv.begin(); it != data_srv.end(); it++) 1487 { 1488 grid->inputField(it->first, fieldOut.dataFirst(), it->second); 1489 } 1490 } 1491 1492 void CField::inputField(CArray<double,1>& fieldOut) 1493 { 1494 map<int, CArray<double,1> >::iterator it; 1495 for (it = data_srv.begin(); it != data_srv.end(); it++) 1496 { 1497 grid->inputField(it->first, fieldOut.dataFirst(), it->second); 1498 } 1402 recvDataSrv(outIndexClient(idx)) = fieldIn(outIndexServer(idx)); 1403 } 1404 1499 1405 } 1500 1406 … … 1603 1509 { 1604 1510 sendAddItem(id, (int)EVENT_ID_ADD_VARIABLE); 1605 // CContext* context = CContext::getCurrent();1606 1607 // if (!context->hasServer)1608 // {1609 // CContextClient* client = context->client;1610 1611 // CEventClient event(this->getType(),EVENT_ID_ADD_VARIABLE);1612 // if (client->isServerLeader())1613 // {1614 // CMessage msg;1615 // msg << this->getId();1616 // msg << id;1617 // const std::list<int>& ranks = client->getRanksServerLeader();1618 // for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank)1619 // event.push(*itRank,1,msg);1620 // client->sendEvent(event);1621 // }1622 // else client->sendEvent(event);1623 // }1624 1511 } 1625 1512 … … 1627 1514 { 1628 1515 sendAddItem(id, (int)EVENT_ID_ADD_VARIABLE, client); 1629 // CContext* context = CContext::getCurrent();1630 1631 // if (!context->hasServer)1632 // {1633 // CContextClient* client = context->client;1634 1635 // CEventClient event(this->getType(),EVENT_ID_ADD_VARIABLE);1636 // if (client->isServerLeader())1637 // {1638 // CMessage msg;1639 // msg << this->getId();1640 // msg << id;1641 // const std::list<int>& ranks = client->getRanksServerLeader();1642 // for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank)1643 // event.push(*itRank,1,msg);1644 // client->sendEvent(event);1645 // }1646 // else client->sendEvent(event);1647 // }1648 1516 } 1649 1517 … … 1651 1519 { 1652 1520 sendAddItem(id, (int)EVENT_ID_ADD_VARIABLE_GROUP); 1653 // CContext* context = CContext::getCurrent();1654 // if (!context->hasServer)1655 // {1656 // CContextClient* client = context->client;1657 1658 // CEventClient event(this->getType(),EVENT_ID_ADD_VARIABLE_GROUP);1659 // if (client->isServerLeader())1660 // {1661 // CMessage msg;1662 // msg << this->getId();1663 // msg << id;1664 // const std::list<int>& ranks = client->getRanksServerLeader();1665 // for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank)1666 // event.push(*itRank,1,msg);1667 // client->sendEvent(event);1668 // }1669 // else client->sendEvent(event);1670 // }1671 1521 } 1672 1522
Note: See TracChangeset
for help on using the changeset viewer.