eoRealAtomXover.h

00001 
00023 //-----------------------------------------------------------------------------
00024 
00031 #ifndef _eoRealAtomXover_H
00032 #define _eoRealAtomXover_H
00033 
00034 #include <utils/eoRNG.h>
00035 
00036 #include <eoOp.h>
00037 
00041 class eoDoubleExchange: public eoBinOp<double>
00042 {
00043 public:
00047   eoDoubleExchange() {}
00048 
00050   virtual std::string className() const { return "eoDoubleExchange"; }
00051 
00055   bool operator()(double& r1, const double& r2) 
00056   {
00057     if (eo::rng.flip())
00058       if (r1 != r2)        // if r1 == r2 you must return false
00059         {
00060           r1 = r2;
00061           return true;
00062         }
00063     return false;
00064   }
00065   
00066 };
00067 
00071 class eoDoubleIntermediate: public eoBinOp<double>
00072 {
00073 public:
00077   eoDoubleIntermediate() {}
00078 
00080   virtual std::string className() const { return "eoDoubleIntermediate"; }
00081 
00085   bool operator()(double& r1, const double& r2) 
00086   {
00087     double alpha = eo::rng.uniform();
00088     r1 = alpha * r2 + (1-alpha) * r1;
00089     return true;
00090   }
00091   
00092 };
00093 
00094 #endif

Generated on Thu Apr 19 11:02:27 2007 for EO by  doxygen 1.4.7