ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/branches/new_design/OOPSE-4/src/types/PolynomialBondType.hpp
(Generate patch)

Comparing branches/new_design/OOPSE-4/src/types/PolynomialBondType.hpp (file contents):
Revision 1745 by tim, Wed Nov 17 01:11:36 2004 UTC vs.
Revision 1746 by tim, Wed Nov 17 06:37:56 2004 UTC

# Line 25 | Line 25
25  
26   /**
27   * @file PolynomialBondType.hpp
28 < * @author    tlin
29 < * @date  11/01/2004
28 > * @author    teng lin
29 > * @date  11/16/2004
30   * @version 1.0
31   */
32  
# Line 35 | Line 35 | class PolynomialBondType : public BondType{
35  
36   namespace oopse {
37  
38 + #include "math/Polynomial.hpp"
39 + #include "types/BondType.hpp"
40 + /**
41 + * @class PolynomialBondType PolynomialBondType.hpp "types/PolynomialBondType.hpp"
42 + * @todo documentation
43 + */
44   class PolynomialBondType : public BondType{
45  
46      public:
47 <        PolynomialBondType();
47 >        PolynomialBondType() {}
48 >        PolynomialBondType(double r0, const std::vector<int>& power,
49 >            const std::vector<double>& coeff) : BondType(r0){
50 >        }
51  
52 <        void calcForce(double r, double & V, double & dVdr) = 0;
52 >        void setCoefficient(int power, double coefficient) {
53 >            polynomial_.setCoefficient(power, coefficient);
54 >        }
55 >
56 >        double getCoefficient(int power) {
57 >            return polynomial_.getCoefficient(power);
58 >        }
59          
60 +        void calcForce(double r, double & V, double & dVdr) {
61 +            double delta = r - r0;
62 +            V = polynomial_.evaluate(delta);
63 +            dVdr = polynomial_.evaluateDerivative(delta);
64 +
65 +        }
66 +
67 +        friend std::ostream& operator <<(std::ostream& os, PolynomialBondType& pbt);
68 +        
69      private:
70          
71 +        DoublePolynomial polynomial_;
72   };
73  
74 + std::ostream& operator <<(std::ostream& os, PolynomialBondType& pbt) {
75 +    typename DoublePolynomial::PolynomialIterator i;
76  
77 +    i = pbt.polynomial_.begin();
78 +    
79 +    if (i == pbt.polynomial_.end()) {
80 +        os << "This Polynomial contains nothing" << std::endl;
81 +        return os;
82 +    }
83 +
84 +    os << "This Polynomial contains below terms:" << std::endl;    
85 +    
86 +    while(true){
87 +        os << i->second << "*" << "(r - " << pbt.getEquilibriumBondLength() << ")" << "^" << i->first;
88 +
89 +        if (++i == pbt.polynomial_.end()) {
90 +            //if we reach the end of the polynomial pair, write out a newline and then escape the loop
91 +            os << std::endl;
92 +            break;
93 +        } else {
94 +            //otherwise, write out a "+"
95 +            os << " + ";
96 +        }
97 +    }
98 +    
99 +    return os;
100 + }
101 +
102 +
103   } //end namespace oopse
104 < #endif //TYPES_POLYNOMIALBONDTYPE_HPP
104 > #endif //TYPES_POLYNOMIALBONDTYPE_HPP

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines