Changeset 1853 for XIOS/dev/dev_ym/XIOS_COUPLING/src/node/field.cpp
- Timestamp:
- 01/20/20 17:55:12 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/dev_ym/XIOS_COUPLING/src/node/field.cpp
r1847 r1853 143 143 CATCH 144 144 145 void CField::sendUpdateData(const CArray<double,1>& data )145 void CField::sendUpdateData(const CArray<double,1>& data, CContextClient* client) 146 146 TRY 147 147 { 148 148 CTimer::get("Field : send data").resume(); 149 150 CContext* context = CContext::getCurrent();151 CContextClient* client = (!context->hasServer) ? context->client : this->file->getContextClient();152 149 int receiverSize = client->serverSize; 153 150 … … 319 316 \param [in] tsDataRequested timestamp when the call is made 320 317 */ 321 bool CField::sendReadDataRequest(const CDate& tsDataRequested )318 bool CField::sendReadDataRequest(const CDate& tsDataRequested, CContextClient* client) 322 319 TRY 323 320 { 324 321 CContext* context = CContext::getCurrent(); 325 // CContextClient* client = context->client;326 327 // This code is for future: If we want to read file with level-2 servers328 CContextClient* client = (!context->hasServer) ? context->client : this->file->getContextClient();329 322 330 323 lastDataRequestedFromServer = tsDataRequested; … … 372 365 info(20) << "lastDataRequestedFromServer + file->output_freq.getValue() : " << lastDataRequestedFromServer + file->output_freq << endl ; 373 366 374 dataRequested |= sendReadDataRequest(lastDataRequestedFromServer + file->output_freq );367 dataRequested |= sendReadDataRequest(lastDataRequestedFromServer + file->output_freq, file->getContextClient()); 375 368 } 376 369 … … 385 378 StdString fieldId; 386 379 *buffer >> fieldId; 387 get(fieldId)->recvReadDataRequest( );380 get(fieldId)->recvReadDataRequest(event.getContextServer()); 388 381 } 389 382 CATCH … … 395 388 In the future, this should (only) be done by the last level servers. 396 389 */ 397 void CField::recvReadDataRequest( void)390 void CField::recvReadDataRequest(CContextServer* server) 398 391 TRY 399 392 { 400 CContext* context = CContext::getCurrent(); 401 CContextClient* client = context->client; 402 393 CContextClient* client = server->getAssociatedClient() ; 403 394 CEventClient event(getType(), EVENT_ID_READ_DATA_READY); 404 395 std::list<CMessage> msgs; … … 532 523 if (!nstepMaxRead) 533 524 { 534 MPI_Allreduce(MPI_IN_PLACE, &nstepMax, 1, MPI_INT, MPI_MAX, context-> server->intraComm);525 MPI_Allreduce(MPI_IN_PLACE, &nstepMax, 1, MPI_INT, MPI_MAX, context->intraComm_); 535 526 nstepMaxRead = true; 536 527 } … … 809 800 { 810 801 CContext* context = CContext::getCurrent(); 811 if (context-> hasClient && !context->hasServer)802 if (context->getServiceType()==CServicesManager::CLIENT) 812 803 { 813 804 if (grid && !grid->isTransformed() && hasDirectFieldReference() && grid != getDirectFieldReference()->grid) … … 826 817 { 827 818 CContext* context = CContext::getCurrent(); 828 if (context-> hasClient && !context->hasServer)819 if (context->getServiceType()==CServicesManager::CLIENT) 829 820 { 830 821 std::map<CGrid*,std::pair<bool,StdString> >& gridSrcMap = grid->getTransGridSource(); … … 913 904 { 914 905 CContext* context = CContext::getCurrent(); 915 bool hasClient = context->hasClient;916 bool hasServer = context->hasServer;917 906 918 907 if (!isReferenceSolvedAndTransformed) … … 920 909 isReferenceSolvedAndTransformed = true; 921 910 922 if ( hasClient && !hasServer)911 if (context->getServiceType()==CServicesManager::CLIENT) 923 912 { 924 913 solveRefInheritance(true); … … 926 915 } 927 916 928 if ( hasServer)917 if (context->getServiceType()==CServicesManager::GATHERER || context->getServiceType()==CServicesManager::OUT_SERVER) 929 918 solveServerOperation(); 930 919 931 920 solveGridReference(); 932 921 933 if (hasClient && !hasServer)922 if (context->getServiceType()==CServicesManager::CLIENT) 934 923 { 935 924 solveGenerateGrid(); … … 939 928 solveGridDomainAxisRef(false); 940 929 941 if ( hasClient && !hasServer)930 if (context->getServiceType()==CServicesManager::CLIENT) 942 931 { 943 932 solveTransformedGrid(); … … 984 973 isReferenceSolved = true; 985 974 986 if (context-> hasClient && !context->hasServer)975 if (context->getServiceType()==CServicesManager::CLIENT) 987 976 { 988 977 solveRefInheritance(true); … … 990 979 } 991 980 992 if (context-> hasServer)981 if (context->getServiceType()==CServicesManager::GATHERER || context->getServiceType()==CServicesManager::OUT_SERVER) 993 982 solveServerOperation(); 994 983 … … 996 985 grid->solveDomainAxisRefInheritance(true); // make it again to solve grid reading from file 997 986 998 if (context->hasClient && !context->hasServer)987 if (context->getServiceType()==CServicesManager::CLIENT) 999 988 { 1000 989 solveGenerateGrid(); … … 1015 1004 areAllReferenceSolved = true; 1016 1005 1017 if (context-> hasClient && !context->hasServer)1006 if (context->getServiceType()==CServicesManager::CLIENT) 1018 1007 { 1019 1008 solveRefInheritance(true); 1020 1009 if (hasDirectFieldReference()) getDirectFieldReference()->solveAllReferenceEnabledField(false); 1021 1010 } 1022 else if (context-> hasServer)1011 else if (context->getServiceType()==CServicesManager::GATHERER || context->getServiceType()==CServicesManager::OUT_SERVER) 1023 1012 solveServerOperation(); 1024 1013 … … 1028 1017 solveGridDomainAxisRef(doSending2Server); 1029 1018 1030 if (context-> hasClient && !context->hasServer)1019 if (context->getServiceType()==CServicesManager::CLIENT) 1031 1020 { 1032 1021 solveTransformedGrid(); … … 1065 1054 CContext* context = CContext::getCurrent(); 1066 1055 1067 if ( !context->hasServer|| !hasOutputFile) return;1056 if (context->getServiceType()==CServicesManager::CLIENT || !hasOutputFile) return; 1068 1057 1069 1058 if (freq_op.isEmpty()) … … 1126 1115 1127 1116 CContext* context = CContext::getCurrent(); 1128 bool hasWriterServer = context-> hasServer && !context->hasClient;1129 bool hasIntermediateServer = context-> hasServer && context->hasClient;1117 bool hasWriterServer = context->getServiceType()==CServicesManager::OUT_SERVER ; 1118 bool hasIntermediateServer = context->getServiceType()==CServicesManager::GATHERER ; 1130 1119 1131 1120 if (hasWriterServer) … … 1155 1144 if (file && (file->mode.isEmpty() || file->mode == CFile::mode_attr::write)) 1156 1145 { 1157 fileWriterFilter = std::shared_ptr<CFileWriterFilter>(new CFileWriterFilter(gc, this ));1146 fileWriterFilter = std::shared_ptr<CFileWriterFilter>(new CFileWriterFilter(gc, this, file->getContextClient())); 1158 1147 instantDataFilter->connectOutput(fileWriterFilter, 0); 1159 1148 } … … 1217 1206 if (file && (file->mode.isEmpty() || file->mode == CFile::mode_attr::write)) 1218 1207 { 1219 fileWriterFilter = std::shared_ptr<CFileWriterFilter>(new CFileWriterFilter(gc, this ));1208 fileWriterFilter = std::shared_ptr<CFileWriterFilter>(new CFileWriterFilter(gc, this, file->getContextClient())); 1220 1209 getTemporalDataFilter(gc, file->output_freq)->connectOutput(fileWriterFilter, 0); 1221 1210 } … … 1736 1725 CContext* context = CContext::getCurrent(); 1737 1726 client = contextClient; 1738 if (context->hasClient) 1739 { 1740 // A grid is sent by a client (both for read or write) or by primary server (write only) 1741 if (context->hasServer) 1742 { 1743 if (file->mode.isEmpty() || (!file->mode.isEmpty() && file->mode == CFile::mode_attr::write)) 1744 grid->setContextClient(contextClient); 1745 } 1746 else 1747 grid->setContextClient(contextClient); 1748 } 1727 1728 // A grid is sent by a client (both for read or write) or by primary server (write only) 1729 if (context->getServiceType()==CServicesManager::GATHERER) 1730 { 1731 if (file->mode.isEmpty() || (!file->mode.isEmpty() && file->mode == CFile::mode_attr::write)) 1732 grid->setContextClient(contextClient); 1733 } 1734 else if (context->getServiceType()==CServicesManager::CLIENT) 1735 grid->setContextClient(contextClient); 1749 1736 } 1750 1737 CATCH_DUMP_ATTR
Note: See TracChangeset
for help on using the changeset viewer.