- Timestamp:
- 02/01/21 12:42:26 (3 years ago)
- Location:
- XIOS/dev/dev_trunk_graph/src
- Files:
-
- 19 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/dev_trunk_graph/src/context_server.cpp
r2019 r2027 52 52 CXios::getContextsManager()->getContextInfo(context->getId(), contextInfo, intraComm) ; 53 53 54 if (contextInfo.serviceType != CServicesManager::CLIENT) // we must have an event scheduler => to be retrieve from the associated services55 {54 //if (contextInfo.serviceType != CServicesManager::CLIENT) // we must have an event scheduler => to be retrieve from the associated services 55 //{ 56 56 if (!isAttachedModeEnabled()) eventScheduler_=CXios::getPoolRessource()->getService(contextInfo.serviceId,contextInfo.partitionId)->getEventScheduler() ; 57 }57 //} 58 58 59 59 … … 323 323 else if (!eventScheduler_ || eventScheduler_->queryEvent(currentTimeLine,hashId) ) 324 324 { 325 MPI_Barrier(intraComm) ; 325 326 // When using attached mode, synchronise the processes to avoid that differents event be scheduled by differents processes 326 327 // The best way to properly solve this problem will be to use the event scheduler also in attached mode … … 332 333 isProcessingEvent_=true ; 333 334 CTimer::get("Process events").resume(); 335 info(100)<<"Received Event "<<currentTimeLine<<" of class "<<event->classId<<" of type "<<event->type<<endl ; 334 336 dispatchEvent(*event); 335 337 CTimer::get("Process events").suspend(); -
XIOS/dev/dev_trunk_graph/src/event_scheduler.cpp
r2019 r2027 76 76 { 77 77 registerEvent(timeLine, contextHashId, level) ; 78 checkEvent() ; 78 79 } 79 80 … … 94 95 bool CEventScheduler::queryEvent(const size_t timeLine, const size_t contextHashId) 95 96 { 96 97 checkEvent() ; 97 98 if (! eventStack.empty() && eventStack.front().first==timeLine && eventStack.front().second==contextHashId) 98 99 { -
XIOS/dev/dev_trunk_graph/src/filter/client_from_client_source_filter.cpp
r2019 r2027 35 35 CDataPacketPtr packet(new CDataPacket); 36 36 packet->date = date; 37 packet->status = CDataPacket::NO_ERROR; 38 for (auto& subEvent : event.subEvents) (*subEvent.buffer) >> packet->timestamp ; // better management of time lien later... 37 39 packet->timestamp = date; 38 packet->status = CDataPacket::NO_ERROR;39 40 40 41 grid_->getClientFromClientConnector()->transfer(event,packet->data) ; -
XIOS/dev/dev_trunk_graph/src/filter/client_to_server_store_filter.cpp
r2021 r2027 16 16 { 17 17 if (!field) 18 ERROR("C FileWriterFilter::CFileWriterFilter(CField* field)",18 ERROR("CClientToServerStoreFilter::CClientToServerStoreFilter(CGarbageCollector& gc, CField* field, CContextClient* client)", 19 19 "The field cannot be null."); 20 20 } … … 45 45 CWorkflowGraph::addEdge(data[0]->graphPackage->fromFilter, this->graphPackage->filterId, data[0]); 46 46 // flux can be redirected to other filters. So don't change the 'from' parameter 47 //data[0]->graphPackage->fromFilter = this->graphPackage->filterId;48 47 data[0]->graphPackage->currentField = this->graphPackage->inFields[0]; 49 48 } -
XIOS/dev/dev_trunk_graph/src/node/axis.cpp
r2019 r2027 451 451 452 452 } 453 454 string CAxis::getCouplingAlias(const string& fieldId, int posInGrid) 455 { 456 return "_axis["+std::to_string(posInGrid)+"]_of_"+fieldId ; 457 } 453 458 454 459 void CAxis::makeAliasForCoupling(const string& fieldId, int posInGrid) 455 460 { 456 const string axisId = "_axis["+std::to_string(posInGrid)+"]_of_"+fieldId;461 const string axisId = getCouplingAlias(fieldId,posInGrid) ; 457 462 this->createAlias(axisId) ; 458 463 } -
XIOS/dev/dev_trunk_graph/src/node/axis.hpp
r2019 r2027 175 175 public: 176 176 void makeAliasForCoupling(const string& fieldId, int posInGrid) ; 177 string getCouplingAlias(const string& fieldId, int posInGrid) ; 177 178 178 179 -
XIOS/dev/dev_trunk_graph/src/node/context.cpp
r2019 r2027 26 26 #include "coupler_in.hpp" 27 27 #include "coupler_out.hpp" 28 29 namespace xios { 28 #include "servers_ressource.hpp" 29 #include "pool_ressource.hpp" 30 #include "services.hpp" 31 #include "contexts_manager.hpp" 32 #include <chrono> 33 #include <random> 34 35 namespace xios 36 { 30 37 31 38 std::shared_ptr<CContextGroup> CContext::root; … … 66 73 67 74 //---------------------------------------------------------------- 68 75 void CContext::initEventScheduler(void) 76 { 77 SRegisterContextInfo contextInfo ; 78 CXios::getContextsManager()->getContextInfo(this->getId(), contextInfo, getIntraComm()) ; 79 80 eventScheduler_=CXios::getPoolRessource()->getService(contextInfo.serviceId,contextInfo.partitionId)->getEventScheduler() ; 81 82 // generate unique hash for server 83 auto time=chrono::system_clock::now().time_since_epoch().count() ; 84 std::default_random_engine rd(time); // not reproducible from a run to another 85 std::uniform_int_distribution<size_t> dist; 86 hashId_=dist(rd) ; 87 MPI_Bcast(&hashId_,1,MPI_SIZE_T,0,getIntraComm()) ; // Bcast to all server of the context 88 } 89 69 90 /*! 70 91 \brief Get context group (context root) … … 497 518 else 498 519 initServer(intraComm, serviceType) ; 520 initEventScheduler() ; 499 521 } 500 522 CATCH_DUMP_ATTR … … 695 717 696 718 697 698 719 bool CContext::eventLoop(bool enableEventsProcessing) 699 720 { 700 721 bool finished=true; 701 702 if (client!=nullptr && !finalized) client->checkBuffers(); 722 bool out; 723 size_t timeLine=timeLine_ ; 724 if (serviceType_==CServicesManager::CLIENT) 725 { 726 timeLine_++ ; 727 eventScheduler_->registerEvent(timeLine, hashId_) ; 728 } 729 730 do 731 { 732 if (client!=nullptr && !finalized) client->checkBuffers(); 703 733 704 for (int i = 0; i < clientPrimServer.size(); ++i)705 {706 if (!finalized) clientPrimServer[i]->checkBuffers();707 if (!finalized) finished &= serverPrimServer[i]->eventLoop(enableEventsProcessing);708 }709 710 for (auto couplerOut : couplerOutClient_)711 if (!finalized) couplerOut.second->checkBuffers();734 for (int i = 0; i < clientPrimServer.size(); ++i) 735 { 736 if (!finalized) clientPrimServer[i]->checkBuffers(); 737 if (!finalized) finished &= serverPrimServer[i]->eventLoop(enableEventsProcessing); 738 } 739 740 for (auto couplerOut : couplerOutClient_) 741 if (!finalized) couplerOut.second->checkBuffers(); 712 742 713 for (auto couplerIn : couplerInClient_)714 if (!finalized) couplerIn.second->checkBuffers();743 for (auto couplerIn : couplerInClient_) 744 if (!finalized) couplerIn.second->checkBuffers(); 715 745 716 for (auto couplerOut : couplerOutServer_)717 if (!finalized) couplerOut.second->eventLoop(enableEventsProcessing);718 719 for (auto couplerIn : couplerInServer_)720 if (!finalized) couplerIn.second->eventLoop(enableEventsProcessing);746 for (auto couplerOut : couplerOutServer_) 747 if (!finalized) couplerOut.second->eventLoop(enableEventsProcessing); 748 749 for (auto couplerIn : couplerInServer_) 750 if (!finalized) couplerIn.second->eventLoop(enableEventsProcessing); 721 751 722 if (server!=nullptr) if (!finalized) finished &= server->eventLoop(enableEventsProcessing);752 if (server!=nullptr) if (!finalized) finished &= server->eventLoop(enableEventsProcessing); 723 753 754 if (serviceType_==CServicesManager::CLIENT) out = eventScheduler_->queryEvent(timeLine,hashId_) ; 755 else out=true ; 756 } while(!out) ; 724 757 return finalized && finished ; 725 758 } … … 1024 1057 couplersReady &= ready ; 1025 1058 } 1026 if (!couplersReady)this->eventLoop() ;1059 this->eventLoop() ; 1027 1060 } while (!couplersReady) ; 1028 1061 -
XIOS/dev/dev_trunk_graph/src/node/context.hpp
r2019 r2027 14 14 #include "services_manager.hpp" 15 15 #include "server_context.hpp" 16 17 18 namespace xios { 16 #include "event_scheduler.hpp" 17 18 namespace xios 19 { 19 20 class CContextClient; 20 21 class CContextServer; … … 339 340 340 341 private: 342 CEventScheduler* eventScheduler_ ; //! The local event scheduler for context 343 size_t hashId_ ; //! the local hashId for scheduler 344 size_t timeLine_=0 ; 345 void initEventScheduler(void) ; 346 341 347 bool isPostProcessed; 342 348 bool allProcessed; -
XIOS/dev/dev_trunk_graph/src/node/domain.cpp
r2019 r2027 1780 1780 } 1781 1781 1782 1782 string CDomain::getCouplingAlias(const string& fieldId, int posInGrid) 1783 { 1784 return "_domain["+std::to_string(posInGrid)+"]_of_"+fieldId ; 1785 } 1783 1786 1784 1787 /* to be removed later when coupling will be reimplemented, just to not forget */ … … 1788 1791 else sendDomainToFileServer_done_.insert(client) ; 1789 1792 1790 const string domainId = "_domain["+std::to_string(posInGrid)+"]_of_"+fieldId;1793 const string domainId = getCouplingAlias(fieldId, posInGrid) ; 1791 1794 1792 1795 if (!domain_ref.isEmpty()) … … 1805 1808 void CDomain::makeAliasForCoupling(const string& fieldId, int posInGrid) 1806 1809 { 1807 const string domainId = "_domain["+std::to_string(posInGrid)+"]_of_"+fieldId;1810 const string domainId = getCouplingAlias(fieldId, posInGrid); 1808 1811 this->createAlias(domainId) ; 1809 1812 } -
XIOS/dev/dev_trunk_graph/src/node/domain.hpp
r2019 r2027 240 240 public: 241 241 void makeAliasForCoupling(const string& fieldId, int posInGrid) ; 242 string getCouplingAlias(const string& fieldId, int posInGrid) ; 242 243 243 244 private: -
XIOS/dev/dev_trunk_graph/src/node/field.cpp
r2026 r2027 1308 1308 if (sendFieldToCouplerOut_done_) return ; 1309 1309 else sendFieldToCouplerOut_done_=true ; 1310 grid_->sendGridToCouplerOut(client, this->getId()); 1310 sentGrid_ = grid_-> duplicateSentGrid() ; 1311 sentGrid_->sendGridToCouplerOut(client, this->getId()); 1311 1312 this->sendGridCompleted(); 1312 1313 … … 1355 1356 1356 1357 1358 bool CField::isGridCompleted(void) 1359 TRY 1360 { 1361 bool isFullCompleted ; 1362 MPI_Allreduce(&isGridCompleted_,&isFullCompleted,1,MPI_C_BOOL, MPI_LAND, CContext::getCurrent()->getIntraComm() ) ; 1363 if ( (isGridCompleted_==false && isFullCompleted==true) ) ERROR("bool CField::isGridCompleted(void)",<< "incoherecy in MPI_AllReduce") ; 1364 return isFullCompleted ; 1365 } 1366 CATCH_DUMP_ATTR 1367 1368 1357 1369 void CField::sendAddAllVariables(CContextClient* client) 1358 1370 TRY -
XIOS/dev/dev_trunk_graph/src/node/field.hpp
r2019 r2027 236 236 bool isGridCompleted_ = true ; 237 237 public: 238 bool isGridCompleted() { return isGridCompleted_ ;}238 bool isGridCompleted() { } 239 239 void setGridCompleted(void) { isGridCompleted_= true; } 240 240 void unsetGridCompleted(void) { isGridCompleted_ = false ;} -
XIOS/dev/dev_trunk_graph/src/node/grid.cpp
r2026 r2027 1207 1207 gridPtr->sendCreateChild(this->getId(),client); 1208 1208 this->sendAllAttributesToServer(client); 1209 distributeGridToFileServer(client) ; 1210 } 1211 1212 1213 void CGrid::distributeGridToFileServer(CContextClient* client) 1209 distributeGridToServer(client) ; 1210 } 1211 1212 void CGrid::sendGridToCouplerOut(CContextClient* client, const string& fieldId) 1213 { 1214 if (sendGridToCouplerOut_done_.count(client)!=0) return ; 1215 else sendGridToCouplerOut_done_.insert(client) ; 1216 this->sendAllAttributesToServer(client, getCouplingAlias(fieldId)); 1217 distributeGridToServer(client,fieldId) ; 1218 } 1219 1220 void CGrid::distributeGridToServer(CContextClient* client, const string& fieldId) 1214 1221 { 1215 1222 CContext* context = CContext::getCurrent(); 1223 bool isCoupling = !fieldId.empty() ; 1216 1224 // simple Distribution for now 1217 1225 // distribute over the fisrt element except if it is a scalar … … 1261 1269 if (elements[i].type==TYPE_DOMAIN) 1262 1270 { 1263 CDomain* domain = (CDomain*) elements[i].ptr ; 1264 sendAddDomain(domain->getId(),client) ; 1265 domain->distributeToServer(client, gridRemoteConnector.getDistributedGlobalIndex(i), scattererConnector) ; 1266 scattererConnectors.push_back(scattererConnector) ; 1271 CDomain* domain = (CDomain*) elements[i].ptr ; 1272 if (isCoupling) domain->distributeToServer(client, gridRemoteConnector.getDistributedGlobalIndex(i), scattererConnector, domain->getCouplingAlias(fieldId,i)) ; 1273 else 1274 { 1275 sendAddDomain(domain->getId(),client) ; 1276 domain->distributeToServer(client, gridRemoteConnector.getDistributedGlobalIndex(i), scattererConnector) ; 1277 } 1278 scattererConnectors.push_back(scattererConnector) ; 1267 1279 } 1268 1280 else if (elements[i].type==TYPE_AXIS) 1269 1281 { 1270 1282 CAxis* axis = (CAxis*) elements[i].ptr ; 1271 sendAddAxis(axis->getId(),client) ; 1272 axis->distributeToServer(client, gridRemoteConnector.getDistributedGlobalIndex(i), scattererConnector) ; 1283 if (isCoupling) axis->distributeToServer(client, gridRemoteConnector.getDistributedGlobalIndex(i), scattererConnector, axis->getCouplingAlias(fieldId,i)) ; 1284 else 1285 { 1286 sendAddAxis(axis->getId(),client) ; 1287 axis->distributeToServer(client, gridRemoteConnector.getDistributedGlobalIndex(i), scattererConnector) ; 1288 } 1273 1289 scattererConnectors.push_back(scattererConnector) ; 1274 1290 } … … 1276 1292 { 1277 1293 CScalar* scalar = (CScalar*) elements[i].ptr ; 1278 sendAddScalar(scalar->getId(),client) ; 1279 scalar->distributeToServer(client, gridRemoteConnector.getDistributedGlobalIndex(i), scattererConnector) ; 1294 if (isCoupling) scalar->distributeToServer(client, gridRemoteConnector.getDistributedGlobalIndex(i), scattererConnector, scalar->getCouplingAlias(fieldId,i)) ; 1295 else 1296 { 1297 sendAddScalar(scalar->getId(),client) ; 1298 scalar->distributeToServer(client, gridRemoteConnector.getDistributedGlobalIndex(i), scattererConnector) ; 1299 } 1280 1300 scattererConnectors.push_back(scattererConnector) ; 1281 1301 } … … 1291 1311 CEventClient event(getType(), EVENT_ID_SEND_MASK); 1292 1312 CMessage message ; 1293 message<<getId() ; 1313 if (isCoupling) message<<getCouplingAlias(fieldId) ; 1314 else message<<getId() ; 1294 1315 gridScattererConnector.transfer(maskOut, client, event, message) ; 1295 1316 for(auto& it : scattererConnectors) delete it ; … … 1374 1395 1375 1396 1376 void CGrid::sendGridToCouplerOut(CContextClient* client, const string& fieldId) 1377 { 1378 /* if (sendGridToCouplerOut_done_.count(client)!=0) return ; 1379 else sendGridToCouplerOut_done_.insert(client) ; 1380 1381 CContext* context = CContext::getCurrent(); 1382 // simple Distribution for now 1383 // distribute over the fisrt element except if it is a scalar 1397 string CGrid::getCouplingAlias(const string& fieldId) 1398 { 1399 return "_grid_of_"+fieldId; 1400 } 1401 1402 1403 void CGrid::makeAliasForCoupling(const string& fieldId) 1404 { 1405 string gridId=getCouplingAlias(fieldId) ; 1406 createAlias(gridId) ; 1407 1384 1408 auto& elements = getElements() ; 1385 int posDistributed = 0 ;1386 for(auto& element : elements)1387 {1388 if (element.type==TYPE_DOMAIN) break ;1389 else if (element.type==TYPE_AXIS) break ;1390 else if (element.type==TYPE_SCALAR) posDistributed++ ;1391 }1392 1393 vector<CLocalView*> localViews ;1394 vector<CDistributedView*> remoteViews ;1395 1396 1409 for(int i=0 ; i<elements.size() ; i++) 1397 1410 { 1398 if (elements[i].type==TYPE_DOMAIN) 1399 { 1400 CDomain* domain = (CDomain*) elements[i].ptr ; 1401 domain->computeRemoteElement(client, posDistributed==i ? EDistributionType::BANDS : EDistributionType::NONE) ; 1402 remoteViews.push_back(domain->getRemoteElement(client)->getView(CElementView::FULL)) ; 1403 localViews.push_back(domain->getLocalView(CElementView::FULL)) ; 1404 } 1405 else if (elements[i].type==TYPE_AXIS) 1406 { 1407 CAxis* axis = (CAxis*) elements[i].ptr ; 1408 axis->computeRemoteElement(client, posDistributed==i ? EDistributionType::BANDS : EDistributionType::NONE) ; 1409 remoteViews.push_back(axis->getRemoteElement(client)->getView(CElementView::FULL)) ; 1410 localViews.push_back(axis->getLocalView(CElementView::FULL)) ; 1411 } 1412 else if (elements[i].type==TYPE_SCALAR) 1413 { 1414 CScalar* scalar = (CScalar*) elements[i].ptr ; 1415 scalar->computeRemoteElement(client, posDistributed==i ? EDistributionType::BANDS : EDistributionType::NONE) ; 1416 remoteViews.push_back(scalar->getRemoteElement(client)->getView(CElementView::FULL)) ; 1417 localViews.push_back(scalar->getLocalView(CElementView::FULL)) ; 1418 } 1419 } 1420 CGridRemoteConnector gridRemoteConnector(localViews, remoteViews, context->getIntraComm(), client->getRemoteSize()) ; 1421 gridRemoteConnector.computeConnector() ; 1422 1423 vector<CScattererConnector*> clientToClientConnectors ; 1424 for(int i=0 ; i<elements.size() ; i++) 1425 { 1426 if (elements[i].type==TYPE_DOMAIN) 1427 { 1428 CDomain* domain = (CDomain*) elements[i].ptr ; 1429 sendAddDomain(domain->getId(),client) ; 1430 domain->distributeToServer(client, gridRemoteConnector.getDistributedGlobalIndex(i)) ; 1431 clientToClientConnectors.push_back(domain->getClientToServerConnector(client)) ; 1432 } 1433 else if (elements[i].type==TYPE_AXIS) 1434 { 1435 CAxis* axis = (CAxis*) elements[i].ptr ; 1436 sendAddAxis(axis->getId(),client) ; 1437 axis->distributeToServer(client, gridRemoteConnector.getDistributedGlobalIndex(i)) ; 1438 clientToClientConnectors.push_back(axis->getClientToServerConnector(client)) ; 1439 } 1440 else if (elements[i].type==TYPE_SCALAR) 1441 { 1442 CScalar* scalar = (CScalar*) elements[i].ptr ; 1443 sendAddScalar(scalar->getId(),client) ; 1444 scalar->distributeToServer(client, gridRemoteConnector.getDistributedGlobalIndex(i)) ; 1445 clientToClientConnectors.push_back(scalar->getClientToServerConnector(client)) ; 1446 } 1447 } 1448 1449 // compute the grid clientToServerConnector to send flux from client to servers 1450 clientToClientConnector_[client] = new CGridScattererConnector(clientToClientConnectors) ;*/ 1451 } 1452 1453 void CGrid::makeAliasForCoupling(const string& fieldId) 1454 { 1455 string gridId="_grid_of_"+fieldId ; 1456 createAlias(gridId) ; 1457 1458 const auto& domVect = getDomains() ; 1459 for (int pos=0; pos<domVect.size();pos++) domVect[pos]->makeAliasForCoupling(fieldId, pos); 1460 1461 const auto& axisVect=getAxis() ; 1462 for (int pos=0; pos<axisVect.size();pos++) axisVect[pos]->makeAliasForCoupling(fieldId, pos); 1463 1464 const auto& scalVect=getScalars() ; 1465 for (int pos=0; pos<scalVect.size();pos++) scalVect[pos]->makeAliasForCoupling(fieldId, pos); 1411 if (elements[i].type==TYPE_DOMAIN) elements[i].domain->makeAliasForCoupling(fieldId, i); 1412 else if (elements[i].type==TYPE_AXIS) elements[i].axis->makeAliasForCoupling(fieldId, i); 1413 else if (elements[i].type==TYPE_SCALAR) elements[i].scalar->makeAliasForCoupling(fieldId, i); 1414 } 1466 1415 } 1467 1416 -
XIOS/dev/dev_trunk_graph/src/node/grid.hpp
r2026 r2027 174 174 public: 175 175 void makeAliasForCoupling(const string& fieldId) ; 176 string getCouplingAlias(const string& fieldId) ; 176 177 177 178 public: … … 341 342 342 343 public: //? 343 void distributeGridTo FileServer(CContextClient* client);344 void distributeGridToServer(CContextClient* client, const string& fieldId=""); 344 345 345 346 -
XIOS/dev/dev_trunk_graph/src/node/scalar.cpp
r2019 r2027 197 197 else sendScalarToCouplerOut_done_.insert(client) ; 198 198 199 string scalarId ="_scalar["+std::to_string(posInGrid)+"]_of_"+fieldId;199 string scalarId = getCouplingAlias(fieldId, posInGrid) ; 200 200 201 201 this->sendAllAttributesToServer(client, scalarId); 202 202 } 203 204 string CScalar::getCouplingAlias(const string& fieldId, int posInGrid) 205 { 206 return "_scalar["+std::to_string(posInGrid)+"]_of_"+fieldId ; 207 } 203 208 204 209 void CScalar::makeAliasForCoupling(const string& fieldId, int posInGrid) 205 210 { 206 const string scalarId = "_scalar["+std::to_string(posInGrid)+"]_of_"+fieldId;211 const string scalarId = getCouplingAlias(fieldId, posInGrid) ; 207 212 this->createAlias(scalarId) ; 208 213 } -
XIOS/dev/dev_trunk_graph/src/node/scalar.hpp
r2019 r2027 94 94 public: 95 95 void makeAliasForCoupling(const string& fieldId, int posInGrid) ; 96 string getCouplingAlias(const string& fieldId, int posInGrid) ; 96 97 97 98 //////////////////////////////// -
XIOS/dev/dev_trunk_graph/src/test/generic_testcase.f90
r2019 r2027 368 368 pressure=1e20 369 369 DO j=0,z-1 370 pressure(:,j)=axis_value(j) ;370 pressure(:,j)=axis_value(j)*100000 ; ! Pa 371 371 DO i=0,xy-1 372 372 IF (domain_index(i)/=-1) THEN … … 576 576 ENDDO 577 577 578 pressure=1e20578 other_pressure=1e20 579 579 DO j=0,z-1 580 pressure(:,j)=axis_value(j) ;580 other_pressure(:,j)=axis_value(j)*100000 ; ! Pa 581 581 DO i=0,xy-1 582 582 IF (domain_index(i)/=-1) THEN -
XIOS/dev/dev_trunk_graph/src/transformation/algo_types.hpp
r2019 r2027 22 22 #include "axis_algorithm_reduce_domain.hpp" 23 23 #include "axis_algorithm_reduce_axis.hpp" 24 //#include "axis_algorithm_transformation.hpp"25 24 #include "axis_algorithm_extract_domain.hpp" 26 25 #include "axis_algorithm_temporal_splitting.hpp" -
XIOS/dev/dev_trunk_graph/src/transformation/generic_algorithm_transformation.hpp
r2023 r2027 41 41 virtual void apply(int dimBefore, int dimAfter, const CArray<double,1>& dataIn, const vector<CArray<double,1>>& auxData, CArray<double,1>& dataOut) { abort() ;} //=0 42 42 virtual bool isGenerateTransformation(void) { return false ;} 43 44 43 virtual StdString getAlgoName() { return "\\nGeneric algorithm transformation";} 45 44
Note: See TracChangeset
for help on using the changeset viewer.