--- trunk/src/math/Polynomial.hpp 2009/09/08 15:48:33 1362 +++ trunk/src/math/Polynomial.hpp 2013/06/16 15:15:42 1879 @@ -6,19 +6,10 @@ * redistribute this software in source and binary code form, provided * that the following conditions are met: * - * 1. Acknowledgement of the program authors must be made in any - * publication of scientific results based in part on use of the - * program. An acceptable form of acknowledgement is citation of - * the article in which the program was described (Matthew - * A. Meineke, Charles F. Vardeman II, Teng Lin, Christopher - * J. Fennell and J. Daniel Gezelter, "OOPSE: An Object-Oriented - * Parallel Simulation Engine for Molecular Dynamics," - * J. Comput. Chem. 26, pp. 252-271 (2005)) - * - * 2. Redistributions of source code must retain the above copyright + * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * - * 3. Redistributions in binary form must reproduce the above copyright + * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the * distribution. @@ -37,6 +28,16 @@ * arising out of the use of or inability to use software, even if the * University of Notre Dame has been advised of the possibility of * such damages. + * + * SUPPORT OPEN SCIENCE! If you use OpenMD or its source code in your + * research, please cite the appropriate papers when you publish your + * work. Good starting points are: + * + * [1] Meineke, et al., J. Comp. Chem. 26, 252-271 (2005). + * [2] Fennell & Gezelter, J. Chem. Phys. 124, 234104 (2006). + * [3] Sun, Lin & Gezelter, J. Chem. Phys. 128, 234107 (2008). + * [4] Kuang & Gezelter, J. Chem. Phys. 133, 164101 (2010). + * [5] Vardeman, Stocker & Gezelter, J. Chem. Theory Comput. 7, 834 (2011). */ /** @@ -57,7 +58,7 @@ #include "config.h" #include "math/Eigenvalue.hpp" -namespace oopse { +namespace OpenMD { template Real fastpow(Real x, int N) { Real result(1); //or 1.0? @@ -158,7 +159,7 @@ namespace oopse { * this Polynomial. * @return the coefficient associated with the given power for * this Polynomial - * @exponent exponent of any term in this Polynomial + * @param exponent exponent of any term in this Polynomial */ Real getCoefficient(ExponentType exponent) { iterator i = polyPairMap_.find(exponent); @@ -272,8 +273,8 @@ namespace oopse { * Returns the first derivative of this polynomial. * @return the first derivative of this polynomial */ - PolynomialType & getDerivative() { - Polynomial p(); + PolynomialType* getDerivative() { + Polynomial* p = new Polynomial(); typename Polynomial::const_iterator i; ExponentType exponent; @@ -282,7 +283,7 @@ namespace oopse { for (i = this->begin(); i != this->end(); ++i) { exponent = i->first; coefficient = i->second; - p.setCoefficient(exponent-1, coefficient * exponent); + p->setCoefficient(exponent-1, coefficient * exponent); } return p; @@ -337,7 +338,6 @@ namespace oopse { roots.push_back( -fC0 / fC1); return roots; } - break; case 2: { Real fC2 = getCoefficient(2); Real fC1 = getCoefficient(1); @@ -346,13 +346,13 @@ namespace oopse { if (abs(fDiscr) <= fEpsilon) { fDiscr = (Real)0.0; } - + if (fDiscr < (Real)0.0) { // complex roots only return roots; } - + Real fTmp = ((Real)0.5)/fC2; - + if (fDiscr > (Real)0.0) { // 2 real roots fDiscr = sqrt(fDiscr); roots.push_back(fTmp*(-fC1 - fDiscr)); @@ -361,9 +361,7 @@ namespace oopse { roots.push_back(-fTmp * fC1); // 1 real root } } - return roots; - break; - + return roots; case 3: { Real fC3 = getCoefficient(3); Real fC2 = getCoefficient(2); @@ -430,7 +428,6 @@ namespace oopse { } } return roots; - break; case 4: { Real fC4 = getCoefficient(4); Real fC3 = getCoefficient(3); @@ -516,7 +513,6 @@ namespace oopse { } } return roots; - break; default: { DynamicRectMatrix companion = CreateCompanion(); JAMA::Eigenvalue eig(companion); @@ -530,12 +526,9 @@ namespace oopse { } } return roots; - break; } - - return roots; // should be empty if you got here } - + private: PolynomialPairMap polyPairMap_; @@ -629,8 +622,8 @@ namespace oopse { * @return the first derivative of this polynomial */ template - Polynomial getDerivative(const Polynomial& p1) { - Polynomial p(); + Polynomial * getDerivative(const Polynomial& p1) { + Polynomial * p = new Polynomial(); typename Polynomial::const_iterator i; int exponent; @@ -639,7 +632,7 @@ namespace oopse { for (i = p1.begin(); i != p1.end(); ++i) { exponent = i->first; coefficient = i->second; - p.setCoefficient(exponent-1, coefficient * exponent); + p->setCoefficient(exponent-1, coefficient * exponent); } return p; @@ -675,5 +668,5 @@ namespace oopse { typedef Polynomial DoublePolynomial; -} //end namespace oopse +} //end namespace OpenMD #endif //MATH_POLYNOMIAL_HPP