From b29c28bcd466d938ffd95887abef67dc1491bd50 Mon Sep 17 00:00:00 2001 From: Alexander Schmidt Date: Wed, 27 Nov 2013 22:42:18 +0100 Subject: [PATCH] Renamed and redefined algorithms. --- .gitignore | 5 ++ CMakeLists.txt | 38 ++++++---------- heatbath.cpp | 40 ++++++++-------- sim-1mr-.hpp | 76 ------------------------------- sim-1mr.hpp | 77 ------------------------------- sim-nor.hpp => sim-metro.hpp | 0 sim-1mr+.hpp => sim-nonmetro.hpp | 29 +++++++----- sim-r+.hpp | 78 -------------------------------- sim-r-.hpp | 73 ------------------------------ sim-r.hpp | 74 ------------------------------ 10 files changed, 57 insertions(+), 433 deletions(-) delete mode 100644 sim-1mr-.hpp delete mode 100644 sim-1mr.hpp rename sim-nor.hpp => sim-metro.hpp (100%) rename sim-1mr+.hpp => sim-nonmetro.hpp (68%) delete mode 100644 sim-r+.hpp delete mode 100644 sim-r-.hpp delete mode 100644 sim-r.hpp diff --git a/.gitignore b/.gitignore index f851604..814f08c 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,8 @@ heatbath-1mr+ heatbath-1mr- heatbath-r- heatbath-r+ +heatbath-AhbMhb +heatbath-AhbMor +heatbath-AorMor +heatbath-AorMhb +heatbath-metro diff --git a/CMakeLists.txt b/CMakeLists.txt index 4466417..d631271 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,30 +16,22 @@ SET(CMAKE_BUILD_TYPE Release) add_subdirectory(latlib) -add_executable(heatbath-nor heatbath.cpp) -set_target_properties(heatbath-nor PROPERTIES COMPILE_DEFINITIONS "ALGORITHM_NOR") -target_link_libraries(heatbath-nor o815 gsl gslcblas lat_neigh) +add_executable(heatbath-metro heatbath.cpp) +set_target_properties(heatbath-metro PROPERTIES COMPILE_DEFINITIONS "ALGORITHM_METRO") +target_link_libraries(heatbath-metro o815 gsl gslcblas lat_neigh) -add_executable(heatbath-r heatbath.cpp) -set_target_properties(heatbath-r PROPERTIES COMPILE_DEFINITIONS "ALGORITHM_R") -target_link_libraries(heatbath-r o815 gsl gslcblas lat_neigh) +add_executable(heatbath-AhbMhb heatbath.cpp) +set_target_properties(heatbath-AhbMhb PROPERTIES COMPILE_DEFINITIONS "ALGORITHM_AHBMHB") +target_link_libraries(heatbath-AhbMhb o815 gsl gslcblas lat_neigh) -add_executable(heatbath-1mr heatbath.cpp) -set_target_properties(heatbath-1mr PROPERTIES COMPILE_DEFINITIONS "ALGORITHM_1MR") -target_link_libraries(heatbath-1mr o815 gsl gslcblas lat_neigh) +add_executable(heatbath-AhbMor heatbath.cpp) +set_target_properties(heatbath-AhbMor PROPERTIES COMPILE_DEFINITIONS "ALGORITHM_AHBMOR") +target_link_libraries(heatbath-AhbMor o815 gsl gslcblas lat_neigh) -add_executable(heatbath-1mr+ heatbath.cpp) -set_target_properties(heatbath-1mr+ PROPERTIES COMPILE_DEFINITIONS "ALGORITHM_1MRPLUS") -target_link_libraries(heatbath-1mr+ o815 gsl gslcblas lat_neigh) +add_executable(heatbath-AorMhb heatbath.cpp) +set_target_properties(heatbath-AorMhb PROPERTIES COMPILE_DEFINITIONS "ALGORITHM_AORMHB") +target_link_libraries(heatbath-AorMhb o815 gsl gslcblas lat_neigh) -add_executable(heatbath-1mr- heatbath.cpp) -set_target_properties(heatbath-1mr- PROPERTIES COMPILE_DEFINITIONS "ALGORITHM_1MRMINUS") -target_link_libraries(heatbath-1mr- o815 gsl gslcblas lat_neigh) - -add_executable(heatbath-r- heatbath.cpp) -set_target_properties(heatbath-r- PROPERTIES COMPILE_DEFINITIONS "ALGORITHM_RMINUS") -target_link_libraries(heatbath-r- o815 gsl gslcblas lat_neigh) - -add_executable(heatbath-r+ heatbath.cpp) -set_target_properties(heatbath-r+ PROPERTIES COMPILE_DEFINITIONS "ALGORITHM_RPLUS") -target_link_libraries(heatbath-r+ o815 gsl gslcblas lat_neigh) +add_executable(heatbath-AorMor heatbath.cpp) +set_target_properties(heatbath-AorMor PROPERTIES COMPILE_DEFINITIONS "ALGORITHM_AORMOR") +target_link_libraries(heatbath-AorMor o815 gsl gslcblas lat_neigh) diff --git a/heatbath.cpp b/heatbath.cpp index 6491da9..9744b33 100644 --- a/heatbath.cpp +++ b/heatbath.cpp @@ -2,31 +2,29 @@ #include "latlib/o815/o815.h" -#ifdef ALGORITHM_NOR -#define ALGORITHM "nor" -#include "sim-nor.hpp" -#elif ALGORITHM_R -#define ALGORITHM "r" -#include "sim-r.hpp" -#elif ALGORITHM_1MR -#define ALGORITHM "1mr" -#include "sim-1mr.hpp" -#elif ALGORITHM_1MRPLUS -#define ALGORITHM "1mr+" -#include "sim-1mr+.hpp" -#elif ALGORITHM_1MRMINUS -#define ALGORITHM "1mr-" -#include "sim-1mr-.hpp" -#elif ALGORITHM_RMINUS -#define ALGORITHM "r-" -#include "sim-r-.hpp" -#elif ALGORITHM_RPLUS -#define ALGORITHM "r+" -#include "sim-r+.hpp" +#ifdef ALGORITHM_METRO +#define ALGORITHM "metro" +#include "sim-metro.hpp" +#elif ALGORITHM_AHBMHB +#include "sim-nonmetro.hpp" +#define ALGORITHM "AhbMhb" +#elif ALGORITHM_AHBMOR +#include "sim-nonmetro.hpp" +#define ALGORITHM "AhbMor" +#elif ALGORITHM_AORMHB +#include "sim-nonmetro.hpp" +#define ALGORITHM "AorMhb" +#elif ALGORITHM_AORMOR +#include "sim-nonmetro.hpp" +#define ALGORITHM "AorMor" #else #error NO UPDATE-ALGORITHM DEFINED! #endif +#ifdef NONMETRO_A_HB +#error SADSADS +#endif + o815 *O815; sim *Sim; diff --git a/sim-1mr-.hpp b/sim-1mr-.hpp deleted file mode 100644 index a7cde92..0000000 --- a/sim-1mr-.hpp +++ /dev/null @@ -1,76 +0,0 @@ -#ifndef SIM_HPP -#define SIM_HPP - -#include -#include -#include - -#include "latlib/neigh.h" - -class sim : public o815::sim { -public: - struct siteconf { - complex phi; - }; - sim(o815 *_O815); - siteconf* conf; - unsigned int LSIZE2; - double M; - double m; - neigh *nb; - -private: - void _makeSweep(); - void _newParas(); - gsl_rng* rangsl; - void updatePhi (const int& x); -}; - - - -sim::sim(o815 *_O815) : o815::sim( _O815, - sizeof(siteconf)* - (_O815->comargs.lsize[0]*_O815->comargs.lsize[1]) ) { - conf = (siteconf*)confMem; - - rangsl = gsl_rng_alloc(gsl_rng_ranlxs0); - gsl_rng_set(rangsl, time(NULL)); - - LSIZE2 = _O815->comargs.lsize[0] * _O815->comargs.lsize[1]; - - nb = new neigh(2, _O815->comargs.lsize[0], _O815->comargs.lsize[1]); -} - -void sim::updatePhi (const int& x) -{ - complex V=0; - - for (int nu=0; nu<4; nu++) - V += conf[ (*nb)[x*4+nu] ].phi; - - const double r = exp( - M * norm(conf[x].phi) - - 1./M * norm(V) - + 2 * real( conf[x].phi * conj(V) ) ); - - conf[x].phi = sqrt(std::log( 1./(1-r) )) / sqrt(M) - * polar( 1.0, arg(conf[x].phi) ) - + V / M; -} - -void sim::_makeSweep() { - for (int ichecker=0; ichecker<2; ichecker++) - for (int it=0; itcomargs.lsize[0]; it++) - for (int iy=(it+ichecker)%2; iycomargs.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; - - for (int ix=0; ix -#include -#include - -#include "latlib/neigh.h" - -class sim : public o815::sim { -public: - struct siteconf { - complex phi; - }; - sim(o815 *_O815); - siteconf* conf; - unsigned int LSIZE2; - double M; - double m; - neigh *nb; - -private: - void _makeSweep(); - void _newParas(); - gsl_rng* rangsl; - void updatePhi (const int& x); -}; - - - -sim::sim(o815 *_O815) : o815::sim( _O815, - sizeof(siteconf)* - (_O815->comargs.lsize[0]*_O815->comargs.lsize[1]) ) { - conf = (siteconf*)confMem; - - rangsl = gsl_rng_alloc(gsl_rng_ranlxs0); - gsl_rng_set(rangsl, time(NULL)); - - LSIZE2 = _O815->comargs.lsize[0] * _O815->comargs.lsize[1]; - - nb = new neigh(2, _O815->comargs.lsize[0], _O815->comargs.lsize[1]); -} - -void sim::updatePhi (const int& x) -{ - const double theta = gsl_rng_uniform(rangsl) * 2*M_PI; - complex V=0; - - for (int nu=0; nu<4; nu++) - V += conf[ (*nb)[x*4+nu] ].phi; - - const double r = exp( - M * norm(conf[x].phi) - - 1./M * norm(V) - + 2 * real( conf[x].phi * conj(V) ) ); - - conf[x].phi = sqrt(std::log( 1./(1-r) )) / sqrt(M) - * polar(1.0, theta) - + V / M; -} - -void sim::_makeSweep() { - for (int ichecker=0; ichecker<2; ichecker++) - for (int it=0; itcomargs.lsize[0]; it++) - for (int iy=(it+ichecker)%2; iycomargs.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; - - for (int ix=0; ix V=0; + complex Y; for (int nu=0; nu<4; nu++) V += conf[ (*nb)[x*4+nu] ].phi; - + +#if defined(ALGORITHM_AHBMHB) || defined(ALGORITHM_AHBMOR) + Y = polar( abs(Y), gsl_rng_uniform(rangsl) * 2*M_PI ); +#elif defined(ALGORITHM_AORMHB) || defined(ALGORITHM_AORMOR) const double V2diff = pow(real(V), 2) - pow(imag(V), 2); const double Vprod = real(V)*imag(V); - conf[x].phi = complex ( + real(conf[x].phi) * V2diff + 2 * imag(conf[x].phi) * Vprod, - - imag(conf[x].phi) * V2diff + 2 * real(conf[x].phi) * Vprod ) / norm(V); - - const double r = exp( - M * norm(conf[x].phi) - - 1./M * norm(V) - + 2 * real( conf[x].phi * conj(V) ) ); + Y = complex ( + real(Y) * V2diff + 2 * imag(Y) * Vprod, + - imag(Y) * V2diff + 2 * real(Y) * Vprod ) / norm(V); +#endif - conf[x].phi = sqrt(std::log( 1./(1-r) )) / sqrt(M) - * polar( 1.0, gsl_rng_uniform(rangsl) * 2*M_PI ) - + V / M; +#if defined(ALGORITHM_AHBMHB) || defined(ALGORITHM_AORMHB) + 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) ); //!!!! +#endif } void sim::_makeSweep() { diff --git a/sim-r+.hpp b/sim-r+.hpp deleted file mode 100644 index 87f719c..0000000 --- a/sim-r+.hpp +++ /dev/null @@ -1,78 +0,0 @@ -#ifndef SIM_HPP -#define SIM_HPP - -#include -#include -#include - -#include "latlib/neigh.h" - -class sim : public o815::sim { -public: - struct siteconf { - complex phi; - }; - sim(o815 *_O815); - siteconf* conf; - unsigned int LSIZE2; - double M; - double m; - neigh *nb; - -private: - void _makeSweep(); - void _newParas(); - gsl_rng* rangsl; - void updatePhi (const int& x); -}; - - - -sim::sim(o815 *_O815) : o815::sim( _O815, - sizeof(siteconf)* - (_O815->comargs.lsize[0]*_O815->comargs.lsize[1]) ) { - conf = (siteconf*)confMem; - - rangsl = gsl_rng_alloc(gsl_rng_ranlxs0); - gsl_rng_set(rangsl, time(NULL)); - - LSIZE2 = _O815->comargs.lsize[0] * _O815->comargs.lsize[1]; - - nb = new neigh(2, _O815->comargs.lsize[0], _O815->comargs.lsize[1]); -} - -void sim::updatePhi (const int& x) -{ - const double r = gsl_rng_uniform(rangsl); - complex V=0; - - for (int nu=0; nu<4; nu++) - V += conf[ (*nb)[x*4+nu] ].phi; - - const double V2diff = pow(real(V), 2) - pow(imag(V), 2); - const double Vprod = real(V)*imag(V); - conf[x].phi = complex ( + real(conf[x].phi) * V2diff + 2 * imag(conf[x].phi) * Vprod, - - imag(conf[x].phi) * V2diff + 2 * real(conf[x].phi) * Vprod ) / norm(V); - - conf[x].phi = sqrt(std::log( 1./(1-r) )) / sqrt(M) - * polar(1.0, gsl_rng_uniform(rangsl) * 2*M_PI) - + V / M; -} - -void sim::_makeSweep() { - for (int ichecker=0; ichecker<2; ichecker++) - for (int it=0; itcomargs.lsize[0]; it++) - for (int iy=(it+ichecker)%2; iycomargs.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; - - for (int ix=0; ix -#include -#include - -#include "latlib/neigh.h" - -class sim : public o815::sim { -public: - struct siteconf { - complex phi; - }; - sim(o815 *_O815); - siteconf* conf; - unsigned int LSIZE2; - double M; - double m; - neigh *nb; - -private: - void _makeSweep(); - void _newParas(); - gsl_rng* rangsl; - void updatePhi (const int& x); -}; - - - -sim::sim(o815 *_O815) : o815::sim( _O815, - sizeof(siteconf)* - (_O815->comargs.lsize[0]*_O815->comargs.lsize[1]) ) { - conf = (siteconf*)confMem; - - rangsl = gsl_rng_alloc(gsl_rng_ranlxs0); - gsl_rng_set(rangsl, time(NULL)); - - LSIZE2 = _O815->comargs.lsize[0] * _O815->comargs.lsize[1]; - - nb = new neigh(2, _O815->comargs.lsize[0], _O815->comargs.lsize[1]); -} - -void sim::updatePhi (const int& x) -{ - const double r = gsl_rng_uniform(rangsl); - complex V=0; - - for (int nu=0; nu<4; nu++) - V += conf[ (*nb)[x*4+nu] ].phi; - - conf[x].phi = sqrt(std::log( 1./(1-r) )) / sqrt(M) - * polar( 1.0, arg(conf[x].phi) ) - + V / M; -} - -void sim::_makeSweep() { - for (int ichecker=0; ichecker<2; ichecker++) - for (int it=0; itcomargs.lsize[0]; it++) - for (int iy=(it+ichecker)%2; iycomargs.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; - - for (int ix=0; ix -#include -#include - -#include "latlib/neigh.h" - -class sim : public o815::sim { -public: - struct siteconf { - complex phi; - }; - sim(o815 *_O815); - siteconf* conf; - unsigned int LSIZE2; - double M; - double m; - neigh *nb; - -private: - void _makeSweep(); - void _newParas(); - gsl_rng* rangsl; - void updatePhi (const int& x); -}; - - - -sim::sim(o815 *_O815) : o815::sim( _O815, - sizeof(siteconf)* - (_O815->comargs.lsize[0]*_O815->comargs.lsize[1]) ) { - conf = (siteconf*)confMem; - - rangsl = gsl_rng_alloc(gsl_rng_ranlxs0); - gsl_rng_set(rangsl, time(NULL)); - - LSIZE2 = _O815->comargs.lsize[0] * _O815->comargs.lsize[1]; - - nb = new neigh(2, _O815->comargs.lsize[0], _O815->comargs.lsize[1]); -} - -void sim::updatePhi (const int& x) -{ - const double r = gsl_rng_uniform(rangsl); - const double theta = gsl_rng_uniform(rangsl) * 2*M_PI; - complex V=0; - - for (int nu=0; nu<4; nu++) - V += conf[ (*nb)[x*4+nu] ].phi; - - conf[x].phi = sqrt(std::log( 1./(1-r) )) / sqrt(M) - * polar(1.0, theta) - + V / M; -} - -void sim::_makeSweep() { - for (int ichecker=0; ichecker<2; ichecker++) - for (int it=0; itcomargs.lsize[0]; it++) - for (int iy=(it+ichecker)%2; iycomargs.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; - - for (int ix=0; ix