X-Git-Url: http://git.treefish.org/~alex/phys/heatbath.git/blobdiff_plain/b29c28bcd466d938ffd95887abef67dc1491bd50..HEAD:/sim-nonmetro.hpp?ds=inline diff --git a/sim-nonmetro.hpp b/sim-nonmetro.hpp index 9eb818b..b72104f 100644 --- a/sim-nonmetro.hpp +++ b/sim-nonmetro.hpp @@ -53,20 +53,24 @@ void sim::updatePhi (const int& x) for (int nu=0; nu<4; nu++) V += conf[ (*nb)[x*4+nu] ].phi; -#if defined(ALGORITHM_AHBMHB) || defined(ALGORITHM_AHBMOR) + Y = sqrt(M) * conf[x].phi - V / sqrt(M); + +#if defined(ALGORITHM_AHBMHB) || defined(ALGORITHM_AHBMOR) || defined(ALGORITHM_AHBM0) Y = polar( abs(Y), gsl_rng_uniform(rangsl) * 2*M_PI ); -#elif defined(ALGORITHM_AORMHB) || defined(ALGORITHM_AORMOR) +#elif defined(ALGORITHM_AORMHB) || defined(ALGORITHM_AORMOR) || defined(ALGORITHM_AORM0) const double V2diff = pow(real(V), 2) - pow(imag(V), 2); const double Vprod = real(V)*imag(V); Y = complex ( + real(Y) * V2diff + 2 * imag(Y) * Vprod, - imag(Y) * V2diff + 2 * real(Y) * Vprod ) / norm(V); #endif -#if defined(ALGORITHM_AHBMHB) || defined(ALGORITHM_AORMHB) +#if defined(ALGORITHM_AHBMHB) || defined(ALGORITHM_AORMHB) || defined(ALGORITHM_A0MHB) Y = polar( magnYOfR( gsl_rng_uniform(rangsl) ), arg(Y) ); -#elif defined(ALGORITHM_AHBMOR) || defined(ALGORITHM_AORMOR) - Y = polar( magnYOfR( 1 - exp(-norm(Y)) ), arg(Y) ); //!!!! +#elif defined(ALGORITHM_AHBMOR) || defined(ALGORITHM_AORMOR) || defined(ALGORITHM_A0MOR) + Y = polar( magnYOfR( exp( -norm(Y) ) ), arg(Y) ); #endif + + conf[x].phi = Y / sqrt(M) + V / M; } void sim::_makeSweep() { @@ -82,7 +86,7 @@ void sim::_newParas() { *log << "SIM: Resetting fields." << endl << flush; for (int ix=0; ix