Changeset 36bb2d for src/Actions
- Timestamp:
- Nov 20, 2012, 11:04:12 AM (12 years ago)
- Branches:
- Action_Thermostats, Add_AtomRandomPerturbation, Add_FitFragmentPartialChargesAction, Add_RotateAroundBondAction, Add_SelectAtomByNameAction, Added_ParseSaveFragmentResults, AddingActions_SaveParseParticleParameters, Adding_Graph_to_ChangeBondActions, Adding_MD_integration_tests, Adding_ParticleName_to_Atom, Adding_StructOpt_integration_tests, AtomFragments, Automaking_mpqc_open, AutomationFragmentation_failures, Candidate_v1.5.4, Candidate_v1.6.0, Candidate_v1.6.1, ChangeBugEmailaddress, ChangingTestPorts, ChemicalSpaceEvaluator, CombiningParticlePotentialParsing, Combining_Subpackages, Debian_Package_split, Debian_package_split_molecuildergui_only, Disabling_MemDebug, Docu_Python_wait, EmpiricalPotential_contain_HomologyGraph, EmpiricalPotential_contain_HomologyGraph_documentation, Enable_parallel_make_install, Enhance_userguide, Enhanced_StructuralOptimization, Enhanced_StructuralOptimization_continued, Example_ManyWaysToTranslateAtom, Exclude_Hydrogens_annealWithBondGraph, FitPartialCharges_GlobalError, Fix_BoundInBox_CenterInBox_MoleculeActions, Fix_ChargeSampling_PBC, Fix_ChronosMutex, Fix_FitPartialCharges, Fix_FitPotential_needs_atomicnumbers, Fix_ForceAnnealing, Fix_IndependentFragmentGrids, Fix_ParseParticles, Fix_ParseParticles_split_forward_backward_Actions, Fix_PopActions, Fix_QtFragmentList_sorted_selection, Fix_Restrictedkeyset_FragmentMolecule, Fix_StatusMsg, Fix_StepWorldTime_single_argument, Fix_Verbose_Codepatterns, Fix_fitting_potentials, Fixes, ForceAnnealing_goodresults, ForceAnnealing_oldresults, ForceAnnealing_tocheck, ForceAnnealing_with_BondGraph, ForceAnnealing_with_BondGraph_continued, ForceAnnealing_with_BondGraph_continued_betteresults, ForceAnnealing_with_BondGraph_contraction-expansion, FragmentAction_writes_AtomFragments, FragmentMolecule_checks_bonddegrees, GeometryObjects, Gui_Fixes, Gui_displays_atomic_force_velocity, ImplicitCharges, IndependentFragmentGrids, IndependentFragmentGrids_IndividualZeroInstances, IndependentFragmentGrids_IntegrationTest, IndependentFragmentGrids_Sole_NN_Calculation, JobMarket_RobustOnKillsSegFaults, JobMarket_StableWorkerPool, JobMarket_unresolvable_hostname_fix, MoreRobust_FragmentAutomation, ODR_violation_mpqc_open, PartialCharges_OrthogonalSummation, PdbParser_setsAtomName, PythonUI_with_named_parameters, QtGui_reactivate_TimeChanged_changes, Recreated_GuiChecks, Rewrite_FitPartialCharges, RotateToPrincipalAxisSystem_UndoRedo, SaturateAtoms_findBestMatching, SaturateAtoms_singleDegree, StoppableMakroAction, Subpackage_CodePatterns, Subpackage_JobMarket, Subpackage_LinearAlgebra, Subpackage_levmar, Subpackage_mpqc_open, Subpackage_vmg, Switchable_LogView, ThirdParty_MPQC_rebuilt_buildsystem, TrajectoryDependenant_MaxOrder, TremoloParser_IncreasedPrecision, TremoloParser_MultipleTimesteps, TremoloParser_setsAtomName, Ubuntu_1604_changes, stable
- Children:
- a22e05
- Parents:
- cebac0 (diff), a1436b (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - Location:
- src/Actions/FragmentationAction
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Actions/FragmentationAction/FragmentationAutomationAction.cpp
rcebac0 r36bb2d 39 39 #include "CodePatterns/MemDebug.hpp" 40 40 41 #include <boost/ assign.hpp>41 #include <boost/mpl/remove.hpp> 42 42 43 43 #include "CodePatterns/Assert.hpp" … … 48 48 49 49 #include "Atom/atom.hpp" 50 #include "Box.hpp" 50 51 #include "Fragmentation/EnergyMatrix.hpp" 51 52 #include "Fragmentation/ForceMatrix.hpp" … … 56 57 #include "Fragmentation/KeySet.hpp" 57 58 #include "Fragmentation/KeySetsContainer.hpp" 58 #include "Fragmentation/Summation/printSum.hpp" 59 #include "Fragmentation/Summation/AllLevelOrthogonalSummator.hpp" 60 #include "Fragmentation/Summation/AllLevelSummator.hpp" 61 #include "Fragmentation/Summation/writeTable.hpp" 59 62 #include "Graph/DepthFirstSearchAnalysis.hpp" 63 #include "Helpers/defs.hpp" 60 64 #include "Jobs/MPQCJob.hpp" 61 65 #include "Jobs/MPQCData.hpp" 62 66 #include "Jobs/MPQCData_printKeyNames.hpp" 67 #include "LinearAlgebra/RealSpaceMatrix.hpp" 68 #ifdef HAVE_VMG 69 #include "Jobs/VMGJob.hpp" 70 #endif 63 71 #include "molecule.hpp" 64 72 #include "World.hpp" … … 73 81 74 82 using namespace MoleCuilder; 75 76 using namespace boost::assign;77 83 78 84 // and construct the stuff … … 88 94 return NULL; 89 95 } 96 97 const int LEVEL = 5; 90 98 91 99 /** Creates a MPQCCommandJob with argument \a filename. … … 107 115 std::string output((std::istreambuf_iterator<char>(file)), 108 116 std::istreambuf_iterator<char>()); 109 FragmentJob::ptr testJob( new MPQCJob(nextid, output) ); 117 double begin[NDIM] = { 0., 0., 0. }; 118 const RealSpaceMatrix& M = World::getInstance().getDomain().getM(); 119 const double size = M.at(0,0); 120 ASSERT( M.determinant() == size*size*size, 121 "parsejob() - current domain matrix "+toString(M)+" is not cubic."); 122 const int level = LEVEL; 123 FragmentJob::ptr testJob( new MPQCJob(nextid, output, begin, size, level) ); 110 124 jobs.push_back(testJob); 111 125 file.close(); … … 142 156 } 143 157 158 /** Extracts MPQCData from received vector of FragmentResults. 159 * 160 * @param results results to extract MPQCData from 161 * @param fragmentData on return array filled with extracted MPQCData 162 */ 163 void ConvertFragmentResultToMPQCData( 164 const std::vector<FragmentResult::ptr> &results, 165 std::vector<MPQCData> &fragmentData) 166 { 167 // extract results 168 fragmentData.clear(); 169 fragmentData.reserve(results.size()); 170 171 LOG(2, "DEBUG: Parsing now through " << results.size() << " results."); 172 for (std::vector<FragmentResult::ptr>::const_iterator iter = results.begin(); 173 iter != results.end(); ++iter) { 174 //LOG(1, "RESULT: job #"+toString((*iter)->getId())+": "+toString((*iter)->result)); 175 MPQCData extractedData; 176 std::stringstream inputstream((*iter)->result); 177 LOG(2, "DEBUG: First 50 characters FragmentResult's string: "+(*iter)->result.substr(0, 50)); 178 boost::archive::text_iarchive ia(inputstream); 179 ia >> extractedData; 180 LOG(1, "INFO: extracted data is " << extractedData << "."); 181 fragmentData.push_back(extractedData); 182 } 183 184 ASSERT( results.size() == fragmentData.size(), 185 "ConvertFragmentResultToMPQCData() - the number of extracted data differs from the number of results."); 186 } 187 144 188 145 189 /** Print MPQCData from received results. 146 190 * 147 * @param results received results to extract MPQCData from 191 * @param results results with ids to associate with fragment number 192 * @param fragmentData MPQCData resulting from the jobs 148 193 * @param KeySetFilename filename with keysets to associate forces correctly 149 194 * @param NoAtoms total number of atoms … … 151 196 bool printReceivedMPQCResults( 152 197 const std::vector<FragmentResult::ptr> &results, 198 const std::vector<MPQCData> &fragmentData, 153 199 const std::string &KeySetFilename, 154 200 size_t NoAtoms) … … 173 219 IdResultMap.insert( make_pair((*iter)->getId(), *iter) ); 174 220 ASSERT( inserter.second, 175 " printReceivedMPQCResults() - two results have same id "221 "ExtractMPQCDataFromResults() - two results have same id " 176 222 +toString((*iter)->getId())+"."); 177 223 } … … 183 229 LOG(1, "INFO: There are " << FragmentCounter << " fragments."); 184 230 185 // extract results 186 std::vector<MPQCData> fragmentData(results.size()); 187 MPQCData combinedData; 188 189 LOG(2, "DEBUG: Parsing now through " << results.size() << " results."); 190 for (std::vector<FragmentResult::ptr>::const_iterator iter = results.begin(); 191 iter != results.end(); ++iter) { 192 LOG(1, "RESULT: job #"+toString((*iter)->getId())+": "+toString((*iter)->result)); 193 MPQCData extractedData; 194 std::stringstream inputstream((*iter)->result); 195 LOG(2, "DEBUG: First 50 characters FragmentResult's string: "+(*iter)->result.substr(0, 50)); 196 boost::archive::text_iarchive ia(inputstream); 197 ia >> extractedData; 198 LOG(1, "INFO: extracted data is " << extractedData << "."); 199 231 std::vector<MPQCData>::const_iterator dataiter = fragmentData.begin(); 232 std::vector<FragmentResult::ptr>::const_iterator resultiter = results.begin(); 233 for (; dataiter != fragmentData.end(); ++dataiter, ++resultiter) { 234 const MPQCData &extractedData = *dataiter; 200 235 // place results into EnergyMatrix ... 201 236 { … … 204 239 matrix[0].resize(1, extractedData.energies.total); 205 240 if (!Energy.AddMatrix( 206 std::string("MPQCJob ")+toString((* iter)->getId()),241 std::string("MPQCJob ")+toString((*resultiter)->getId()), 207 242 matrix, 208 MatrixNrLookup[(* iter)->getId()])) {243 MatrixNrLookup[(*resultiter)->getId()])) { 209 244 ELOG(1, "Adding energy matrix failed."); 210 245 return false; … … 225 260 } 226 261 if (!Force.AddMatrix( 227 std::string("MPQCJob ")+toString((* iter)->getId()),262 std::string("MPQCJob ")+toString((*resultiter)->getId()), 228 263 matrix, 229 MatrixNrLookup[(* iter)->getId()])) {264 MatrixNrLookup[(*resultiter)->getId()])) { 230 265 ELOG(1, "Adding force matrix failed."); 231 266 return false; … … 248 283 // initialise indices 249 284 KeySetsContainer KeySet; 285 KeySetsContainer ForceKeySet; 250 286 if (!Energy.InitialiseIndices()) return false; 251 287 252 288 if (!Force.ParseIndices(KeySetFilename.c_str())) return false; 253 289 254 if (!KeySet.ParseKeySets(KeySetFilename.c_str(), Force.RowCounter, Force.MatrixCounter)) return false; 290 { 291 std::stringstream filename; 292 filename << FRAGMENTPREFIX << KEYSETFILE; 293 if (!KeySet.ParseKeySets(KeySetFilename, filename.str(), FragmentCounter)) return false; 294 } 295 296 { 297 std::stringstream filename; 298 filename << FRAGMENTPREFIX << FORCESFILE; 299 if (!ForceKeySet.ParseKeySets(KeySetFilename, filename.str(), FragmentCounter)) return false; 300 } 255 301 256 302 /// prepare for OrthogonalSummation 257 303 258 // gather all present indices in AllIndices 259 IndexSet::ptr AllIndices(new IndexSet); 260 for (KeySetsContainer::ArrayOfIntVectors::const_iterator iter = KeySet.KeySets.begin(); 261 iter != KeySet.KeySets.end(); ++iter) 262 for(KeySetsContainer::IntVector::const_iterator keyiter = (*iter).begin(); 263 keyiter != (*iter).end(); ++keyiter) { 264 if (*keyiter != -1) 265 (*AllIndices) += *keyiter; 266 } 267 LOG(1, "INFO: AllIndices is " << AllIndices << "."); 268 // create container with all keysets 269 IndexSetContainer::ptr container(new IndexSetContainer(AllIndices)); 270 for (KeySetsContainer::ArrayOfIntVectors::const_iterator iter = KeySet.KeySets.begin(); 271 iter != KeySet.KeySets.end(); ++iter) { 272 IndexSet tempset; 273 for(KeySetsContainer::IntVector::const_iterator keyiter = (*iter).begin(); 274 keyiter != (*iter).end(); ++keyiter) 275 if (*keyiter != -1) 276 tempset += *keyiter; 277 container->insert(tempset); 278 } 304 // convert KeySetContainer to IndexSetContainer 305 IndexSetContainer::ptr container(new IndexSetContainer(KeySet)); 279 306 // create the map of all keysets 280 307 SubsetMap::ptr subsetmap(new SubsetMap(*container)); 308 309 // we probably don't need this, it suffices if IndexedVectors has some extra indices 310 // // forces need different keysets: they must include hydrogen 311 // // (though without ones added by saturation) 312 // IndexSetContainer::ptr forceindices(new IndexSetContainer(ForceKeySet)); 313 // // create the map of all keysets 314 // SubsetMap::ptr subsetmapforces(new SubsetMap(*forceindices)); 281 315 282 316 /// convert all MPQCData to MPQCDataMap_t … … 303 337 304 338 // forces 305 const IndexSetContainer::Container_t &indices = container->getContainer(); 306 ASSERT( indices.size() == fragmentData.size(), 307 "FragmentationAutomationAction::performCall() - indices and fragmentData differ in size."); 339 ASSERT( ForceKeySet.KeySets.size() == fragmentData.size(), 340 "FragmentationAutomationAction::performCall() - ForceKeySet's KeySets and fragmentData differ in size."); 308 341 std::vector<MPQCDataForceMap_t> MPQCData_Force_fused; 309 342 MPQCData_Force_fused.reserve(fragmentData.size()); 310 343 std::vector<MPQCData>::const_iterator dataiter = fragmentData.begin(); 311 IndexSetContainer::Container_t::const_iterator indexiter = indices.begin();312 for(;dataiter != fragmentData.end(); ++dataiter, ++ indexiter) {344 KeySetsContainer::ArrayOfIntVectors::const_iterator arrayiter = ForceKeySet.KeySets.begin(); 345 for(;dataiter != fragmentData.end(); ++dataiter, ++arrayiter) { 313 346 const MPQCData &extractedData = *dataiter; 314 347 LOG(2, "DEBUG: Current extracted Data is " << extractedData << "."); 315 348 MPQCDataForceMap_t instance; 349 // must convert int to index_t 350 IndexedVectors::indices_t indices(arrayiter->begin(), arrayiter->end()); 316 351 boost::fusion::at_key<MPQCDataFused::forces>(instance) = 317 IndexedVectors( **indexiter, extractedData.forces);352 IndexedVectors(indices, extractedData.forces); 318 353 MPQCData_Force_fused.push_back(instance); 354 } 355 356 // sampled_grid 357 std::vector<MPQCDataGridMap_t> MPQCData_Grid_fused; 358 MPQCData_Grid_fused.reserve(fragmentData.size()); 359 for(std::vector<MPQCData>::const_iterator dataiter = fragmentData.begin(); 360 dataiter != fragmentData.end(); ++dataiter) { 361 const MPQCData &extractedData = *dataiter; 362 LOG(2, "DEBUG: Current extracted Data is " << extractedData << "."); 363 MPQCDataGridMap_t instance; 364 boost::fusion::at_key<MPQCDataFused::sampled_grid>(instance) = extractedData.sampled_grid; 365 MPQCData_Grid_fused.push_back(instance); 319 366 } 320 367 … … 339 386 boost::bind(&FragmentResult::ptr::operator->, _1))); 340 387 341 // sum up and print energies 342 boost::mpl::for_each<MPQCDataEnergyVector_t>( 343 printSum<MPQCDataEnergyMap_t>( 344 subsetmap, 345 MPQCData_Energy_fused, 346 jobids, 347 container->getContainer(), 348 MatrixNrLookup) 349 ); 350 351 // sum up and print forces 352 boost::mpl::for_each<MPQCDataForceVector_t>( 353 printSum<MPQCDataForceMap_t>( 354 subsetmap, 355 MPQCData_Force_fused, 356 jobids, 357 container->getContainer(), 358 MatrixNrLookup) 359 ); 360 361 // TODO: Times should just be summed not orthogonalized 362 // // sum up and print times 363 // boost::mpl::for_each<MPQCDataTimeVector_t>( 364 // printSum<MPQCDataTimeMap_t>( 365 // subsetmap, 366 // MPQCData_Time_fused, 367 // jobids, 368 // container->getContainer(), 369 // MatrixNrLookup) 370 // ); 388 // create summation instances 389 std::vector<MPQCDataEnergyMap_t> Result_Energy_fused(subsetmap->getMaximumSubsetLevel()); 390 AllLevelOrthogonalSummator<MPQCDataEnergyMap_t> energySummer( 391 subsetmap, 392 MPQCData_Energy_fused, 393 jobids, 394 container->getContainer(), 395 MatrixNrLookup, 396 Result_Energy_fused); 397 std::vector<MPQCDataForceMap_t> Result_Force_fused(subsetmap->getMaximumSubsetLevel()); 398 AllLevelOrthogonalSummator<MPQCDataForceMap_t> forceSummer( 399 subsetmap, 400 MPQCData_Force_fused, 401 jobids, 402 container->getContainer(), 403 MatrixNrLookup, 404 Result_Force_fused); 405 std::vector<MPQCDataGridMap_t> Result_Grid_fused(subsetmap->getMaximumSubsetLevel()); 406 AllLevelOrthogonalSummator<MPQCDataGridMap_t> gridSummer( 407 subsetmap, 408 MPQCData_Grid_fused, 409 jobids, 410 container->getContainer(), 411 MatrixNrLookup, 412 Result_Grid_fused); 413 std::vector<MPQCDataTimeMap_t> Result_Time_fused(subsetmap->getMaximumSubsetLevel()); 414 AllLevelSummator<MPQCDataTimeMap_t> timeSummer( 415 subsetmap, 416 MPQCData_Time_fused, 417 jobids, 418 container->getContainer(), 419 MatrixNrLookup, 420 Result_Time_fused); 421 422 // sum up 423 boost::mpl::for_each<MPQCDataEnergyVector_t>(boost::ref(energySummer)); 424 boost::mpl::for_each<MPQCDataForceVector_t>(boost::ref(forceSummer)); 425 boost::mpl::for_each<MPQCDataGridVector_t>(boost::ref(gridSummer)); 426 boost::mpl::for_each<MPQCDataTimeVector_t>(boost::ref(timeSummer)); 427 428 // print tables (without eigenvalues, they go extra) 429 const size_t MaxLevel = subsetmap->getMaximumSubsetLevel(); 430 typedef boost::mpl::remove<MPQCDataEnergyVector_t, MPQCDataFused::energy_eigenvalues>::type MPQCDataEnergyVector_noeigenvalues_t; 431 const std::string energyresult = 432 writeTable<MPQCDataEnergyMap_t, MPQCDataEnergyVector_noeigenvalues_t >()( 433 Result_Energy_fused, MaxLevel); 434 LOG(0, "Energy table is \n" << energyresult); 435 const std::string eigenvalueresult; 436 437 LOG(0, "Eigenvalue table is \n" << eigenvalueresult); 438 const std::string forceresult = 439 writeTable<MPQCDataForceMap_t, MPQCDataForceVector_t>()( 440 Result_Force_fused, MaxLevel); 441 LOG(0, "Force table is \n" << forceresult); 442 // we don't want to print grid to a table 443 // print times (without flops for now) 444 typedef boost::mpl::remove<MPQCDataTimeVector_t, MPQCDataFused::times_flops>::type MPQCDataTimeVector_noflops_t; 445 const std::string timesresult = 446 writeTable<MPQCDataTimeMap_t, MPQCDataTimeVector_noflops_t >()( 447 Result_Time_fused, MaxLevel); 448 LOG(0, "Times table is \n" << timesresult); 371 449 } 372 450 … … 448 526 } 449 527 528 #ifdef HAVE_VMG 529 bool createLongRangeJobs( 530 FragmentController &controller, 531 const FragmentationFragmentationAutomationAction::FragmentationFragmentationAutomationParameters ¶ms, 532 const std::vector<MPQCData> &fragmentData) 533 { 534 std::vector<FragmentJob::ptr> jobs; 535 // add one job for each fragment as the short-range correction which we need 536 // to subtract from the obtained full potential to get the long-range part only 537 for (std::vector<MPQCData>::const_iterator iter = fragmentData.begin(); 538 iter != fragmentData.end(); ++iter) { 539 const JobId_t next_id = controller.getAvailableId(); 540 LOG(1, "INFO: Creating VMGJob with " << iter->sampled_grid.sampled_grid.size() 541 << " gridpoints and " << iter->charges.size() << " particle charges."); 542 FragmentJob::ptr testJob( 543 new VMGJob(next_id, iter->sampled_grid, iter->positions, iter->charges) ); 544 jobs.push_back(testJob); 545 } 546 547 // add one more job for the full calculation 548 // TODO: Here, we actually have to combine all the other sampled_grids 549 { 550 const int level = LEVEL; 551 const int GRID = pow(2, level); 552 std::vector<double> full_sample(GRID*GRID*GRID, 0.); 553 double begin[NDIM] = { 0., 0., 0. }; 554 const RealSpaceMatrix& M = World::getInstance().getDomain().getM(); 555 const double size = M.at(0,0); 556 ASSERT( M.determinant() == size*size*size, 557 "createLongRangeJobs() - current domain matrix "+toString(M)+" is not cubic."); 558 const SamplingGrid full_sampled_grid(begin, size, level, full_sample); 559 const std::vector< std::vector<double> > positions; 560 const std::vector<double> charges; 561 const JobId_t next_id = controller.getAvailableId(); 562 LOG(1, "INFO: Creating full VMGJob with " << full_sample.size() 563 << " gridpoints and " << charges.size() << " particle charges."); 564 FragmentJob::ptr testJob( 565 new VMGJob(next_id, full_sampled_grid, positions, charges) ); 566 jobs.push_back(testJob); 567 } 568 569 // then send jobs to controller 570 controller.addJobs(jobs); 571 controller.sendJobs(params.host.get(), params.port.get()); 572 return true; 573 } 574 #endif 575 450 576 void WaitforResults( 451 577 boost::asio::io_service &io_service, … … 483 609 RunService(io_service, "Requesting ids"); 484 610 485 // Phase Two: create and add jobs611 // Phase Two: create and add MPQCJobs 486 612 if (!createJobsFromFiles(controller, params, jobfiles)) 487 613 return Action::failure; 488 RunService(io_service, "Adding jobs");614 RunService(io_service, "Adding MPQCJobs"); 489 615 490 616 // Phase Three: calculate result 491 617 WaitforResults(io_service, controller, params, jobfiles.size()); 492 493 // Phase Three: get result494 618 controller.receiveResults(params.host.get(), params.port.get()); 495 RunService(io_service, "Phase Four"); 619 RunService(io_service, "Requesting short-range results"); 620 std::vector<FragmentResult::ptr> MPQCresults = controller.getReceivedResults(); 621 std::vector<MPQCData> fragmentData; 622 ConvertFragmentResultToMPQCData(MPQCresults, fragmentData); 623 624 // print intermediate short-range results 625 { 626 LOG(1, "INFO: Parsing fragment files from " << params.path.get() << "."); 627 printReceivedMPQCResults( 628 MPQCresults, 629 fragmentData, 630 params.path.get(), 631 getNoAtomsFromAdjacencyFile(params.path.get())); 632 } 633 634 #ifdef HAVE_VMG 635 if (params.DoLongrange.get()) { 636 // Phase Four: obtain more ids 637 requestIds(controller, params, fragmentData.size()+1); 638 RunService(io_service, "Requesting ids"); 639 640 // Phase Five: create VMGJobs 641 if (!createLongRangeJobs(controller, params, fragmentData)) 642 return Action::failure; 643 RunService(io_service, "Adding VMGJobs"); 644 645 // Phase Six: calculate result 646 WaitforResults(io_service, controller, params, fragmentData.size()+1); 647 controller.receiveResults(params.host.get(), params.port.get()); 648 RunService(io_service, "Requesting long-range results"); 649 std::vector<FragmentResult::ptr> VMGresults = controller.getReceivedResults(); 650 ASSERT( MPQCresults.size()+1 == VMGresults.size(), 651 "FragmentationFragmentationAutomationAction::performCall() - number of MPQCresultd and VMGresults don't match."); 496 652 497 653 // Final phase: print result 498 654 { 499 655 LOG(1, "INFO: Parsing fragment files from " << params.path.get() << "."); 500 std::vector<FragmentResult::ptr> results = controller.getReceivedResults();501 656 printReceivedMPQCResults( 502 results, 657 MPQCresults, 658 fragmentData, 503 659 params.path.get(), 504 660 getNoAtomsFromAdjacencyFile(params.path.get())); 505 661 } 662 } 663 #endif 506 664 size_t Exitflag = controller.getExitflag(); 507 665 -
src/Actions/FragmentationAction/FragmentationAutomationAction.def
rcebac0 r36bb2d 20 20 // ValueStorage by the token "Z" -> first column: int, Z, "Z" 21 21 // "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value 22 #define paramtypes (std::vector< boost::filesystem::path >)(std::string)(std::string)(std::string)(boost::filesystem::path) 23 #define paramtokens ("fragment-jobs")("fragment-path")("server-address")("server-port")("fragment-executable") 24 #define paramdescriptions ("vector of fragment files")("prefix of each fragment file")("hostname of server")("controller port of server")("executable to launch on clients") 25 #define paramdefaults (NOPARAM_DEFAULT)(NOPARAM_DEFAULT)(PARAM_DEFAULT("127.0.0.1"))(PARAM_DEFAULT("1026"))(NOPARAM_DEFAULT) 26 #define paramreferences (jobfiles)(path)(host)(port)(executable) 22 #define paramtypes (std::vector< boost::filesystem::path >)(std::string)(std::string)(std::string)(boost::filesystem::path)(bool) 23 #define paramtokens ("fragment-jobs")("fragment-path")("server-address")("server-port")("fragment-executable")("DoLongrange") 24 #define paramdescriptions ("vector of fragment files")("prefix of each fragment file")("hostname of server")("controller port of server")("executable to launch on clients")("whether to calculate long-range contributions") 25 #define paramdefaults (NOPARAM_DEFAULT)(NOPARAM_DEFAULT)(PARAM_DEFAULT("127.0.0.1"))(PARAM_DEFAULT("1026"))(NOPARAM_DEFAULT)(PARAM_DEFAULT("0")) 26 #define paramreferences (jobfiles)(path)(host)(port)(executable)(DoLongrange) 27 27 #define paramvalids \ 28 28 (STLVectorValidator< std::vector< boost::filesystem::path > >(ParserFileValidator() && FilePresentValidator())) \ … … 30 30 (DummyValidator< std::string >()) \ 31 31 (DummyValidator< std::string >()) \ 32 (DummyValidator< boost::filesystem::path >()) 32 (DummyValidator< boost::filesystem::path >()) \ 33 (DummyValidator< bool >()) 33 34 34 35 #undef statetypes
Note:
See TracChangeset
for help on using the changeset viewer.