Sandia Home Sandia Home
Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members | Related Pages

APPSPACK_Cache_Point.cpp

Go to the documentation of this file.
00001 // $Id: APPSPACK_Cache_Point.cpp,v 1.8 2003/11/26 16:27:11 tgkolda Exp $ 00002 // $Source: /space/CVS-Acro/acro/packages/appspack/appspack/src/APPSPACK_Cache_Point.cpp,v $ 00003 00004 //@HEADER 00005 // ************************************************************************ 00006 // 00007 // APPSPACK: Asynchronous Parallel Pattern Search 00008 // Copyright (2003) Sandia Corporation 00009 // 00010 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive 00011 // license for use of this work by or on behalf of the U.S. Government. 00012 // 00013 // This library is free software; you can redistribute it and/or modify 00014 // it under the terms of the GNU Lesser General Public License as 00015 // published by the Free Software Foundation; either version 2.1 of the 00016 // License, or (at your option) any later version. 00017 // 00018 // This library is distributed in the hope that it will be useful, but 00019 // WITHOUT ANY WARRANTY; without even the implied warranty of 00020 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00021 // Lesser General Public License for more details. 00022 // 00023 // You should have received a copy of the GNU Lesser General Public 00024 // License along with this library; if not, write to the Free Software 00025 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 00026 // USA. . 00027 // 00028 // Questions? Contact Tammy Kolda (tgkolda@sandia.gov) 00029 // 00030 // ************************************************************************ 00031 //@HEADER 00032 00038 #include "APPSPACK_Cache_Point.hpp" 00039 00040 APPSPACK::Vector APPSPACK::Cache::Point::scaling(0); 00041 double APPSPACK::Cache::Point::tolerance = 0; 00042 00043 APPSPACK::Cache::Point::Point() : 00044 xPtr(NULL), 00045 x(*xPtr), 00046 f() 00047 { 00048 } 00049 00050 APPSPACK::Cache::Point::Point(const Vector& x_in) : 00051 xPtr(NULL), 00052 x(x_in), 00053 f() 00054 { 00055 checkSize(); 00056 } 00057 00058 APPSPACK::Cache::Point::Point(const Vector& x_in, const Value& f_in) : 00059 xPtr(NULL), 00060 x(x_in), 00061 f(f_in) 00062 { 00063 checkSize(); 00064 } 00065 00066 APPSPACK::Cache::Point::Point(const Point& source) : 00067 xPtr(new Vector(source.x)), 00068 x(*xPtr), 00069 f(source.f) 00070 { 00071 checkSize(); 00072 } 00073 00074 APPSPACK::Cache::Point::~Point() 00075 { 00076 delete xPtr; 00077 } 00078 00079 void APPSPACK::Cache::Point::copyData(const Point& source) 00080 { 00081 f = source.f; 00082 } 00083 00084 const APPSPACK::Value& APPSPACK::Cache::Point::getF() 00085 { 00086 return f; 00087 } 00088 00089 bool APPSPACK::Cache::Point::operator>(const Point& pt) const 00090 { 00091 checkSize(pt); 00092 00093 int n = x.size(); 00094 00095 for(int i = 0; i < n; i++) 00096 { 00097 if ( fabs(x[i] - pt.x[i]) > (scaling[i] * tolerance) ) 00098 { 00099 // unequal with respect to tolerance 00100 00101 if ( (x[i] - pt.x[i]) > (scaling[i] * tolerance) ) 00102 { 00103 // this > other 00104 return true; 00105 } 00106 else 00107 { 00108 // this < other 00109 return false; 00110 } 00111 00112 } 00113 } 00114 00115 // this == other 00116 return false; 00117 } 00118 00119 bool APPSPACK::Cache::Point::operator<(const Point& pt) const 00120 { 00121 checkSize(pt); 00122 00123 int n = x.size(); 00124 00125 for(int i = 0; i < n; i++) 00126 { 00127 if ( fabs(x[i] - pt.x[i]) > (scaling[i] * tolerance) ) // unequal 00128 { 00129 if ( (pt.x[i] - x[i]) > (scaling[i] * tolerance) ) // x > pt.x 00130 { 00131 // this < other 00132 return true; 00133 } 00134 else 00135 { 00136 // this > other 00137 return false; 00138 } 00139 } 00140 } 00141 00142 // this == other 00143 return false; 00144 } 00145 00146 bool APPSPACK::Cache::Point::operator!=(const Point& pt) const 00147 { 00148 checkSize(pt); 00149 00150 int n = x.size(); 00151 00152 for(int i = 0; i < n; i++) 00153 { 00154 if ( fabs(pt.x[i] - x[i]) > (scaling[i] * tolerance)) 00155 { 00156 // this != other 00157 return true; 00158 } 00159 } 00160 00161 // this == other 00162 return false; 00163 } 00164 00165 void APPSPACK::Cache::Point::setStaticScaling(const Vector& scaling_in) 00166 { 00167 scaling = scaling_in; 00168 } 00169 00170 void APPSPACK::Cache::Point::setStaticTolerance(double tolerance_in) 00171 { 00172 tolerance = tolerance_in; 00173 } 00174 00175 00176 // PRIVATE 00177 void APPSPACK::Cache::Point::checkSize() const 00178 { 00179 if (x.size() != scaling.size()) 00180 { 00181 cout << "APPSPACK::Cache::Point::checksize - scaling size mismatch" << endl; 00182 throw "APPSPACK Error"; 00183 } 00184 } 00185 00186 // PRIVATE 00187 void APPSPACK::Cache::Point::checkSize(const Point& pt) const 00188 { 00189 if (x.size() != pt.x.size()) 00190 { 00191 cout << "APPSPACK::Cache::Point::checksize - point size mismatch" << endl; 00192 throw "APPSPACK Error"; 00193 } 00194 } 00195

 

© Sandia Corporation | Site Contact | Privacy and Security

Generated on Wed Dec 14 18:41:04 2005 for APPSPACK 4.0.2 by doxygen 1.3.8 written by Dimitri van Heesch, © 1997-2002