Changeset d12d621
- Timestamp:
- Nov 14, 2012, 10:02:51 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:
- 28c025
- Parents:
- 2764e0
- git-author:
- Frederik Heber <heber@…> (07/25/12 18:26:01)
- git-committer:
- Frederik Heber <heber@…> (11/14/12 10:02:51)
- Location:
- src
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Actions/FragmentationAction/FragmentationAutomationAction.cpp
r2764e0 rd12d621 48 48 49 49 #include "Atom/atom.hpp" 50 #include "Box.hpp" 50 51 #include "Fragmentation/EnergyMatrix.hpp" 51 52 #include "Fragmentation/ForceMatrix.hpp" … … 61 62 #include "Jobs/MPQCData.hpp" 62 63 #include "Jobs/MPQCData_printKeyNames.hpp" 64 #include "LinearAlgebra/RealSpaceMatrix.hpp" 63 65 #ifdef HAVE_VMG 64 66 #include "Jobs/VMGJob.hpp" … … 91 93 return NULL; 92 94 } 95 96 const int LEVEL = 5; 93 97 94 98 /** Creates a MPQCCommandJob with argument \a filename. … … 110 114 std::string output((std::istreambuf_iterator<char>(file)), 111 115 std::istreambuf_iterator<char>()); 112 FragmentJob::ptr testJob( new MPQCJob(nextid, output) ); 116 double begin[NDIM] = { 0., 0., 0. }; 117 const RealSpaceMatrix& M = World::getInstance().getDomain().getM(); 118 const double size = M.at(0,0); 119 ASSERT( M.determinant() == size*size*size, 120 "parsejob() - current domain matrix "+toString(M)+" is not cubic."); 121 const int level = LEVEL; 122 FragmentJob::ptr testJob( new MPQCJob(nextid, output, begin, size, level) ); 113 123 jobs.push_back(testJob); 114 124 file.close(); … … 207 217 IdResultMap.insert( make_pair((*iter)->getId(), *iter) ); 208 218 ASSERT( inserter.second, 209 " printReceivedMPQCResults() - two results have same id "219 "ExtractMPQCDataFromResults() - two results have same id " 210 220 +toString((*iter)->getId())+"."); 211 221 } … … 475 485 FragmentController &controller, 476 486 const FragmentationFragmentationAutomationAction::FragmentationFragmentationAutomationParameters ¶ms, 477 const size_t NoJobs) 478 { 479 const int GRID = pow(2,5); 487 const std::vector<MPQCData> &fragmentData) 488 { 480 489 std::vector<FragmentJob::ptr> jobs; 481 std::vector< double > sampled_input (GRID*GRID*GRID, 0.); 482 for (size_t i=0; i< NoJobs; ++i) { 490 // add one job for each fragment as the short-range correction which we need 491 // to subtract from the obtained full potential to get the long-range part only 492 for (std::vector<MPQCData>::const_iterator iter = fragmentData.begin(); 493 iter != fragmentData.end(); ++iter) { 483 494 const JobId_t next_id = controller.getAvailableId(); 484 495 LOG(1, "INFO: Creating VMGJob."); 485 FragmentJob::ptr testJob( new VMGJob(next_id, sampled_input) ); 496 FragmentJob::ptr testJob( 497 new VMGJob(next_id, iter->density.begin, iter->density.size, iter->density.level, iter->density.sampled_grid) ); 486 498 jobs.push_back(testJob); 487 499 } 500 501 // add one more job for the full calculation 502 // TODO: Here, we actually have to combine all the other sampled_grids 503 { 504 const int level = LEVEL; 505 const int GRID = pow(2, level); 506 std::vector<double> full_sampled_grid(GRID*GRID*GRID, 0.); 507 double begin[NDIM] = { 0., 0., 0. }; 508 const RealSpaceMatrix& M = World::getInstance().getDomain().getM(); 509 const double size = M.at(0,0); 510 ASSERT( M.determinant() == size*size*size, 511 "createLongRangeJobs() - current domain matrix "+toString(M)+" is not cubic."); 512 const JobId_t next_id = controller.getAvailableId(); 513 FragmentJob::ptr testJob( 514 new VMGJob(next_id, begin, size, level, full_sampled_grid) ); 515 jobs.push_back(testJob); 516 } 517 518 // then send jobs to controller 488 519 controller.addJobs(jobs); 489 520 controller.sendJobs(params.host.get(), params.port.get()); … … 557 588 558 589 // Phase Five: create VMGJobs 559 if (!createLongRangeJobs(controller, params, jobfiles.size()+1))590 if (!createLongRangeJobs(controller, params, fragmentData)) 560 591 return Action::failure; 561 592 RunService(io_service, "Adding VMGJobs"); -
src/Jobs/InterfaceVMGJob.cpp
r2764e0 rd12d621 61 61 62 62 LOG(1, "INFO: Mesh has extent " << grid.Extent().MeshWidth() << "."); 63 const int gridpoints = pow(2, level); 64 LOG(1, "INFO: gridpoints on finest level are " << gridpoints << "."); 65 assert( (grid.Extent().MeshWidth().X() * gridpoints) == 1 ); 66 assert( (grid.Extent().MeshWidth().Y() * gridpoints) == 1 ); 67 assert( (grid.Extent().MeshWidth().Z() * gridpoints) == 1 ); 63 68 LOG(1, "INFO: " 64 69 << "X in [" << grid.Local().Begin().X() << "," << grid.Local().End().X() << "]," 65 70 << "Y in [" << grid.Local().Begin().Y() << "," << grid.Local().End().Y() << "]," 66 71 << "Z in [" << grid.Local().Begin().Z() << "," << grid.Local().End().Z() << "]."); 72 73 std::vector<double>::const_iterator sample_iter = sampled_input.begin(); 67 74 for (i.X()=grid.Local().Begin().X(); i.X()<grid.Local().End().X(); ++i.X()) 68 75 for (i.Y()=grid.Local().Begin().Y(); i.Y()<grid.Local().End().Y(); ++i.Y()) … … 72 79 // R.y() = pos.Y(); 73 80 // R.z() = pos.Z(); 74 grid(i) = 0.; //temp_grid(i); 81 grid(i) = *sample_iter; //temp_grid(i); 82 ++sample_iter; 75 83 } 84 assert( sample_iter == sampled_input.end() ); 76 85 77 86 Grid::iterator grid_iter; -
src/Jobs/InterfaceVMGJob.hpp
r2764e0 rd12d621 36 36 VMG::Interface(boundary, levelMin, levelMax, 37 37 box_begin, box_end, coarseningSteps, alpha), 38 sampled_input(_sampled_input) 38 sampled_input(_sampled_input), 39 level(levelMax) 39 40 {} 40 41 … … 46 47 private: 47 48 const std::vector< double > sampled_input; 49 const int level; 48 50 }; 49 51 -
src/Jobs/MPQCData.hpp
r2764e0 rd12d621 67 67 68 68 /// Density 69 typedef std::vector<double> grid_type; 70 grid_type density; 69 struct density_t { 70 //!> Begin (min coordinates) of grid in real space 71 double begin[3]; 72 //!> edge length of cubic(!) domain 73 double size; 74 //!> level of the grid, hence \f$2^\text{level}\f$ 75 int level; 76 77 //!> typedef for vector of samples grids 78 typedef std::vector<double> grid_type; 79 //!> vector of sample points in order x, y, z 80 grid_type sampled_grid; 81 } density; 71 82 72 83 /// Timing structure … … 98 109 ar & energies.eigenvalues; 99 110 ar & forces; 100 ar & density; 111 int i; 112 for (int i=0; i<3; ++i) 113 ar & density.begin[i]; 114 ar & density.size; 115 ar & density.level; 116 ar & density.sampled_grid; 101 117 ar & times.walltime; 102 118 ar & times.cputime; -
src/Jobs/MPQCJob.cpp
r2764e0 rd12d621 46 46 #include <sstream> 47 47 48 MPQCJob::MPQCJob(const JobId_t _JobId, const std::string &_inputfile) : 48 MPQCJob::MPQCJob( 49 const JobId_t _JobId, 50 const std::string &_inputfile, 51 const double _begin[3], 52 const double _size, 53 const int _level) : 49 54 FragmentJob(_JobId), 50 inputfile(_inputfile) 51 {} 55 inputfile(_inputfile), 56 size(_size), 57 level(_level) 58 { 59 for (int i=0; i<3; ++i) 60 begin[i] = _begin[i]; 61 } 52 62 53 63 MPQCJob::MPQCJob() : 54 FragmentJob(JobId::IllegalJob) 64 FragmentJob(JobId::IllegalJob), 65 size(0.), 66 level(0) 55 67 {} 56 68 -
src/Jobs/MPQCJob.hpp
r2764e0 rd12d621 27 27 { 28 28 public: 29 MPQCJob(const JobId_t _JobId, const std::string &_inputfile); 29 MPQCJob( 30 const JobId_t _JobId, 31 const std::string &_inputfile, 32 const double _begin[3], 33 const double _size, 34 const int _level); 30 35 virtual ~MPQCJob(); 31 36 … … 35 40 //!> contents of the input file 36 41 const std::string inputfile; 42 //!> offset of grid 43 double begin[3]; 44 //!> size of grid, i.e. edge length of cubic(!) domain 45 const double size; 46 //!> level, i.e. \f$2^{\text{level}}\f$ grid points per axis 47 const int level; 37 48 38 49 private: … … 48 59 ar & boost::serialization::base_object<FragmentJob>(*this); 49 60 ar & const_cast<std::string &>(inputfile); 61 int i; 62 for (i=0; i<3; ++i) 63 ar & begin[i]; 64 ar & const_cast<double &>(size); 65 ar & const_cast<int &>(level); 50 66 } 51 67 }; -
src/Jobs/VMGJob.cpp
r2764e0 rd12d621 74 74 using namespace VMG; 75 75 76 VMGJob::VMGJob(const JobId_t _JobId, const std::vector< double > &_sampled_input) : 76 VMGJob::VMGJob( 77 const JobId_t _JobId, 78 const double _begin[3], 79 const double _size, 80 const int _level, 81 const std::vector< double > &_sampled_input) : 77 82 FragmentJob(_JobId), 83 size(_size), 84 level(_level), 78 85 sampled_input(_sampled_input) 79 {} 86 { 87 for (size_t i=0; i<3; ++i) 88 begin[i] = _begin[i]; 89 } 80 90 81 91 VMGJob::VMGJob() : 82 FragmentJob(JobId::IllegalJob) 92 FragmentJob(JobId::IllegalJob), 93 size(0.), 94 level(0) 83 95 {} 84 96 … … 117 129 // TODO: As a matter of fact should use open boundary conditions 118 130 const Boundary boundary(Periodic, Periodic, Periodic); 119 int level = 7;120 double box_offset[NDIM] = { 0., 0., 0. };121 double box_size = 1;122 131 // int near_field_cells = 10; 123 132 … … 136 145 2, 137 146 level, 138 Vector(b ox_offset),139 box_size);147 Vector(begin), 148 size); 140 149 new LevelOperatorCS(Stencils::RestrictionFullWeight, Stencils::InterpolationTrilinear); 141 150 new Givens<SolverSingular>(); -
src/Jobs/VMGJob.hpp
r2764e0 rd12d621 34 34 * 35 35 * @param _JobId id of the job 36 * @param _begin offset of the domain 37 * @param _size edge length of the cubic(!) domain 38 * @param _level level is \f$2^{\text{level}}\f$ grid points 36 39 * @param _sampled_input vector of sampled points of the grid as right-hand side 37 40 */ 38 VMGJob(const JobId_t _JobId, const std::vector< double > &_sampled_input); 41 VMGJob(const JobId_t _JobId, 42 const double _begin[3], 43 const double _size, 44 const int _level, 45 const std::vector< double > &_sampled_input); 39 46 virtual ~VMGJob(); 40 47 … … 45 52 46 53 private: 54 double begin[3]; 55 const double size; 56 const int level; 47 57 //!> contents of the input file 48 58 const std::vector< double > sampled_input; … … 59 69 { 60 70 ar & boost::serialization::base_object<FragmentJob>(*this); 71 int i; 72 for (i=0; i< 3; ++i) 73 ar & begin[i]; 74 ar & const_cast< double &>(size); 75 ar & const_cast< int &>(level); 61 76 ar & const_cast< std::vector< double > &>(sampled_input); 62 77 }
Note:
See TracChangeset
for help on using the changeset viewer.