]> git.treefish.org Git - phys/heatbath.git/blobdiff - sim-r.hpp
Simplified rand theta update syntax.
[phys/heatbath.git] / sim-r.hpp
index e9086262fb4955ba5c545fa0eb3b2e297143d68e..c3b68889ffff0684c094de5957ab7f46c2963203 100644 (file)
--- a/sim-r.hpp
+++ b/sim-r.hpp
@@ -15,14 +15,15 @@ public:
   sim(o815 *_O815);
   siteconf* conf;
   unsigned int LSIZE2;
+  double M;
+  double m;
+  neigh *nb;
 
 private:
   void _makeSweep();
   void _newParas();
   gsl_rng* rangsl;
-  neigh *nb;
   void updatePhi (const int& x);
-  double M;
 };
 
 
@@ -50,19 +51,24 @@ void sim::updatePhi (const int& x)
     V += conf[ (*nb)[x*4+nu] ].phi;
 
   conf[x].phi = sqrt(std::log( 1./(1-r) )) / sqrt(M)
-    * complex<double>( cos(theta), sin(theta) )
+    * polar(1.0, theta)
     + V / M;
 }
 
 void sim::_makeSweep() {  
-  for (int ix=0; ix<LSIZE2; ix++)
-    updatePhi(ix);
+  for (int ichecker=0; ichecker<2; ichecker++)
+    for (int it=0; it<O815->comargs.lsize[0]; it++)
+      for (int iy=(it+ichecker)%2; iy<O815->comargs.lsize[1]; iy+=2)
+       updatePhi( it*O815->comargs.lsize[1] + iy );
 }
 
 void sim::_newParas() {
+  m = (*O815->paraQ)["mass"];
   M = pow( (*O815->paraQ)["mass"], 2 ) + 4;
   *log << "SIM: Resetting fields." << endl << flush;
-  memset(conf, 0, sizeof(siteconf)*LSIZE2);
+
+  for (int ix=0; ix<LSIZE2; ix++)
+    conf[ix].phi = 1;
 }
 
 #endif