Changeset e420f9
- Timestamp:
- Oct 6, 2011, 7:17:46 AM (13 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:
- 7a0340
- Parents:
- d2bac9
- git-author:
- Frederik Heber <heber@…> (04/23/11 19:38:12)
- git-committer:
- Frederik Heber <heber@…> (10/06/11 07:17:46)
- Location:
- LinearAlgebra/src
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
LinearAlgebra/src/LinearAlgebra/VectorContent.cpp
rd2bac9 re420f9 25 25 #include <iostream> 26 26 #include <limits> 27 #include <vector> 27 28 28 29 #include "CodePatterns/Assert.hpp" … … 77 78 }; 78 79 79 /** Copy constructor of class VectorContent. 80 /** Constructor that parses vector from a stream. 81 * 82 * \param _dimension size of vector 83 * \param &inputstream stream to parse from 84 */ 85 VectorContent::VectorContent(const size_t _dimension, std::istream &inputstream) : 86 dimension(_dimension), 87 content(NULL), 88 free_content_on_exit(true) 89 { 90 // allocate vector and set contents 91 content = gsl_vector_alloc(dimension); 92 93 size_t row = 0; 94 size_t index = 0; 95 do { 96 std::string line; 97 getline(inputstream, line); 98 //std::cout << line << std::endl; 99 std::stringstream parseline(line); 100 // skip comments 101 if ((parseline.peek() == '#') || (parseline.str().empty())) 102 continue; 103 // break on empty lines 104 if (parseline.peek() == '\n') 105 break; 106 107 // parse line with values 108 std::vector<double> line_of_values; 109 do { 110 double value; 111 parseline >> value >> ws; 112 line_of_values.push_back(value); 113 } while (parseline.good()); 114 115 // check number of columns parsed 116 ASSERT(line_of_values.size()+index <= dimension, 117 "VectorContent::VectorContent() - exceedingly many entries in row " 118 +toString(row)+": current number is " 119 +toString(index)+" and expecting now " 120 +toString(line_of_values.size())+" which exceeds "+toString(dimension)+"."); 121 122 for (std::vector<double>::const_iterator iter = line_of_values.begin(); 123 iter != line_of_values.end();++iter, ++index) 124 at(index) = *iter; 125 ++row; 126 } while (inputstream.good()); 127 // check number of rows parsed 128 ASSERT(index == dimension, 129 "VectorContent::VectorContent() - insufficent number of components " 130 +toString(index)+" < "+toString(dimension)+" read."); 131 } 132 133 134 /** Constructor of class VectorContent. 80 135 * No allocation, we just take over gsl_vector. 81 136 * \param *src source gsl_vector … … 463 518 } 464 519 520 /** Preparses a vector in an input stream for component count. 521 * 522 * \note This does not change the get position within the stream. 523 * 524 * @param inputstream to parse vector from 525 * @return number of present entries 526 */ 527 size_t VectorContent::preparseVectorDimensions(std::istream &inputstream) 528 { 529 const std::streampos initial_position(inputstream.tellg()); 530 // std::cout << "We are at position " 531 // +toString((int)inputstream.tellg())+" from start of stream." << std::endl; 532 size_t index = 0; 533 do { 534 std::string line; 535 getline(inputstream, line); 536 std::stringstream parseline(line); 537 // skip comments 538 if ((parseline.peek() == '#') || (line.empty())) 539 continue; 540 // break on empty lines 541 if (parseline.peek() == '\n') 542 break; 543 544 // parse line with values 545 std::vector<double> line_of_values; 546 do { 547 double value; 548 parseline >> value >> ws; 549 line_of_values.push_back(value); 550 } while (parseline.good()); 551 552 index += line_of_values.size(); 553 } while (inputstream.good()); 554 // clear end of file flags 555 inputstream.clear(); 556 557 // reset to initial position 558 inputstream.seekg(initial_position); 559 // std::cout << "We are again at position " 560 // +toString((int)inputstream.tellg())+" from start of stream." << std::endl; 561 562 return index; 563 } 564 565 /** Writes vector content to ostream in such a manner that it can be re-parsed 566 * by the code in the constructor. 567 * 568 * @param ost stream to write to 569 */ 570 void VectorContent::write(std::ostream &ost) const 571 { 572 for (size_t index = 0; index < dimension; ++index) 573 ost << at(index) << "\t"; 574 ost << std::endl; 575 } 576 577 465 578 /* ======================== Properties ============================= */ 466 579 /** Calculates scalar product between \a *this and \a b. -
LinearAlgebra/src/LinearAlgebra/VectorContent.hpp
rd2bac9 re420f9 55 55 VectorContent(const VectorContent & src); 56 56 VectorContent(gsl_vector * _src, bool _free_content_on_exit = false); 57 VectorContent(const size_t _dimension, std::istream &inputstream); 57 58 virtual ~VectorContent(); 58 59 … … 107 108 const size_t getDimension() const; 108 109 110 static size_t preparseVectorDimensions(std::istream &inputstream); 111 void write(std::ostream &ost) const; 112 109 113 size_t dimension; 110 114 gsl_vector *content; -
LinearAlgebra/src/unittests/VectorContentUnitTest.cpp
rd2bac9 re420f9 175 175 CPPUNIT_ASSERT_EQUAL( true, unit.IsOne() ); 176 176 }; 177 178 /** Unit test for reading from and writing vector to stream 179 * 180 */ 181 void VectorContentTest::ReadWriteTest() 182 { 183 // set up matrix 184 VectorContent v((size_t)3); 185 for (size_t i=0; i<3;++i) 186 v.at(i) = i+1.; 187 188 // write to stream 189 std::stringstream vectorstream; 190 v.write(vectorstream); 191 192 // parse in dimensions and check 193 size_t vectordimension = VectorContent::preparseVectorDimensions(vectorstream); 194 CPPUNIT_ASSERT_EQUAL( (size_t)3, vectordimension ); 195 // parse in vector and check 196 VectorContent w(3, vectorstream); 197 CPPUNIT_ASSERT_EQUAL( v, w ); 198 } -
LinearAlgebra/src/unittests/VectorContentUnitTest.hpp
rd2bac9 re420f9 30 30 CPPUNIT_TEST (OperatorAlgebraTest ); 31 31 CPPUNIT_TEST (OperatorIsTest ); 32 CPPUNIT_TEST (ReadWriteTest ); 32 33 CPPUNIT_TEST_SUITE_END(); 33 34 … … 42 43 void OperatorIsTest(); 43 44 void OperatorAlgebraTest(); 45 void ReadWriteTest(); 44 46 45 47 private:
Note:
See TracChangeset
for help on using the changeset viewer.