From dc8d5b1de30b71e98580fc3183c1ae240b4d2e47 Mon Sep 17 00:00:00 2001 From: roberto-dionisio <32687034+roberto-dionisio@users.noreply.github.com> Date: Sat, 28 Feb 2026 09:10:41 +0100 Subject: [PATCH 01/17] integration of gaussian smearinf for mesons --- projects/generate_confs/parser.ypp | 17 ++++ projects/generate_confs/tokenizer.lpp | 5 ++ src/measures/fermions/mesons.cpp | 109 +++++++++++++++++++++++--- src/measures/fermions/mesons.hpp | 22 +++++- src/operations/smearing/gaussian.hpp | 4 +- 5 files changed, 145 insertions(+), 12 deletions(-) diff --git a/projects/generate_confs/parser.ypp b/projects/generate_confs/parser.ypp index 2dc56615b..0b547a382 100644 --- a/projects/generate_confs/parser.ypp +++ b/projects/generate_confs/parser.ypp @@ -232,6 +232,11 @@ %type operators %token TK_DIR %type dir +%token TK_GAUSS_KAPPA +%token TK_GAUSS_NITER_SRC +%token TK_GAUSS_NITER_SNK +%type gauss_kappa +%type gauss_niter_src gauss_niter_snk //putpourri %type fermionic_putpourri_meas %token TK_MEAS_PUTPOURRI @@ -601,11 +606,23 @@ meson_corr_meas: TK_MEAS_MESON_CORRS {$$=new meson_corr_meas_pars_t();} if((*$2)[0]!=std::make_pair(15,15)) CRASH("first entry of the meson list must be 15,15, instead it is: %d %d",(*$2)[0].first,(*$2)[0].second); $$->mesons=(*$2);delete $2;} |meson_corr_meas dir {$$->dir=$2;} + | meson_corr_meas gauss_kappa {$$->gauss_kappa=$2;} + | meson_corr_meas gauss_niter_src {$$->gauss_niter_src=$2;} + | meson_corr_meas gauss_niter_snk {$$->gauss_niter_snk=$2;} ; dir: TK_DIR '=' int_numb {$$=$3;} ; +gauss_kappa: TK_GAUSS_KAPPA '=' double_numb {$$=$3;} +; + +gauss_niter_src: TK_GAUSS_NITER_SRC '=' int_numb {$$=$3;} +; + +gauss_niter_snk: TK_GAUSS_NITER_SNK '=' int_numb {$$=$3;} +; + operators: TK_OPERATORS '=' int_pair_list { for(size_t i=0;i<$3->size();i++) { diff --git a/projects/generate_confs/tokenizer.lpp b/projects/generate_confs/tokenizer.lpp index 16cd773c7..0560964bb 100644 --- a/projects/generate_confs/tokenizer.lpp +++ b/projects/generate_confs/tokenizer.lpp @@ -129,6 +129,11 @@ Operators DEBUG_PRINTF("Found Operators\n");return TK_OPERATORS; /* direction */ Dir DEBUG_PRINTF("Found Dir\n");return TK_DIR; + /* gaussian smearing (meson corrs) */ +GaussKappa DEBUG_PRINTF("Found GaussKappa\n");return TK_GAUSS_KAPPA; +GaussNiterSrc DEBUG_PRINTF("Found GaussNiterSrc\n");return TK_GAUSS_NITER_SRC; +GaussNiterSnk DEBUG_PRINTF("Found GaussNiterSnk\n");return TK_GAUSS_NITER_SNK; + /* rendens pars */ MaxOrder DEBUG_PRINTF("Found MaxOrder\n");return TK_MAX_ORDER; diff --git a/src/measures/fermions/mesons.cpp b/src/measures/fermions/mesons.cpp index ba5676e0a..f804399b8 100644 --- a/src/measures/fermions/mesons.cpp +++ b/src/measures/fermions/mesons.cpp @@ -15,6 +15,7 @@ #include "operations/gauge_fixing.hpp" #include "routines/mpi_routines.hpp" #include "stag.hpp" +#include "operations/smearing/gaussian.hpp" namespace nissa { @@ -25,7 +26,69 @@ namespace nissa int nop; int ncombo; int nflavs; + + template + void fill_lx_from_eo(LxField& out, const EoField& in_eo) + { + out.reset(); + auto in_view = in_eo.getReadable(); // maybe boh + + for(int eo=0; eo<2; eo++) + { + PAR(0,locVolh, + CAPTURE(eo, + in_view, + TO_WRITE(out)), + ieo, + { + const int ivol=loclx_of_loceo[eo][ieo]; + out[ivol]=in_view[eo][ieo]; + }); + } + set_borders_invalid(out); } + template + void fill_eo_from_lx(EoField& out_eo, const LxField& in_lx) + { + auto out_view = out_eo.getWritable(); // maybe boh + for(int eo=0; eo<2; eo++) + { + PAR(0,locVolh, + CAPTURE(eo, + out_view, + TO_READ(in_lx)), + ieo, + { + const int ivol=loclx_of_loceo[eo][ieo]; + out_view[eo][ieo]=in_lx[ivol]; + }); + } + set_borders_invalid(out_eo); + } + + // reuse gaussian_smearing using lx as buffer + template + void gaussian_smear_eo_inplace(EoField& eo, + LxField& lx_buf, + LxField& lx_temp, + LxField& lx_H, + const LxField& conf_lx, + const double gauss_kappa, + const int gauss_niter) + { + if(gauss_niter<=0) return; + + //fill_lx_from_eo(lx_buf,eo); -> I found the following already implemnted routine after i wrote mine, but I guess these are more trustworthy + paste_eo_parts_into_lx_vector(lx_buf,eo); + set_borders_invalid(lx_buf); + + gaussian_smearing(lx_buf,lx_buf,conf_lx,gauss_kappa,gauss_niter,&lx_temp,&lx_H); + //fill_eo_from_lx(eo,lx_buf); + + split_lx_vector_into_eo_parts(eo,lx_buf); + set_borders_invalid(eo); + } + //compute the index where to store inline int icombo(const int& iflav_so, @@ -41,6 +104,7 @@ namespace nissa +nop*(iflav_si +nflavs*iflav_so))); } +} void compute_meson_corr(complex* corr, const EoField& conf, @@ -49,6 +113,9 @@ namespace nissa { const int& dir= meas_pars.dir; + const double gauss_kappa=meas_pars.gauss_kappa; + const int gauss_niter_src=meas_pars.gauss_niter_src; + const int gauss_niter_snk=meas_pars.gauss_niter_snk; //allocate EoField ori_source("ori_source",WITH_HALO); @@ -58,6 +125,16 @@ namespace nissa std::vector> quark(nflavs*nop,{"quark",WITH_HALO}); std::vector> quark0s(nflavs*nop,{"quark0s",WITH_HALO}); + LxField conf_lx("conf_lx",WITH_HALO); + fill_lx_from_eo(conf_lx,conf); + paste_eo_parts_into_lx_vector(conf_lx,conf); + set_borders_invalid(conf_lx); + //conf_lx.updateEdges(); gauss smear already does it + + LxField gauss_lx_buf("gauss_lx_buf",WITH_HALO); + LxField gauss_lx_temp("gauss_lx_temp",WITH_HALO); + LxField gauss_lx_H("gauss_lx_H",WITH_HALO); + //form the masks int mask[nop],shift[nop]; for(int iop=0;iop smeared_ori_source("smeared_ori_source",WITH_HALO); + smeared_ori_source = ori_source; + gaussian_smear_eo_inplace(smeared_ori_source, + gauss_lx_buf, gauss_lx_temp, gauss_lx_H, + conf_lx, gauss_kappa, gauss_niter_src); + for(int iflav=0;iflav> mesons; int dir; + double gauss_kappa; + int gauss_niter_src; + int gauss_niter_snk; /// Time direction by defaul int def_dir() const { return 0; } + + // Smearing defaults: disabled + double def_gauss_kappa() const { return 0.0; } + int def_gauss_niter_src() const { return 0; } + int def_gauss_niter_snk() const { return 0; } std::string def_path() const { @@ -50,6 +58,12 @@ namespace nissa } os<<"}\n"; } + if(gauss_kappa!=def_gauss_kappa() or full) + os<<" GaussKappa\t=\t"< void gaussian_smearing(LxField& smear_sc, - const LxField origi_sc, + const LxField& origi_sc, const LxField& conf, const double& kappa_iso, const int& niter, From d24656327f06077d5f34548726e8387a7d3c51ce Mon Sep 17 00:00:00 2001 From: roberto-dionisio <32687034+roberto-dionisio@users.noreply.github.com> Date: Sat, 28 Feb 2026 09:24:45 +0100 Subject: [PATCH 02/17] disabled filling --- src/measures/fermions/mesons.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/measures/fermions/mesons.cpp b/src/measures/fermions/mesons.cpp index f804399b8..efcb86165 100644 --- a/src/measures/fermions/mesons.cpp +++ b/src/measures/fermions/mesons.cpp @@ -26,7 +26,7 @@ namespace nissa int nop; int ncombo; int nflavs; - + /* template void fill_lx_from_eo(LxField& out, const EoField& in_eo) { @@ -64,7 +64,7 @@ namespace nissa }); } set_borders_invalid(out_eo); - } + }*/ // reuse gaussian_smearing using lx as buffer template @@ -126,7 +126,7 @@ namespace nissa std::vector> quark0s(nflavs*nop,{"quark0s",WITH_HALO}); LxField conf_lx("conf_lx",WITH_HALO); - fill_lx_from_eo(conf_lx,conf); + //fill_lx_from_eo(conf_lx,conf); paste_eo_parts_into_lx_vector(conf_lx,conf); set_borders_invalid(conf_lx); //conf_lx.updateEdges(); gauss smear already does it From eb65b4cdea675b88acffdec9f16db17c09d17dcd Mon Sep 17 00:00:00 2001 From: roberto-dionisio <32687034+roberto-dionisio@users.noreply.github.com> Date: Sat, 28 Feb 2026 09:28:23 +0100 Subject: [PATCH 03/17] proper handling of parities for eo field --- src/measures/fermions/mesons.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/measures/fermions/mesons.cpp b/src/measures/fermions/mesons.cpp index efcb86165..56684d7b7 100644 --- a/src/measures/fermions/mesons.cpp +++ b/src/measures/fermions/mesons.cpp @@ -86,7 +86,8 @@ namespace nissa //fill_eo_from_lx(eo,lx_buf); split_lx_vector_into_eo_parts(eo,lx_buf); - set_borders_invalid(eo); + set_borders_invalid(eo[0]); + set_borders_invalid(eo[1]); } From c01d48ce2cbe9379493c9ac0293779e3cd7fe2df Mon Sep 17 00:00:00 2001 From: roberto-dionisio <32687034+roberto-dionisio@users.noreply.github.com> Date: Sun, 1 Mar 2026 11:21:43 +0100 Subject: [PATCH 04/17] not invalidating and not in place --- src/measures/fermions/mesons.cpp | 84 ++++++++------------------------ 1 file changed, 19 insertions(+), 65 deletions(-) diff --git a/src/measures/fermions/mesons.cpp b/src/measures/fermions/mesons.cpp index 56684d7b7..a2a27d25c 100644 --- a/src/measures/fermions/mesons.cpp +++ b/src/measures/fermions/mesons.cpp @@ -26,68 +26,27 @@ namespace nissa int nop; int ncombo; int nflavs; - /* - template - void fill_lx_from_eo(LxField& out, const EoField& in_eo) - { - out.reset(); - auto in_view = in_eo.getReadable(); // maybe boh - - for(int eo=0; eo<2; eo++) - { - PAR(0,locVolh, - CAPTURE(eo, - in_view, - TO_WRITE(out)), - ieo, - { - const int ivol=loclx_of_loceo[eo][ieo]; - out[ivol]=in_view[eo][ieo]; - }); - } - set_borders_invalid(out); - } - template - void fill_eo_from_lx(EoField& out_eo, const LxField& in_lx) - { - auto out_view = out_eo.getWritable(); // maybe boh - for(int eo=0; eo<2; eo++) - { - PAR(0,locVolh, - CAPTURE(eo, - out_view, - TO_READ(in_lx)), - ieo, - { - const int ivol=loclx_of_loceo[eo][ieo]; - out_view[eo][ieo]=in_lx[ivol]; - }); - } - set_borders_invalid(out_eo); - }*/ - + // reuse gaussian_smearing using lx as buffer template - void gaussian_smear_eo_inplace(EoField& eo, - LxField& lx_buf, - LxField& lx_temp, - LxField& lx_H, - const LxField& conf_lx, - const double gauss_kappa, - const int gauss_niter) + void gaussian_smear_eo(EoField& out, + const EoField& in, + LxField& lx_buf, + LxField& lx_temp, + LxField& lx_H, + const LxField& conf_lx, + const double gauss_kappa, + const int gauss_niter) { - if(gauss_niter<=0) return; + if(gauss_niter<=0){ + out = in; + return; + } - //fill_lx_from_eo(lx_buf,eo); -> I found the following already implemnted routine after i wrote mine, but I guess these are more trustworthy - paste_eo_parts_into_lx_vector(lx_buf,eo); - set_borders_invalid(lx_buf); - + paste_eo_parts_into_lx_vector(lx_buf,in); gaussian_smearing(lx_buf,lx_buf,conf_lx,gauss_kappa,gauss_niter,&lx_temp,&lx_H); - //fill_eo_from_lx(eo,lx_buf); + split_lx_vector_into_eo_parts(out,lx_buf); - split_lx_vector_into_eo_parts(eo,lx_buf); - set_borders_invalid(eo[0]); - set_borders_invalid(eo[1]); } @@ -127,10 +86,7 @@ namespace nissa std::vector> quark0s(nflavs*nop,{"quark0s",WITH_HALO}); LxField conf_lx("conf_lx",WITH_HALO); - //fill_lx_from_eo(conf_lx,conf); paste_eo_parts_into_lx_vector(conf_lx,conf); - set_borders_invalid(conf_lx); - //conf_lx.updateEdges(); gauss smear already does it LxField gauss_lx_buf("gauss_lx_buf",WITH_HALO); LxField gauss_lx_temp("gauss_lx_temp",WITH_HALO); @@ -166,8 +122,7 @@ namespace nissa generate_fully_undiluted_eo_source(ori_source,meas_pars.rnd_type,source_coord,dir); EoField smeared_ori_source("smeared_ori_source",WITH_HALO); - smeared_ori_source = ori_source; - gaussian_smear_eo_inplace(smeared_ori_source, + gaussian_smear_eo(smeared_ori_source, ori_source, gauss_lx_buf, gauss_lx_temp, gauss_lx_H, conf_lx, gauss_kappa, gauss_niter_src); @@ -179,13 +134,12 @@ namespace nissa apply_shift_op(source,temp[0],temp[1],conf,tp.backfield[iflav],shift[iop],smeared_ori_source); put_stag_phases(source,mask[iop]); - //smear the source, done before cause it would mess up with stag operator - //gaussian_smear_eo_inplace(source, gauss_lx_buf, gauss_lx_temp, gauss_lx_H, conf_lx, gauss_kappa, gauss_niter_src); - mult_Minv(quark[idx],conf,tp,iflav,meas_pars.residue,source); //smear also the sink prop before contraction - gaussian_smear_eo_inplace(quark[idx], gauss_lx_buf, gauss_lx_temp, gauss_lx_H, conf_lx, gauss_kappa, gauss_niter_snk); + gaussian_smear_eo(quark[idx], quark[idx], + gauss_lx_buf, gauss_lx_temp, gauss_lx_H, + conf_lx, gauss_kappa, gauss_niter_snk); } } /// Sink From 0585a6a9fe271a056d57031b7e7911ef72e74656 Mon Sep 17 00:00:00 2001 From: roberto-dionisio <32687034+roberto-dionisio@users.noreply.github.com> Date: Mon, 2 Mar 2026 09:18:51 +0100 Subject: [PATCH 05/17] ape and gauss smear generalized for spatial corr --- projects/generate_confs/parser.ypp | 12 +++++++++ projects/generate_confs/tokenizer.lpp | 4 +++ src/measures/fermions/mesons.cpp | 15 +++++++++--- src/measures/fermions/mesons.hpp | 16 +++++++++++- src/operations/smearing/APE.cpp | 11 +++++---- src/operations/smearing/gaussian.hpp | 35 ++++++++++++++++++++++++--- 6 files changed, 80 insertions(+), 13 deletions(-) diff --git a/projects/generate_confs/parser.ypp b/projects/generate_confs/parser.ypp index 0b547a382..42f17f1ba 100644 --- a/projects/generate_confs/parser.ypp +++ b/projects/generate_confs/parser.ypp @@ -237,6 +237,10 @@ %token TK_GAUSS_NITER_SNK %type gauss_kappa %type gauss_niter_src gauss_niter_snk +%token TK_APE_ALPHA +%token TK_APE_NITER +%type ape_alpha +%type ape_niter //putpourri %type fermionic_putpourri_meas %token TK_MEAS_PUTPOURRI @@ -609,6 +613,8 @@ meson_corr_meas: TK_MEAS_MESON_CORRS {$$=new meson_corr_meas_pars_t();} | meson_corr_meas gauss_kappa {$$->gauss_kappa=$2;} | meson_corr_meas gauss_niter_src {$$->gauss_niter_src=$2;} | meson_corr_meas gauss_niter_snk {$$->gauss_niter_snk=$2;} + | meson_corr_meas ape_alpha {$$->ape_alpha=$2;} + | meson_corr_meas ape_niter {$$->ape_niter=$2;} ; dir: TK_DIR '=' int_numb {$$=$3;} @@ -623,6 +629,12 @@ gauss_niter_src: TK_GAUSS_NITER_SRC '=' int_numb {$$=$3;} gauss_niter_snk: TK_GAUSS_NITER_SNK '=' int_numb {$$=$3;} ; +ape_alpha: TK_APE_ALPHA '=' double_numb {$$=$3;} +; + +ape_niter: TK_APE_NITER '=' int_numb {$$=$3;} +; + operators: TK_OPERATORS '=' int_pair_list { for(size_t i=0;i<$3->size();i++) { diff --git a/projects/generate_confs/tokenizer.lpp b/projects/generate_confs/tokenizer.lpp index 0560964bb..4274696a7 100644 --- a/projects/generate_confs/tokenizer.lpp +++ b/projects/generate_confs/tokenizer.lpp @@ -134,6 +134,10 @@ GaussKappa DEBUG_PRINTF("Found GaussKappa\n");return TK_GAUSS_KAPPA; GaussNiterSrc DEBUG_PRINTF("Found GaussNiterSrc\n");return TK_GAUSS_NITER_SRC; GaussNiterSnk DEBUG_PRINTF("Found GaussNiterSnk\n");return TK_GAUSS_NITER_SNK; + /* ape smearing (meson corrs) */ +ApeAlpha DEBUG_PRINTF("Found ApeAlpha\n");return TK_APE_ALPHA; +ApeNiter DEBUG_PRINTF("Found ApeNiter\n");return TK_APE_NITER; + /* rendens pars */ MaxOrder DEBUG_PRINTF("Found MaxOrder\n");return TK_MAX_ORDER; diff --git a/src/measures/fermions/mesons.cpp b/src/measures/fermions/mesons.cpp index a2a27d25c..7fdaa2509 100644 --- a/src/measures/fermions/mesons.cpp +++ b/src/measures/fermions/mesons.cpp @@ -16,6 +16,7 @@ #include "routines/mpi_routines.hpp" #include "stag.hpp" #include "operations/smearing/gaussian.hpp" +#include "operations/smearing/APE.hpp" namespace nissa { @@ -36,7 +37,8 @@ namespace nissa LxField& lx_H, const LxField& conf_lx, const double gauss_kappa, - const int gauss_niter) + const int gauss_niter, + const int corr_dir) { if(gauss_niter<=0){ out = in; @@ -44,7 +46,7 @@ namespace nissa } paste_eo_parts_into_lx_vector(lx_buf,in); - gaussian_smearing(lx_buf,lx_buf,conf_lx,gauss_kappa,gauss_niter,&lx_temp,&lx_H); + gaussian_smearing(lx_buf,lx_buf,conf_lx,gauss_kappa,gauss_niter,corr_dir,&lx_temp,&lx_H); split_lx_vector_into_eo_parts(out,lx_buf); } @@ -76,6 +78,9 @@ namespace nissa const double gauss_kappa=meas_pars.gauss_kappa; const int gauss_niter_src=meas_pars.gauss_niter_src; const int gauss_niter_snk=meas_pars.gauss_niter_snk; + const double ape_alpha=meas_pars.ape_alpha; + const int ape_niter=meas_pars.ape_niter; + //allocate EoField ori_source("ori_source",WITH_HALO); @@ -86,7 +91,9 @@ namespace nissa std::vector> quark0s(nflavs*nop,{"quark0s",WITH_HALO}); LxField conf_lx("conf_lx",WITH_HALO); + LxField conf_lx_ape("conf_lx_ape",WITH_HALO); paste_eo_parts_into_lx_vector(conf_lx,conf); + ape_orth_dir_smear_conf(conf_lx_ape, conf_lx, ape_alpha, ape_niter, dir); LxField gauss_lx_buf("gauss_lx_buf",WITH_HALO); LxField gauss_lx_temp("gauss_lx_temp",WITH_HALO); @@ -124,7 +131,7 @@ namespace nissa EoField smeared_ori_source("smeared_ori_source",WITH_HALO); gaussian_smear_eo(smeared_ori_source, ori_source, gauss_lx_buf, gauss_lx_temp, gauss_lx_H, - conf_lx, gauss_kappa, gauss_niter_src); + conf_lx_ape, gauss_kappa, gauss_niter_src, dir); for(int iflav=0;iflav("H",WITH_HALO); \ LxField& H=*_H; \ \ - const double norm_fact=1/(1+2*(kappa[1]+kappa[2]+kappa[3])); \ + const double norm_fact=1/(1+2*(kappa[0]+kappa[1]+kappa[2]+kappa[3])); \ \ - VERBOSITY_LV2_MASTER_PRINTF("GAUSSIAN smearing with kappa={%g,%g,%g}, %d iterations\n",kappa[1],kappa[2],kappa[3],niter); \ + VERBOSITY_LV2_MASTER_PRINTF("GAUSSIAN smearing with kappa={%g,%g,%g,%g}, %d iterations\n",kappa[0],kappa[1],kappa[2],kappa[3],niter); \ \ /*iter 0*/ \ temp=origi_sc; \ @@ -77,7 +77,7 @@ namespace nissa /*loop over gaussian iterations*/ \ for(int iter=0;iter + void gaussian_smearing(LxField& smear_sc, + const LxField& origi_sc, + const LxField& conf, + double kappa_val, + int niter, + int corr_dir, // dir along which the correlator is measured + LxField* ext_temp=nullptr, + LxField* ext_H=nullptr) + { + Momentum kappa = {0.0, 0.0, 0.0, 0.0}; + for(int mu=0; mu Date: Mon, 2 Mar 2026 09:30:54 +0100 Subject: [PATCH 06/17] ape --- src/operations/smearing/APE.hpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/operations/smearing/APE.hpp b/src/operations/smearing/APE.hpp index 103eb1155..4231a7f1d 100644 --- a/src/operations/smearing/APE.hpp +++ b/src/operations/smearing/APE.hpp @@ -67,7 +67,8 @@ namespace nissa const double& alpha, const int& nSteps, const WhichDirs& dirs=allDirs, - const int& minStapleDir=0); + const int& minStapleDir=0, + const int& skipStapleDir=-1); inline void ape_single_dir_smear_conf(LxField& smear_conf, const LxField& origi_conf, @@ -88,6 +89,17 @@ namespace nissa { ape_smear_conf(smear_conf,origi_conf,alpha,nstep,allOtherDirs[mu]); } + + // - smear only mu != corr_dir + // - staples use only nu != corr_dir + inline void ape_orth_dir_smear_conf(LxField& smear_conf, + const LxField& origi_conf, + const double& alpha, + const int& nstep, + const int& corr_dir) + { + ape_smear_conf(smear_conf,origi_conf,alpha,nstep,allOtherDirs[corr_dir],0,corr_dir); + } inline void ape_temporal_smear_conf(LxField& smear_conf, const LxField& origi_conf, From 56e19a0e74d738e47b832a9378f1ed6368d854c1 Mon Sep 17 00:00:00 2001 From: roberto-dionisio <32687034+roberto-dionisio@users.noreply.github.com> Date: Mon, 2 Mar 2026 10:09:50 +0100 Subject: [PATCH 07/17] not caputered skipstaple --- src/operations/smearing/APE.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/operations/smearing/APE.cpp b/src/operations/smearing/APE.cpp index 842bc48e1..6ce3c8b21 100644 --- a/src/operations/smearing/APE.cpp +++ b/src/operations/smearing/APE.cpp @@ -33,7 +33,7 @@ namespace nissa conf.updateEdges(); PAR(0,locVol, - CAPTURE(alpha,dirs,minStapleDir, + CAPTURE(alpha,dirs,minStapleDir,skipStapleDir, TO_READ(conf), TO_WRITE(smearConf)), ivol, From ba4ee326cbd334f8aa33fecb4638fef0aeb268ea Mon Sep 17 00:00:00 2001 From: roberto-dionisio <32687034+roberto-dionisio@users.noreply.github.com> Date: Mon, 2 Mar 2026 10:12:37 +0100 Subject: [PATCH 08/17] duplicstion --- src/measures/fermions/mesons.hpp | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/measures/fermions/mesons.hpp b/src/measures/fermions/mesons.hpp index ab235d7d9..dba671096 100644 --- a/src/measures/fermions/mesons.hpp +++ b/src/measures/fermions/mesons.hpp @@ -12,9 +12,6 @@ namespace nissa std::vector> mesons; int dir; - double gauss_kappa; - int gauss_niter_src; - int gauss_niter_snk; double ape_alpha; int ape_niter; @@ -33,10 +30,6 @@ namespace nissa return 0; } - // Smearing defaults: disabled - double def_gauss_kappa() const { return 0.0; } - int def_gauss_niter_src() const { return 0; } - int def_gauss_niter_snk() const { return 0; } // Smearing defaults: disabled double def_gauss_kappa() const From 649d70f02ba16f5c55f67c0dffc814e8cb61c600 Mon Sep 17 00:00:00 2001 From: roberto-dionisio <32687034+roberto-dionisio@users.noreply.github.com> Date: Mon, 2 Mar 2026 10:17:41 +0100 Subject: [PATCH 09/17] lost sunpho mod --- src/measures/fermions/mesons.cpp | 38 +++++++++++++++----------------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/src/measures/fermions/mesons.cpp b/src/measures/fermions/mesons.cpp index 1b69fd0cd..89a9c2303 100644 --- a/src/measures/fermions/mesons.cpp +++ b/src/measures/fermions/mesons.cpp @@ -28,6 +28,24 @@ namespace nissa int ncombo; int nflavs; + /// Compute the index where to store + inline int icombo(const int& iflav_so, + const int& iflav_si, + const int& iop_so, + const int& iop_si, + const int& i_dir, + const int& dir) + { + return i_dir + +glbSize[dir]*(iop_si + +nop*(iop_so + +nop*(iflav_si + +nflavs*iflav_so))); + } + } + + + // reuse gaussian_smearing using lx as buffer template void gaussian_smear_eo(EoField& out, @@ -52,26 +70,6 @@ namespace nissa } - // Reuse gaussian_smearing using lx as buffer - template - void gaussian_smear_eo(EoField& out, - const EoField& in, - LxField& lx_buf, - LxField& lx_temp, - LxField& lx_H, - const LxField& conf_lx, - const double gauss_kappa, - const int gauss_niter) - { - if(gauss_niter<=0) - out=in; - else - { - paste_eo_parts_into_lx_vector(lx_buf,in); - gaussian_smearing(lx_buf,lx_buf,conf_lx,gauss_kappa,gauss_niter,&lx_temp,&lx_H); - split_lx_vector_into_eo_parts(out,lx_buf); - } - } } void compute_meson_corr(complex* corr, From a68d1e7d6008a8622bf26f8680c7f2b268623740 Mon Sep 17 00:00:00 2001 From: roberto-dionisio <32687034+roberto-dionisio@users.noreply.github.com> Date: Mon, 2 Mar 2026 10:25:41 +0100 Subject: [PATCH 10/17] extra } --- src/measures/fermions/mesons.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/measures/fermions/mesons.cpp b/src/measures/fermions/mesons.cpp index 89a9c2303..5d8253971 100644 --- a/src/measures/fermions/mesons.cpp +++ b/src/measures/fermions/mesons.cpp @@ -70,7 +70,6 @@ namespace nissa } -} void compute_meson_corr(complex* corr, const EoField& conf, From d2642b342804ea2f965e99969b8051261dbbce09 Mon Sep 17 00:00:00 2001 From: roberto-dionisio <32687034+roberto-dionisio@users.noreply.github.com> Date: Mon, 2 Mar 2026 10:30:47 +0100 Subject: [PATCH 11/17] not by value --- src/operations/smearing/APE.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/operations/smearing/APE.cpp b/src/operations/smearing/APE.cpp index 6ce3c8b21..8c252a55f 100644 --- a/src/operations/smearing/APE.cpp +++ b/src/operations/smearing/APE.cpp @@ -12,7 +12,7 @@ namespace nissa const int& nSteps, const WhichDirs& dirs, const int& minStapleDir, - const int skipStapleDir) + const int& skipStapleDir) { char listed_dirs[21]=""; for(int mu=0;mu Date: Tue, 3 Mar 2026 08:07:06 +0100 Subject: [PATCH 12/17] enabling lambda for smear --- src/measures/fermions/mesons.cpp | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/measures/fermions/mesons.cpp b/src/measures/fermions/mesons.cpp index 5d8253971..1c94b1263 100644 --- a/src/measures/fermions/mesons.cpp +++ b/src/measures/fermions/mesons.cpp @@ -58,17 +58,15 @@ namespace nissa const int gauss_niter, const int corr_dir) { - if(gauss_niter<=0){ + if(gauss_niter<=0) out = in; - return; - } - + else + { paste_eo_parts_into_lx_vector(lx_buf,in); gaussian_smearing(lx_buf,lx_buf,conf_lx,gauss_kappa,gauss_niter,corr_dir,&lx_temp,&lx_H); split_lx_vector_into_eo_parts(out,lx_buf); - - } - + } + } void compute_meson_corr(complex* corr, @@ -102,6 +100,12 @@ namespace nissa LxField gauss_lx_temp("gauss_lx_temp",WITH_HALO); LxField gauss_lx_H("gauss_lx_H",WITH_HALO); + auto gSmear = + [&](EoField& out, const int& nIter, const EoField& in) + { + gaussian_smear_eo(out, in, gauss_lx_buf, gauss_lx_temp, gauss_lx_H, conf_lx_ape, gauss_kappa, nIter, dir); + }; + //form the masks int mask[nop],shift[nop]; for(int iop=0;iop smeared_ori_source("smeared_ori_source",WITH_HALO); - gaussian_smear_eo(smeared_ori_source, ori_source, - gauss_lx_buf, gauss_lx_temp, gauss_lx_H, - conf_lx_ape, gauss_kappa, gauss_niter_src, dir); + gSmear(smeared_ori_source, gauss_niter_src, ori_source); for(int iflav=0;iflav Date: Tue, 3 Mar 2026 08:10:54 +0100 Subject: [PATCH 13/17] clean formatting --- src/measures/fermions/mesons.hpp | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/src/measures/fermions/mesons.hpp b/src/measures/fermions/mesons.hpp index dba671096..87816460e 100644 --- a/src/measures/fermions/mesons.hpp +++ b/src/measures/fermions/mesons.hpp @@ -12,11 +12,10 @@ namespace nissa std::vector> mesons; int dir; + double ape_alpha; - int ape_niter; - double def_ape_alpha() const { return 0.5; } - int def_ape_niter() const { return 20; } + int ape_niter; double gauss_kappa; @@ -30,7 +29,17 @@ namespace nissa return 0; } - + //ape smearing default disabled + double def_ape_alpha() const + { + return 0.5; + } + + int def_ape_niter() const + { + return 0; + } + // Smearing defaults: disabled double def_gauss_kappa() const { @@ -80,15 +89,19 @@ namespace nissa } if(ape_alpha!=def_ape_alpha() or full) - os<<" ApeAlpha\t=\t"< Date: Tue, 3 Mar 2026 08:14:26 +0100 Subject: [PATCH 14/17] fixed compile warning --- src/measures/fermions/mesons.hpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/measures/fermions/mesons.hpp b/src/measures/fermions/mesons.hpp index 87816460e..59ecc31a1 100644 --- a/src/measures/fermions/mesons.hpp +++ b/src/measures/fermions/mesons.hpp @@ -132,11 +132,11 @@ namespace nissa meson_corr_meas_pars_t() : base_fermionic_meas_t(), dir(def_dir()), - gauss_kappa(def_gauss_kappa()), - gauss_niter_src(def_gauss_niter_src()), - gauss_niter_snk(def_gauss_niter_snk()), ape_alpha(def_ape_alpha()), ape_niter(def_ape_niter()) + gauss_kappa(def_gauss_kappa()), + gauss_niter_src(def_gauss_niter_src()), + gauss_niter_snk(def_gauss_niter_snk()) { path=def_path(); } From 96cc8115133d1be9dca203e91a4fe0a5985f0a24 Mon Sep 17 00:00:00 2001 From: roberto-dionisio <32687034+roberto-dionisio@users.noreply.github.com> Date: Tue, 3 Mar 2026 08:15:13 +0100 Subject: [PATCH 15/17] ops --- src/measures/fermions/mesons.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/measures/fermions/mesons.hpp b/src/measures/fermions/mesons.hpp index 59ecc31a1..a684b682a 100644 --- a/src/measures/fermions/mesons.hpp +++ b/src/measures/fermions/mesons.hpp @@ -133,7 +133,7 @@ namespace nissa base_fermionic_meas_t(), dir(def_dir()), ape_alpha(def_ape_alpha()), - ape_niter(def_ape_niter()) + ape_niter(def_ape_niter()), gauss_kappa(def_gauss_kappa()), gauss_niter_src(def_gauss_niter_src()), gauss_niter_snk(def_gauss_niter_snk()) From e4d5e0af06c6661edb35bf2ba913cfd5f2e3b58c Mon Sep 17 00:00:00 2001 From: roberto-dionisio <32687034+roberto-dionisio@users.noreply.github.com> Date: Tue, 3 Mar 2026 16:08:07 +0100 Subject: [PATCH 16/17] fixed duplication in printing --- src/measures/fermions/mesons.hpp | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/measures/fermions/mesons.hpp b/src/measures/fermions/mesons.hpp index a684b682a..c4b884ac1 100644 --- a/src/measures/fermions/mesons.hpp +++ b/src/measures/fermions/mesons.hpp @@ -103,14 +103,6 @@ namespace nissa if(gauss_niter_snk!=def_gauss_niter_snk() or full) os<<" GaussNiterSnk\t=\t"< Date: Tue, 3 Mar 2026 16:22:14 +0100 Subject: [PATCH 17/17] it needs also edges --- src/measures/fermions/mesons.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/measures/fermions/mesons.cpp b/src/measures/fermions/mesons.cpp index 1c94b1263..4a45b1e1d 100644 --- a/src/measures/fermions/mesons.cpp +++ b/src/measures/fermions/mesons.cpp @@ -91,8 +91,8 @@ namespace nissa std::vector> quark(nflavs*nop,{"quark",WITH_HALO}); std::vector> quark0s(nflavs*nop,{"quark0s",WITH_HALO}); - LxField conf_lx("conf_lx",WITH_HALO); - LxField conf_lx_ape("conf_lx_ape",WITH_HALO); + LxField conf_lx("conf_lx",WITH_HALO_EDGES); + LxField conf_lx_ape("conf_lx_ape",WITH_HALO_EDGES); paste_eo_parts_into_lx_vector(conf_lx,conf); ape_orth_dir_smear_conf(conf_lx_ape, conf_lx, ape_alpha, ape_niter, dir);