From: Alexander Schmidt Date: Fri, 22 Nov 2013 20:39:25 +0000 (+0100) Subject: Added observable phip2. X-Git-Url: http://git.treefish.org/~alex/phys/heatbath.git/commitdiff_plain/0f8b9f29fdcc92049803e88be1c9524d6d0d6fab?ds=sidebyside Added observable phip2. --- diff --git a/heatbath.cpp b/heatbath.cpp index 13b6f51..c95ecf5 100644 --- a/heatbath.cpp +++ b/heatbath.cpp @@ -15,14 +15,15 @@ #error NO UPDATE-ALGORITHM DEFINED! #endif -#include "obs_phi2.hpp" -#include "obs_phi2_hist.hpp" - o815 *O815; sim *Sim; const complex _i_ = complex(0.0,1.0); +#include "obs_phi2.hpp" +#include "obs_phi2_hist.hpp" +#include "obs_phip2_hist.hpp" + o815::comoption specOps[] = { { "mass", required_argument, NULL, 'm', "set mass", "min:max:inc" }, { "", 0, NULL, 0, "", "" } @@ -54,6 +55,10 @@ void parseLonelyArgs() *O815->out->log << "MASTER: registered observable: phi2_hist" << endl << flush; O815->observables.push_back(new obs_phi2_hist(O815)); } + else if ( strcmp(*lonit, "phip2_hist") == 0 ) { + *O815->out->log << "MASTER: registered observable: phi2p_hist" << endl << flush; + O815->observables.push_back(new obs_phip2_hist(O815)); + } } } @@ -70,6 +75,8 @@ int main (int argc, char *argv[]) O815->Sim = new sim(O815); parseLonelyArgs(); + + cout << "here" << endl; O815->mainLoop(); diff --git a/obs_phi2_hist.hpp b/obs_phi2_hist.hpp index b97d38c..63e83ad 100644 --- a/obs_phi2_hist.hpp +++ b/obs_phi2_hist.hpp @@ -29,7 +29,7 @@ private: }; obs_phi2_hist::obs_phi2_hist(o815 *_O815) : o815::obs("phi2", - _O815->paraQ->getParaNames() + "nthstep:phi2:phi2_err", + _O815->paraQ->getParaNames() + "nthstep:phi2", _O815, sizeof(obsmem), "_hist") { OM = (obsmem*)obsMem; Sim = (sim*)O815->Sim; diff --git a/obs_phip2_hist.hpp b/obs_phip2_hist.hpp new file mode 100644 index 0000000..64b82e8 --- /dev/null +++ b/obs_phip2_hist.hpp @@ -0,0 +1,71 @@ +#ifndef OBS_PHIP2_HIST_HPP +#define OBS_PHIP2_HIST_HPP + +#include "latlib/o815/o815.h" + +#include "latlib/writeout.h" + +#include "latlib/obstat.hpp" + +#include + +using namespace std; + +class obs_phip2_hist : public o815::obs { + +public: + struct obsmem { + double *phip2; + }; + obs_phip2_hist(o815 *_O815); + +private: + void _start() {} + void _meas(bool loadedobs, const int& nthmeas); + void _finish() {} + obsmem OM; + sim *Sim; +}; + +obs_phip2_hist::obs_phip2_hist(o815 *_O815) : o815::obs("phip2", + _O815->paraQ->getParaNames() + "nthstep:kpt:kpx:phip2", _O815, + sizeof(double)*(_O815->comargs.lsize[0]+1)*(_O815->comargs.lsize[1]+1), + "_hist") { + OM.phip2 = (double*)obsMem; + Sim = (sim*)O815->Sim; +} + +void obs_phip2_hist::_meas(bool loadedobs, const int& nthmeas) { + if (!loadedobs) { + for (int kpt = 0; kpt <= O815->comargs.lsize[0]; kpt++) + for (int kpx = 0; kpx <= O815->comargs.lsize[1]; kpx++) { + double ppt = 2.*M_PI/O815->comargs.lsize[0] * kpt; + double ppx = 2.*M_PI/O815->comargs.lsize[1] * kpx; + + OM.phip2[ kpt * ( O815->comargs.lsize[1] + 1 ) + kpx ] = 0; + + for (int ixt = 0; ixt < O815->comargs.lsize[0]; ixt++) + for (int ixx = 0; ixx < O815->comargs.lsize[1]; ixx++) + for (int ixpt = 0; ixpt < O815->comargs.lsize[0]; ixpt++) + for (int ixpx = 0; ixpx < O815->comargs.lsize[1]; ixpx++) + OM.phip2[ kpt * ( O815->comargs.lsize[1] + 1 ) + kpx ] += real( conj( Sim->conf[ ixt*O815->comargs.lsize[1] + ixx ].phi ) + * Sim->conf[ ixpt*O815->comargs.lsize[1] + ixpx ].phi + * exp ( _i_*(double)ppx*(double)(ixx-ixpx) + _i_*(double)ppt*(double)(ixt-ixpt) ) ); + + OM.phip2[ kpt * ( O815->comargs.lsize[1] + 1 ) + kpx ] /= Sim->LSIZE2; + } + } + + for (int kpt = 0; kpt <= O815->comargs.lsize[0]; kpt++) + for (int kpx = 0; kpx <= O815->comargs.lsize[1]; kpx++) { + double ppt = 2.*M_PI/O815->comargs.lsize[0] * kpt; + double ppx = 2.*M_PI/O815->comargs.lsize[1] * kpx; + + *out << O815->paraQ->getParaVals(); + *out << "\t" << ( Sim->nequi + (nthmeas+1)*Sim->nskip ); + *out << "\t" << kpt << "\t" << kpx; + *out << "\t" << OM.phip2[ kpt * ( O815->comargs.lsize[1] + 1 ) + kpx ] - 1./(ppt*ppt + ppx*ppx + Sim->m*Sim->m) << endl; + } +}; + +#endif diff --git a/sim-1mr.hpp b/sim-1mr.hpp index 5565700..beadd7d 100644 --- a/sim-1mr.hpp +++ b/sim-1mr.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; }; @@ -65,6 +66,7 @@ void sim::_makeSweep() { } void sim::_newParas() { + m = (*O815->paraQ)["mass"]; M = pow( (*O815->paraQ)["mass"], 2 ) + 4; *log << "SIM: Resetting fields." << endl << flush; diff --git a/sim-nor.hpp b/sim-nor.hpp index a15547b..b67f8a7 100644 --- a/sim-nor.hpp +++ b/sim-nor.hpp @@ -17,14 +17,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; int updatePhi (const int& x); - double M; double SofPhi(const int& x, const complex& phix); double rhoPhi(const int& x, const complex& phixCandidate); }; @@ -52,6 +53,7 @@ void sim::_makeSweep() { } void sim::_newParas() { + m = (*O815->paraQ)["mass"]; M = pow( (*O815->paraQ)["mass"], 2 ) + 4; *log << "SIM: Resetting fields." << endl << flush; diff --git a/sim-r.hpp b/sim-r.hpp index c49f736..0cbce5e 100644 --- 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; }; @@ -62,6 +63,7 @@ void sim::_makeSweep() { } void sim::_newParas() { + m = (*O815->paraQ)["mass"]; M = pow( (*O815->paraQ)["mass"], 2 ) + 4; *log << "SIM: Resetting fields." << endl << flush;