- Timestamp:
- Mar 20, 2017, 2:54:42 PM (9 years ago)
- Branches:
- FitPartialCharges_GlobalError, PartialCharges_OrthogonalSummation
- Children:
- 5b3781
- Parents:
- dbd841
- git-author:
- Frederik Heber <heber@…> (06/12/16 14:28:29)
- git-committer:
- Frederik Heber <heber@…> (03/20/17 14:54:42)
- File:
- 
      - 1 edited
 
 
Legend:
- Unmodified
- Added
- Removed
- 
      src/Fragmentation/Summation/SetValues/IndexedVectors.cpprdbd841 r346b0c 2 2 * Project: MoleCuilder 3 3 * Description: creates and alters molecular systems 4 * Copyright (C) 2012 University of Bonn. All rights reserved. 5 * Copyright (C) 2013 Frederik Heber. All rights reserved. 6 * 4 * Copyright (C) 2016 Frederik Heber. All rights reserved. 5 * 7 6 * 8 7 * This file is part of MoleCuilder. … … 25 24 * IndexedVectors.cpp 26 25 * 27 * Created on: 29.07.201226 * Created on: Jun 12, 2016 28 27 * Author: heber 29 28 */ 29 30 30 31 31 // include config.h … … 36 36 #include "CodePatterns/MemDebug.hpp" 37 37 38 #include " Fragmentation/Summation/SetValues/IndexedVectors.hpp"38 #include "IndexedVectors.hpp" 39 39 40 #include <iostream> 41 42 #include "CodePatterns/Assert.hpp" 43 44 // static member variables 45 const size_t IndexedVectors::FixedSize = 3; 46 const IndexedVectors::vector_t IndexedVectors::nullvector( FixedSize, 0.); 47 48 IndexedVectors::IndexedVectors(const indices_t &_indices, const vectors_t &_vectors) 49 { 50 ASSERT(_indices.size() == _vectors.size(), 51 "IndexedVectors::IndexedVectors() - vector of indices and vectors don't match in size."); 52 indices_t::const_iterator indexiter = _indices.begin(); 53 vectors_t::const_iterator vectoriter = _vectors.begin(); 54 for (; vectoriter != _vectors.end(); ++indexiter, ++vectoriter) { 55 ASSERT( vectoriter->size() == FixedSize, 56 "IndexedVectors::IndexedVectors() - vector to instance " 57 +toString(*indexiter)+" has size " 58 +toString(vectoriter->size())+" different to FixedSize " 59 +toString(FixedSize)+"."); 60 if (*indexiter != (size_t)DropIndex) { // skip all force vectors associated to -1 61 #ifndef NDEBUG 62 std::pair<indexedvectors_t::iterator, bool> inserter = 63 #endif 64 vectors.insert( std::make_pair( *indexiter, *vectoriter) ); 65 ASSERT( inserter.second, 66 "IndexedVectors::IndexedVectors() - index " 67 +toString(inserter.first->first)+" already present with vector " 68 +toString(inserter.first->second)+"."); 69 } 70 } 71 } 72 73 IndexedVectors& IndexedVectors::operator=(const IndexedVectors &other) 74 { 75 // check for self-assignment 76 if (this != &other) { 77 vectors.clear(); 78 vectors = other.vectors; 79 } 80 return *this; 81 } 82 83 void IndexedVectors::superposeOtherIndexedVectors(const IndexedVectors &other, const double prefactor) 84 { 85 for (indexedvectors_t::const_iterator otheriter = other.vectors.begin(); 86 otheriter != other.vectors.end(); ++otheriter) { 87 indexedvectors_t::iterator iter = vectors.find(otheriter->first); 88 if (iter == vectors.end()) { 89 // index does not exist 90 std::pair<indexedvectors_t::iterator, bool> inserter = 91 vectors.insert( std::make_pair( otheriter->first, nullvector) ); 92 ASSERT( inserter.second, 93 "IndexedVectors::superposeOtherIndexedVectors() - index is present though unfound before?"); 94 iter = inserter.first; 95 } 96 // now simply vector to index from other instance add with prefactor 97 vector_t::iterator vectoriter = iter->second.begin(); 98 vector_t::const_iterator othervectoriter = otheriter->second.begin(); 99 for (;vectoriter != iter->second.end(); ++vectoriter, ++othervectoriter) { 100 *vectoriter += prefactor * (*othervectoriter); 101 } 102 } 103 } 104 105 bool IndexedVectors::operator==(const IndexedVectors& other) const 106 { 107 bool status = vectors == other.vectors; 108 return status; 109 } 110 111 std::ostream & operator<<(std::ostream &ost, const IndexedVectors &other) 112 { 113 for (IndexedVectors::indexedvectors_t::const_iterator iter = other.vectors.begin(); 114 iter != other.vectors.end(); ++iter) 115 ost << "(" << iter->first << "," << iter->second << ") "; 116 return ost; 117 } 118 119 template<> IndexedVectors ZeroInstance<IndexedVectors>() 40 template <> 41 IndexedVectors ZeroInstance<IndexedVectors>() 120 42 { 121 43 IndexedVectors returnvalue; 122 44 return returnvalue; 123 45 } 46 47 template<> 48 detail::force ZeroInstance< detail::force >() 49 { 50 return detail::force::nullvector; 51 } 
  Note:
 See   TracChangeset
 for help on using the changeset viewer.
  
