From 0c668bf46aabe20421227d59fe347c1828fa8932 Mon Sep 17 00:00:00 2001 From: James Harrison Date: Tue, 7 Nov 2017 14:46:39 +0000 Subject: [PATCH] QedFVol: Write to output files from one process only. --- extras/Hadrons/Modules/MScalar/ChargedProp.cc | 136 +++++++----------- extras/Hadrons/Modules/MScalar/ScalarVP.cc | 126 ++++++++++------ 2 files changed, 134 insertions(+), 128 deletions(-) diff --git a/extras/Hadrons/Modules/MScalar/ChargedProp.cc b/extras/Hadrons/Modules/MScalar/ChargedProp.cc index 1b901bf1..33c3d4dd 100644 --- a/extras/Hadrons/Modules/MScalar/ChargedProp.cc +++ b/extras/Hadrons/Modules/MScalar/ChargedProp.cc @@ -151,23 +151,25 @@ void TChargedProp::execute(void) buf = GFSrc; momD1(buf, fft); buf = -G*buf; - fft.FFT_all_dim(propQ, buf, FFT::backward); + fft.FFT_dim(propQ, buf, env().getNd()-1, FFT::backward); // G*momD1*G*momD1*G*F*Src (here buf = G*momD1*G*F*Src) buf = -buf; momD1(buf, fft); propSun = G*buf; - fft.FFT_all_dim(propSun, propSun, FFT::backward); + fft.FFT_dim(propSun, propSun, env().getNd()-1, FFT::backward); // -G*momD2*G*F*Src (momD2 = F*D2*Finv) buf = GFSrc; momD2(buf, fft); buf = -G*buf; - fft.FFT_all_dim(propTad, buf, FFT::backward); - - // full charged scalar propagator - prop = (*prop0_) + q*propQ + q*q*propSun + q*q*propTad; + fft.FFT_dim(propTad, buf, env().getNd()-1, FFT::backward); + // full charged scalar propagator + buf = GFSrc; + fft.FFT_dim(buf, buf, env().getNd()-1, FFT::backward); + prop = buf + q*propQ + q*q*propSun + q*q*propTad; + // OUTPUT IF NECESSARY if (!par().output.empty()) { @@ -183,95 +185,63 @@ void TChargedProp::execute(void) LOG(Message) << "Saving (" << par().outputMom[i_p] << ") momentum projection to '" << filename << "'..." << std::endl; - CorrWriter writer(filename); - std::vector vecBuf; - std::vector result; + // std::vector vecBuf; + std::vector result, result0, resultQ, resultSun, resultTad; + result.resize(env().getGrid()->_fdimensions[env().getNd()-1]); + result0.resize(env().getGrid()->_fdimensions[env().getNd()-1]); + resultQ.resize(env().getGrid()->_fdimensions[env().getNd()-1]); + resultSun.resize(env().getGrid()->_fdimensions[env().getNd()-1]); + resultTad.resize(env().getGrid()->_fdimensions[env().getNd()-1]); - write(writer, "charge", q); - write(writer, "mass", par().mass); + TComplex site; + std::vector whichmom; + whichmom.resize(env().getNd()); - // Write full propagator - buf = prop; for (unsigned int j = 0; j < env().getNd()-1; ++j) { - for (unsigned int momcount = 0; momcount < mom[j]; ++momcount) - { - buf = buf*adj(*phase_[j]); - } + whichmom[j] = mom[j]; } - sliceSum(buf, vecBuf, Tp); - result.resize(vecBuf.size()); - for (unsigned int t = 0; t < vecBuf.size(); ++t) - { - result[t] = TensorRemove(vecBuf[t]); - } - write(writer, "prop", result); - // Write free propagator - buf = *prop0_; - for (unsigned int j = 0; j < env().getNd()-1; ++j) + for (unsigned int t = 0; t < env().getGrid()->_fdimensions[env().getNd()-1]; ++t) { - for (unsigned int momcount = 0; momcount < mom[j]; ++momcount) - { - buf = buf*adj(*phase_[j]); - } + whichmom[env().getNd()-1] = t; + // Write full propagator + peekSite(site, prop, whichmom); + result[t]=TensorRemove(site); + // Write free propagator + peekSite(site, buf, whichmom); + result0[t]=TensorRemove(site); + // Write propagator O(q) term + peekSite(site, propQ, whichmom); + resultQ[t]=TensorRemove(site); + // Write propagator sunset term + peekSite(site, propSun, whichmom); + resultSun[t]=TensorRemove(site); + // Write propagator tadpole term + peekSite(site, propTad, whichmom); + resultTad[t]=TensorRemove(site); } - sliceSum(buf, vecBuf, Tp); - for (unsigned int t = 0; t < vecBuf.size(); ++t) + + if (env().getGrid()->IsBoss()) { - result[t] = TensorRemove(vecBuf[t]); + CorrWriter writer(filename); + write(writer, "charge", q); + write(writer, "mass", par().mass); + write(writer, "prop", result); + write(writer, "prop_0", result0); + write(writer, "prop_Q", resultQ); + write(writer, "prop_Sun", resultSun); + write(writer, "prop_Tad", resultTad); } - write(writer, "prop_0", result); - - // Write propagator O(q) term - buf = propQ; - for (unsigned int j = 0; j < env().getNd()-1; ++j) - { - for (unsigned int momcount = 0; momcount < mom[j]; ++momcount) - { - buf = buf*adj(*phase_[j]); - } - } - sliceSum(buf, vecBuf, Tp); - for (unsigned int t = 0; t < vecBuf.size(); ++t) - { - result[t] = TensorRemove(vecBuf[t]); - } - write(writer, "prop_Q", result); - - // Write propagator sunset term - buf = propSun; - for (unsigned int j = 0; j < env().getNd()-1; ++j) - { - for (unsigned int momcount = 0; momcount < mom[j]; ++momcount) - { - buf = buf*adj(*phase_[j]); - } - } - sliceSum(buf, vecBuf, Tp); - for (unsigned int t = 0; t < vecBuf.size(); ++t) - { - result[t] = TensorRemove(vecBuf[t]); - } - write(writer, "prop_Sun", result); - - // Write propagator tadpole term - buf = propTad; - for (unsigned int j = 0; j < env().getNd()-1; ++j) - { - for (unsigned int momcount = 0; momcount < mom[j]; ++momcount) - { - buf = buf*adj(*phase_[j]); - } - } - sliceSum(buf, vecBuf, Tp); - for (unsigned int t = 0; t < vecBuf.size(); ++t) - { - result[t] = TensorRemove(vecBuf[t]); - } - write(writer, "prop_Tad", result); } } + + std::vector mask(env().getNd(),1); + mask[env().getNd()-1] = 0; + fft.FFT_dim_mask(prop, prop, mask, FFT::backward); + fft.FFT_dim_mask(propQ, propQ, mask, FFT::backward); + fft.FFT_dim_mask(propSun, propSun, mask, FFT::backward); + fft.FFT_dim_mask(propTad, propTad, mask, FFT::backward); } void TChargedProp::momD1(ScalarField &s, FFT &fft) diff --git a/extras/Hadrons/Modules/MScalar/ScalarVP.cc b/extras/Hadrons/Modules/MScalar/ScalarVP.cc index 297a823d..b8cdb7e3 100644 --- a/extras/Hadrons/Modules/MScalar/ScalarVP.cc +++ b/extras/Hadrons/Modules/MScalar/ScalarVP.cc @@ -173,19 +173,22 @@ void TScalarVP::execute(void) + "_diagrams." + std::to_string(env().getTrajectory()); - CorrWriter *writer_i = new CorrWriter(filename); - writer.push_back(writer_i); - CorrWriter *writer0_i = new CorrWriter(filename0); - writer0.push_back(writer0_i); - CorrWriter *writerD_i = new CorrWriter(filenameD); - writerD.push_back(writerD_i); + if (env().getGrid()->IsBoss()) + { + CorrWriter *writer_i = new CorrWriter(filename); + writer.push_back(writer_i); + CorrWriter *writer0_i = new CorrWriter(filename0); + writer0.push_back(writer0_i); + CorrWriter *writerD_i = new CorrWriter(filenameD); + writerD.push_back(writerD_i); - write(*writer[i_p], "charge", q); - write(*writer[i_p], "mass", static_cast(env().getModule(par().scalarProp))->par().mass); - write(*writer0[i_p], "charge", 0.0); - write(*writer0[i_p], "mass", static_cast(env().getModule(par().scalarProp))->par().mass); - write(*writerD[i_p], "charge", q); - write(*writerD[i_p], "mass", static_cast(env().getModule(par().scalarProp))->par().mass); + write(*writer[i_p], "charge", q); + write(*writer[i_p], "mass", static_cast(env().getModule(par().scalarProp))->par().mass); + write(*writer0[i_p], "charge", 0.0); + write(*writer0[i_p], "mass", static_cast(env().getModule(par().scalarProp))->par().mass); + write(*writerD[i_p], "charge", q); + write(*writerD[i_p], "mass", static_cast(env().getModule(par().scalarProp))->par().mass); + } // Calculate phase factors vpPhase = Complex(1.0,0.0); @@ -231,9 +234,12 @@ void TScalarVP::execute(void) { result[t] = TensorRemove(vecBuf[t]); } - write(*writer0[i_p], - "Pi_"+std::to_string(mu)+"_"+std::to_string(nu), - result); + if (env().getGrid()->IsBoss()) + { + write(*writer0[i_p], + "Pi_"+std::to_string(mu)+"_"+std::to_string(nu), + result); + } } } @@ -259,9 +265,12 @@ void TScalarVP::execute(void) { result[t] = TensorRemove(vecBuf[t]); } - write(*writerD[i_p], - "Pi_exchange_"+std::to_string(mu)+"_"+std::to_string(nu), - result); + if (env().getGrid()->IsBoss()) + { + write(*writerD[i_p], + "Pi_exchange_"+std::to_string(mu)+"_"+std::to_string(nu), + result); + } } } @@ -287,9 +296,12 @@ void TScalarVP::execute(void) { result[t] = TensorRemove(vecBuf[t]); } - write(*writerD[i_p], - "Pi_alpha2_"+std::to_string(mu)+"_"+std::to_string(nu), - result); + if (env().getGrid()->IsBoss()) + { + write(*writerD[i_p], + "Pi_alpha2_"+std::to_string(mu)+"_"+std::to_string(nu), + result); + } } } @@ -313,9 +325,12 @@ void TScalarVP::execute(void) { result[t] = TensorRemove(vecBuf[t]); } - write(*writerD[i_p], - "Pi_sunset_unshifted_"+std::to_string(mu)+"_"+std::to_string(nu), - result); + if (env().getGrid()->IsBoss()) + { + write(*writerD[i_p], + "Pi_sunset_unshifted_"+std::to_string(mu)+"_"+std::to_string(nu), + result); + } } } @@ -338,9 +353,12 @@ void TScalarVP::execute(void) { result[t] = TensorRemove(vecBuf[t]); } - write(*writerD[i_p], - "Pi_sunset_shifted_"+std::to_string(mu)+"_"+std::to_string(nu), - result); + if (env().getGrid()->IsBoss()) + { + write(*writerD[i_p], + "Pi_sunset_shifted_"+std::to_string(mu)+"_"+std::to_string(nu), + result); + } } } @@ -364,9 +382,12 @@ void TScalarVP::execute(void) { result[t] = TensorRemove(vecBuf[t]); } - write(*writerD[i_p], - "Pi_tadpole_unshifted_"+std::to_string(mu)+"_"+std::to_string(nu), - result); + if (env().getGrid()->IsBoss()) + { + write(*writerD[i_p], + "Pi_tadpole_unshifted_"+std::to_string(mu)+"_"+std::to_string(nu), + result); + } } } @@ -389,9 +410,12 @@ void TScalarVP::execute(void) { result[t] = TensorRemove(vecBuf[t]); } - write(*writerD[i_p], - "Pi_tadpole_shifted_"+std::to_string(mu)+"_"+std::to_string(nu), - result); + if (env().getGrid()->IsBoss()) + { + write(*writerD[i_p], + "Pi_tadpole_shifted_"+std::to_string(mu)+"_"+std::to_string(nu), + result); + } } } @@ -418,9 +442,12 @@ void TScalarVP::execute(void) { result[t] = TensorRemove(vecBuf[t]); } - write(*writerD[i_p], - "Pi_sourcetadpole_"+std::to_string(mu)+"_"+std::to_string(nu), - result); + if (env().getGrid()->IsBoss()) + { + write(*writerD[i_p], + "Pi_sourcetadpole_"+std::to_string(mu)+"_"+std::to_string(nu), + result); + } } } @@ -446,9 +473,12 @@ void TScalarVP::execute(void) { result[t] = TensorRemove(vecBuf[t]); } - write(*writerD[i_p], - "Pi_sinktadpole_"+std::to_string(mu)+"_"+std::to_string(nu), - result); + if (env().getGrid()->IsBoss()) + { + write(*writerD[i_p], + "Pi_sinktadpole_"+std::to_string(mu)+"_"+std::to_string(nu), + result); + } } } @@ -464,9 +494,12 @@ void TScalarVP::execute(void) { result[t] = TensorRemove(vecBuf[t]); } - write(*writer[i_p], - "Pi_"+std::to_string(mu)+"_"+std::to_string(nu), - result); + if (env().getGrid()->IsBoss()) + { + write(*writer[i_p], + "Pi_"+std::to_string(mu)+"_"+std::to_string(nu), + result); + } } } } @@ -475,9 +508,12 @@ void TScalarVP::execute(void) { for (unsigned int i_p = 0; i_p < par().outputMom.size(); ++i_p) { - delete writer[i_p]; - delete writer0[i_p]; - delete writerD[i_p]; + if (env().getGrid()->IsBoss()) + { + delete writer[i_p]; + delete writer0[i_p]; + delete writerD[i_p]; + } } } }