public:
struct obsmem {
- double *phip2;
+ double phip2[2];
};
obs_phip2_hist(o815 *_O815);
void _start() {}
void _meas(bool loadedobs, const int& nthmeas);
void _finish() {}
- obsmem OM;
+ 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),
+ _O815->paraQ->getParaNames() + "nthstep:iruv:phip2absdiffequi", _O815,
+ sizeof(obsmem),
"_hist") {
- OM.phip2 = (double*)obsMem;
+ OM = (obsmem*)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;
+ for (int kpiruv=0; kpiruv<2; kpiruv++) {
+ double ppt = 2.*M_PI/O815->comargs.lsize[0] * ( 0 + kpiruv * O815->comargs.lsize[0]/2 ) ;
+ double ppx = 2.*M_PI/O815->comargs.lsize[1] * ( 0 + kpiruv * O815->comargs.lsize[1]/2 );
- OM.phip2[ kpt * ( O815->comargs.lsize[1] + 1 ) + kpx ] = 0;
+ OM->phip2[ kpiruv ] = 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) ) );
+ 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[ kpiruv ] += 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;
- }
+ OM->phip2[ kpiruv ] /= 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;
+ for (int kpiruv=0; kpiruv<2; kpiruv++) {
+ double ppt = 2.*M_PI/O815->comargs.lsize[0] * ( 0 + kpiruv * O815->comargs.lsize[0]/2 ) ;
+ double ppx = 2.*M_PI/O815->comargs.lsize[1] * ( 0 + kpiruv * O815->comargs.lsize[1]/2 );
- *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;
- }
+ *out << O815->paraQ->getParaVals();
+ *out << "\t" << ( Sim->nequi + (nthmeas+1)*Sim->nskip );
+ *out << "\t" << kpiruv;
+ *out << "\t" << abs( OM->phip2[ kpiruv ] - 1./(ppt*ppt + ppx*ppx + Sim->m*Sim->m) ) << endl;
+ }
};
#endif