From d480bbe24539978fb0e4eb49c8371ccead449999 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 3 Jul 2026 05:04:24 -0400 Subject: [PATCH 001/116] Fix wrong column selection in 2d single-value fix ave/grid averaging A typo (jm1 = j = 1 instead of jm1 = j - 1, as used in the three parallel branches) made 2d grid averaging of a single bracketed per-atom value like c_ID[3] silently accumulate column 2 instead of the requested column, and clobbered the value index j. Found while triaging Coverity scan defects (no CID; discovered by inspection of neighboring flagged code paths). Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01YNvuaNpJNkbCKaAE8ngPQv --- src/fix_ave_grid.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fix_ave_grid.cpp b/src/fix_ave_grid.cpp index 46d31a0e3ca..cdddd58fd09 100644 --- a/src/fix_ave_grid.cpp +++ b/src/fix_ave_grid.cpp @@ -1060,7 +1060,7 @@ void FixAveGrid::atom2grid() vec2d[bin[i][0]][bin[i][1]] += ovector[i]; } } else { - int jm1 = j = 1; + int jm1 = j - 1; for (i = 0; i < nlocal; i++) { if (!skip[i]) vec2d[bin[i][0]][bin[i][1]] += oarray[i][jm1]; From 3638e4f5ca3208dee8763248cba828dd60f075b6 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 3 Jul 2026 05:04:24 -0400 Subject: [PATCH 002/116] Fix corrupted sorting of 1-3 neighbors in AMOEBA kmpole() The selection-sort for angleneigh executed its swap statements on every inner iteration (outside the improvement test), unlike the correct bondneigh twin loop directly above. With a stale swap index this duplicates the running minimum and drops an element for most input orderings, so the 1-3 special neighbor list used for Tinker- convention multipole frame assignment could be corrupted, yielding wrong AMOEBA/HIPPO frames and forces for unlucky atom-ID orderings. Coverity CID 1661393 (uninitialized index read); the real defect is the misplaced braces. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01YNvuaNpJNkbCKaAE8ngPQv --- src/AMOEBA/amoeba_utils.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/AMOEBA/amoeba_utils.cpp b/src/AMOEBA/amoeba_utils.cpp index 8fb839b6932..bb795eacc3a 100644 --- a/src/AMOEBA/amoeba_utils.cpp +++ b/src/AMOEBA/amoeba_utils.cpp @@ -97,9 +97,9 @@ void PairAmoeba::kmpole() if (angleneigh[j] < smallest) { smallest = angleneigh[j]; k = j; + angleneigh[k] = angleneigh[m]; + angleneigh[m] = smallest; } - angleneigh[k] = angleneigh[m]; - angleneigh[m] = smallest; } } From f54c758445a40771fd3e3a4590e248b5d9228fc2 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 3 Jul 2026 05:04:55 -0400 Subject: [PATCH 003/116] Fix garbage per-atom energy indexing in TIP4P OpenMP pair styles In pair styles lj/cut/tip4p/long/omp and lj/long/tip4p/long/omp the bookkeeping for ev_tally_list_thr() (the n/key counters and the vlist atom-index list) was only maintained when the virial was requested (VFLAG resp. a runtime vflag check), but ev_tally_list_thr() is called whenever EVFLAG is set and uses key/vlist to distribute the pair energy over the 2/4/6 listed atoms when eflag_atom is set. With per-atom energy requested but no virial (e.g. compute pe/atom without stress output) the tally indexed eatom_pair[] with uninitialized garbage indices, causing out-of-bounds writes. Restructure to match the base classes and the other five TIP4P OMP variants: maintain n/key/vlist under EVFLAG, keep only the v[] virial component computation under the virial condition. Coverity CIDs 1662776, 1661025, 1662344, 1661588, 1662877. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01YNvuaNpJNkbCKaAE8ngPQv --- src/OPENMP/pair_lj_cut_tip4p_long_omp.cpp | 26 ++++++++++---------- src/OPENMP/pair_lj_long_tip4p_long_omp.cpp | 28 ++++++++++++++-------- 2 files changed, 30 insertions(+), 24 deletions(-) diff --git a/src/OPENMP/pair_lj_cut_tip4p_long_omp.cpp b/src/OPENMP/pair_lj_cut_tip4p_long_omp.cpp index 05a82bdb241..d4b86db8144 100644 --- a/src/OPENMP/pair_lj_cut_tip4p_long_omp.cpp +++ b/src/OPENMP/pair_lj_cut_tip4p_long_omp.cpp @@ -336,10 +336,8 @@ void PairLJCutTIP4PLongOMP::eval(int iifrom, int iito, ThrData * const thr) // virial = sum(r x F) where each water's atoms are near xi and xj // vlist stores 2,4,6 atoms whose forces contribute to virial - if (VFLAG) { - n = 0; - key = 0; - } + n = 0; + key = 0; if (itype != typeO) { fxtmp += delx * cforce; @@ -353,11 +351,11 @@ void PairLJCutTIP4PLongOMP::eval(int iifrom, int iito, ThrData * const thr) v[3] = x[i].x * dely * cforce; v[4] = x[i].x * delz * cforce; v[5] = x[i].y * delz * cforce; - vlist[n++] = i; } + vlist[n++] = i; } else { - if (VFLAG) key++; + key++; fdx = delx*cforce; fdy = dely*cforce; @@ -392,10 +390,10 @@ void PairLJCutTIP4PLongOMP::eval(int iifrom, int iito, ThrData * const thr) v[3] = x[i].x*fOy + xH1.x*fHy + xH2.x*fHy; v[4] = x[i].x*fOz + xH1.x*fHz + xH2.x*fHz; v[5] = x[i].y*fOz + xH1.y*fHz + xH2.y*fHz; - vlist[n++] = i; - vlist[n++] = iH1; - vlist[n++] = iH2; } + vlist[n++] = i; + vlist[n++] = iH1; + vlist[n++] = iH2; } if (jtype != typeO) { @@ -410,11 +408,11 @@ void PairLJCutTIP4PLongOMP::eval(int iifrom, int iito, ThrData * const thr) v[3] -= x[j].x * dely * cforce; v[4] -= x[j].x * delz * cforce; v[5] -= x[j].y * delz * cforce; - vlist[n++] = j; } + vlist[n++] = j; } else { - if (VFLAG) key += 2; + key += 2; fdx = -delx*cforce; fdy = -dely*cforce; @@ -449,10 +447,10 @@ void PairLJCutTIP4PLongOMP::eval(int iifrom, int iito, ThrData * const thr) v[3] += x[j].x*fOy + xH1.x*fHy + xH2.x*fHy; v[4] += x[j].x*fOz + xH1.x*fHz + xH2.x*fHz; v[5] += x[j].y*fOz + xH1.y*fHz + xH2.y*fHz; - vlist[n++] = j; - vlist[n++] = jH1; - vlist[n++] = jH2; } + vlist[n++] = j; + vlist[n++] = jH1; + vlist[n++] = jH2; } if (EFLAG) { diff --git a/src/OPENMP/pair_lj_long_tip4p_long_omp.cpp b/src/OPENMP/pair_lj_long_tip4p_long_omp.cpp index 0eaf2ff6403..977c42fe7ee 100644 --- a/src/OPENMP/pair_lj_long_tip4p_long_omp.cpp +++ b/src/OPENMP/pair_lj_long_tip4p_long_omp.cpp @@ -943,7 +943,7 @@ void PairLJLongTIP4PLongOMP::eval(int iifrom, int iito, ThrData * const thr) // virial = sum(r x F) where each water's atoms are near xi and xj // vlist stores 2,4,6 atoms whose forces contribute to virial - if (EVFLAG && vflag) { + if (EVFLAG) { n = 0; key = 0; } @@ -960,11 +960,11 @@ void PairLJLongTIP4PLongOMP::eval(int iifrom, int iito, ThrData * const thr) v[3] = x[i].x * dely * cforce; v[4] = x[i].x * delz * cforce; v[5] = x[i].y * delz * cforce; - vlist[n++] = i; } + if (EVFLAG) vlist[n++] = i; } else { - if (EVFLAG && vflag) key++; + if (EVFLAG) key++; fdx = delx*cforce; fdy = dely*cforce; fdz = delz*cforce; @@ -998,6 +998,8 @@ void PairLJLongTIP4PLongOMP::eval(int iifrom, int iito, ThrData * const thr) v[3] = x[i].x*fOy + xH1.x*fHy + xH2.x*fHy; v[4] = x[i].x*fOz + xH1.x*fHz + xH2.x*fHz; v[5] = x[i].y*fOz + xH1.y*fHz + xH2.y*fHz; + } + if (EVFLAG) { vlist[n++] = i; vlist[n++] = iH1; vlist[n++] = iH2; @@ -1016,11 +1018,11 @@ void PairLJLongTIP4PLongOMP::eval(int iifrom, int iito, ThrData * const thr) v[3] -= x[j].x * dely * cforce; v[4] -= x[j].x * delz * cforce; v[5] -= x[j].y * delz * cforce; - vlist[n++] = j; } + if (EVFLAG) vlist[n++] = j; } else { - if (EVFLAG && vflag) key += 2; + if (EVFLAG) key += 2; fdx = -delx*cforce; fdy = -dely*cforce; @@ -1055,6 +1057,8 @@ void PairLJLongTIP4PLongOMP::eval(int iifrom, int iito, ThrData * const thr) v[3] += x[j].x*fOy + xH1.x*fHy + xH2.x*fHy; v[4] += x[j].x*fOz + xH1.x*fHz + xH2.x*fHz; v[5] += x[j].y*fOz + xH1.y*fHz + xH2.y*fHz; + } + if (EVFLAG) { vlist[n++] = j; vlist[n++] = jH1; vlist[n++] = jH2; @@ -1873,7 +1877,7 @@ void PairLJLongTIP4PLongOMP::eval_outer(int iifrom, int iito, ThrData * const th // virial = sum(r x F) where each water's atoms are near xi and xj // vlist stores 2,4,6 atoms whose forces contribute to virial - if (EVFLAG && vflag) { + if (EVFLAG) { n = 0; key = 0; } @@ -1890,11 +1894,11 @@ void PairLJLongTIP4PLongOMP::eval_outer(int iifrom, int iito, ThrData * const th v[3] = x[i].x * dely * fvirial; v[4] = x[i].x * delz * fvirial; v[5] = x[i].y * delz * fvirial; - vlist[n++] = i; } + if (EVFLAG) vlist[n++] = i; } else { - if (EVFLAG && vflag) key += 1; + if (EVFLAG) key += 1; fdx = delx*cforce; fdy = dely*cforce; @@ -1942,6 +1946,8 @@ void PairLJLongTIP4PLongOMP::eval_outer(int iifrom, int iito, ThrData * const th v[3] = x[i].x*fOy + xH1.x*fHy + xH2.x*fHy; v[4] = x[i].x*fOz + xH1.x*fHz + xH2.x*fHz; v[5] = x[i].y*fOz + xH1.y*fHz + xH2.y*fHz; + } + if (EVFLAG) { vlist[n++] = i; vlist[n++] = iH1; vlist[n++] = iH2; @@ -1960,11 +1966,11 @@ void PairLJLongTIP4PLongOMP::eval_outer(int iifrom, int iito, ThrData * const th v[3] -= x[j].x * dely * fvirial; v[4] -= x[j].x * delz * fvirial; v[5] -= x[j].y * delz * fvirial; - vlist[n++] = j; } + if (EVFLAG) vlist[n++] = j; } else { - if (EVFLAG && vflag) key += 2; + if (EVFLAG) key += 2; fdx = -delx*cforce; fdy = -dely*cforce; @@ -2012,6 +2018,8 @@ void PairLJLongTIP4PLongOMP::eval_outer(int iifrom, int iito, ThrData * const th v[3] += x[j].x*fOy + xH1.x*fHy + xH2.x*fHy; v[4] += x[j].x*fOz + xH1.x*fHz + xH2.x*fHz; v[5] += x[j].y*fOz + xH1.y*fHz + xH2.y*fHz; + } + if (EVFLAG) { vlist[n++] = j; vlist[n++] = jH1; vlist[n++] = jH2; From e5db2d598a89cf277cb61e9ebb41d69f524a0bb0 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 3 Jul 2026 05:04:55 -0400 Subject: [PATCH 004/116] Fix garbage Coulomb tables for pair lj/cut/coul/esp with run_style respa Pair::init_tables() left the espflag branch of the table-parameter dispatch empty and had no espflag case in the cut_respa table fill, so the respa branch consumed uninitialized grij/expm2/derfc values: tabulated Coulomb forces and energies were garbage when the PS solver pair style (respa_enable=1) ran under run_style respa with table lookups enabled (the default ncoultablebits 12). Evaluate the ESP force/energy polynomial factors once in the dispatch (deduplicating the two existing inline copies) and add the espflag cases to the respa fill and the outer switching region, using the same full-minus-short-range split (fesp - 1.0) as the style's analytic compute_outer() path. Coverity CIDs 1662249, 1661639, 1662021. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01YNvuaNpJNkbCKaAE8ngPQv --- src/pair.cpp | 78 +++++++++++++++++++++++++++++----------------------- 1 file changed, 44 insertions(+), 34 deletions(-) diff --git a/src/pair.cpp b/src/pair.cpp index 66745f56cff..604ccf0031e 100644 --- a/src/pair.cpp +++ b/src/pair.cpp @@ -376,6 +376,7 @@ void Pair::init_tables(double cut_coul, double *cut_respa) { int masklo,maskhi; double r,grij,expm2,derfc,egamma,fgamma,rsw; + double fesp,eesp; double qqrd2e = force->qqrd2e; if (force->kspace == nullptr) @@ -440,9 +441,20 @@ void Pair::init_tables(double cut_coul, double *cut_respa) fgamma = 1.0 + ((double)rsq_lookup.f/cut_coulsq)* force->kspace->dgamma(r/cut_coul); } else if (espflag) { - // This block is currently empty and does not perform any operations. - } - else { + double r_coul = 2.0 * r/cut_coul - 1.0; + double poly_r = 1.0; + fesp = force_poly_coeff[0]; + for (int ii = 1; ii < num_of_force_poly; ii++) { + poly_r *= r_coul; + fesp += force_poly_coeff[ii] * poly_r; + } + poly_r = 1.0; + eesp = energy_poly_coeff[0]; + for (int ii = 1; ii < num_of_energy_poly; ii++) { + poly_r *= r_coul; + eesp += energy_poly_coeff[ii] * poly_r; + } + } else { grij = g_ewald * r; expm2 = exp(-grij*grij); derfc = erfc(grij); @@ -455,21 +467,8 @@ void Pair::init_tables(double cut_coul, double *cut_respa) ftable[i] = qqrd2e/r * fgamma; etable[i] = qqrd2e/r * egamma; } else if (espflag) { - double r_coul = 2.0 * r/cut_coul - 1.0; - double force_poly_appx = force_poly_coeff[0]; - double force_poly_r = 1.0; - for(int ii=1; iikspace->gamma(r/cut_coul); fgamma = 1.0 + ((double)rsq_lookup.f/cut_coulsq)* force->kspace->dgamma(r/cut_coul); + } else if (espflag) { + double r_coul = 2.0 * r/cut_coul - 1.0; + double poly_r = 1.0; + fesp = force_poly_coeff[0]; + for (int ii = 1; ii < num_of_force_poly; ii++) { + poly_r *= r_coul; + fesp += force_poly_coeff[ii] * poly_r; + } + poly_r = 1.0; + eesp = energy_poly_coeff[0]; + for (int ii = 1; ii < num_of_energy_poly; ii++) { + poly_r *= r_coul; + eesp += energy_poly_coeff[ii] * poly_r; + } } else { grij = g_ewald * r; expm2 = exp(-grij*grij); @@ -567,22 +585,9 @@ void Pair::init_tables(double cut_coul, double *cut_respa) f_tmp = qqrd2e/r * fgamma; e_tmp = qqrd2e/r * egamma; } else if (espflag) { - double r_coul = 2.0 * r/cut_coul - 1.0; - double force_poly_appx = force_poly_coeff[0]; - double force_poly_r = 1.0; - for(int ii=1; ii Date: Fri, 3 Jul 2026 05:04:55 -0400 Subject: [PATCH 005/116] Fix garbage heat flux on neighbor atoms in pair edpd beyond the temperature cutoff The heat-transfer increments dQc/dQd/dQr are computed only when r < cutT, but the Newton update Q[j] -= (dQc - dQd + dQr) ran for every pair inside the force cutoff. Whenever the temperature cutoff is smaller than the force cutoff, neighbor atoms accumulated uninitialized garbage heat flux, corrupting the eDPD temperature evolution. Initialize the increments to zero so pairs beyond the temperature cutoff transfer no heat, consistent with the Q[i] update. Coverity CIDs 1661734, 1662410, 1662587. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01YNvuaNpJNkbCKaAE8ngPQv --- src/DPD-MESO/pair_edpd.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/DPD-MESO/pair_edpd.cpp b/src/DPD-MESO/pair_edpd.cpp index fc152e01bf3..2139a5d06bc 100644 --- a/src/DPD-MESO/pair_edpd.cpp +++ b/src/DPD-MESO/pair_edpd.cpp @@ -191,7 +191,7 @@ void PairEDPD::compute(int eflag, int vflag) f[i][2] += delz*fpair; // heat transfer - double dQc,dQd,dQr; + double dQc = 0.0, dQd = 0.0, dQr = 0.0; if (r < cutT[itype][jtype]) { double wrT = 1.0 - r/cutT[itype][jtype]; wrT = MAX(0.0,MIN(1.0,wrT)); From 1084e108b5c3cc4f8ea1a031694930a3940a3163 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 3 Jul 2026 05:06:01 -0400 Subject: [PATCH 006/116] Clamp the correct random number for the eDPD random heat flux The random heat-flux term drew a fresh gaussian into randnumT but the following clamp statement clamped randnum (the force random number) instead, discarding the fresh draw. The random heat flux dQr thus reused the same random number as the dissipative force term instead of an independent one, spoiling the fluctuation-dissipation relation for the temperature evolution. Found by inspection while fixing the adjacent heat-flux bug; changes trajectories of eDPD runs. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01YNvuaNpJNkbCKaAE8ngPQv --- src/DPD-MESO/pair_edpd.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/DPD-MESO/pair_edpd.cpp b/src/DPD-MESO/pair_edpd.cpp index 2139a5d06bc..2df3bea181f 100644 --- a/src/DPD-MESO/pair_edpd.cpp +++ b/src/DPD-MESO/pair_edpd.cpp @@ -197,7 +197,7 @@ void PairEDPD::compute(int eflag, int vflag) wrT = MAX(0.0,MIN(1.0,wrT)); wrT = pow(wrT, 0.5*powerT[itype][jtype]); double randnumT = randomT->gaussian(); - randnumT = MAX(-5.0,MIN(randnum,5.0)); + randnumT = MAX(-5.0,MIN(randnumT,5.0)); double kappaT = kappa[itype][jtype]; if (kappa_flag) { From 45441e6950a4410c113d11a4c2dccc2d3bee179c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 3 Jul 2026 05:07:16 -0400 Subject: [PATCH 007/116] Fix stale unwrapped coordinates and wrong energy indexing in fix efield/tip4p The variable-field branch of post_force() tallied virial contributions at the M, H1, and H2 sites from the unwrap[] buffer without ever calling domain->unmap(), so it used stale coordinates left over from another atom (or garbage), producing a wrong global virial whenever the field is defined via variables. Add the same unmap calls the constant-field branch uses. The atom-style energy variable was also summed as efield[0][3] (the value of atom 0) at all four tally sites instead of the per-atom values; index with the site atom like fix efield does. Coverity CID 1661598. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01YNvuaNpJNkbCKaAE8ngPQv --- src/EXTRA-FIX/fix_efield_tip4p.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/EXTRA-FIX/fix_efield_tip4p.cpp b/src/EXTRA-FIX/fix_efield_tip4p.cpp index 180db9481d1..c6016c271e4 100644 --- a/src/EXTRA-FIX/fix_efield_tip4p.cpp +++ b/src/EXTRA-FIX/fix_efield_tip4p.cpp @@ -458,7 +458,8 @@ void FixEfieldTIP4P::post_force(int vflag) } if (i == iO) { - if (estyle == ATOM) fsum[0] += efield[0][3]; + domain->unmap(xM, image[iO], unwrap); + if (estyle == ATOM) fsum[0] += efield[iO][3]; fsum[1] += fx; fsum[2] += fy; fsum[3] += fz; @@ -504,7 +505,8 @@ void FixEfieldTIP4P::post_force(int vflag) // tally global force - if (estyle == ATOM) fsum[0] += efield[0][3]; + domain->unmap(x[iH1], image[iH1], unwrap); + if (estyle == ATOM) fsum[0] += efield[iH1][3]; fsum[1] += fx; fsum[2] += fy; fsum[3] += fz; @@ -550,7 +552,8 @@ void FixEfieldTIP4P::post_force(int vflag) // tally global force - if (estyle == ATOM) fsum[0] += efield[0][3]; + domain->unmap(x[iH2], image[iH2], unwrap); + if (estyle == ATOM) fsum[0] += efield[iH2][3]; fsum[1] += fx; fsum[2] += fy; fsum[3] += fz; @@ -598,7 +601,7 @@ void FixEfieldTIP4P::post_force(int vflag) f[i][2] += fz; fsum[3] += fz; - if (estyle == ATOM) fsum[0] += efield[0][3]; + if (estyle == ATOM) fsum[0] += efield[i][3]; } } } From 0b3c4bf939608c0a17c323a3496461123ef81c2f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 3 Jul 2026 05:09:43 -0400 Subject: [PATCH 008/116] Do not tally stale sub-particle force data in pair line/lj and tri/lj The per-(i,j) energy/virial tally after the sub-particle loops passed fpair/delx/dely/delz values belonging to the last sub-particle pair inside the sub cutoff, or stale/uninitialized data when all sub-particle pairs were skipped, producing a garbage (potentially NaN) pairwise virial contribution for per-atom stress requests. The sub-particle forces are applied at the atom centers and the global virial comes from fdotr, so zero the pairwise force/displacement for discretized interactions and tally only the accumulated energy. Coverity CID 1661075 (pair line/lj); pair tri/lj shares the pattern. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01YNvuaNpJNkbCKaAE8ngPQv --- src/ASPHERE/pair_line_lj.cpp | 11 +++++++++++ src/ASPHERE/pair_tri_lj.cpp | 11 +++++++++++ 2 files changed, 22 insertions(+) diff --git a/src/ASPHERE/pair_line_lj.cpp b/src/ASPHERE/pair_line_lj.cpp index 8df7892ba83..f9ffa621343 100644 --- a/src/ASPHERE/pair_line_lj.cpp +++ b/src/ASPHERE/pair_line_lj.cpp @@ -306,6 +306,17 @@ void PairLineLJ::compute(int eflag, int vflag) } } + // for interactions involving a discretized line, fpair/delx/dely + // hold values of the last sub-particle pair inside the sub cutoff + // (or stale data if there was none); the sub-particle forces were + // applied at the atom centers and the virial is obtained via + // fdotr, so only tally the accumulated energy for those + + if ((line[i] >= 0) || (line[j] >= 0)) { + fpair = 0.0; + delx = dely = delz = 0.0; + } + if (evflag) ev_tally(i,j,nlocal,newton_pair,evdwl,0.0,fpair,delx,dely,delz); } } diff --git a/src/ASPHERE/pair_tri_lj.cpp b/src/ASPHERE/pair_tri_lj.cpp index e8fdb7b88d2..cb9c678a784 100644 --- a/src/ASPHERE/pair_tri_lj.cpp +++ b/src/ASPHERE/pair_tri_lj.cpp @@ -378,6 +378,17 @@ void PairTriLJ::compute(int eflag, int vflag) } } + // for interactions involving a discretized triangle, fpair/delx/ + // dely/delz hold values of the last sub-particle pair inside the + // sub cutoff (or stale data if there was none); the sub-particle + // forces were applied at the atom centers and the virial is + // obtained via fdotr, so only tally the accumulated energy + + if ((tri[i] >= 0) || (tri[j] >= 0)) { + fpair = 0.0; + delx = dely = delz = 0.0; + } + if (evflag) ev_tally(i,j,nlocal,newton_pair,evdwl,0.0,fpair,delx,dely,delz); } } From b35e22aa66826ebcbac2814792084a8fb0a5e43a Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 3 Jul 2026 05:11:04 -0400 Subject: [PATCH 009/116] Fix stale electric field contribution in pair lj/cut/coul/msm/dielectric When a pair was outside the Coulomb cutoff (reachable whenever the LJ cutoff is larger) or at near-zero distance, only forcecoul was zeroed while efield_i kept the value from a previously processed neighbor, so a garbage electric field contribution was accumulated. Zero both, as all sibling dielectric pair styles do. Also apply the same rsq > EPSILON guard to the Coulomb energy block that the force block uses, so coincident atoms cannot evaluate the energy from stale prefactor/egamma/table values. Coverity CIDs 1662310, 1662191, 1661019. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01YNvuaNpJNkbCKaAE8ngPQv --- src/DIELECTRIC/pair_lj_cut_coul_msm_dielectric.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/DIELECTRIC/pair_lj_cut_coul_msm_dielectric.cpp b/src/DIELECTRIC/pair_lj_cut_coul_msm_dielectric.cpp index 84a2c920202..0a3b132d5f0 100644 --- a/src/DIELECTRIC/pair_lj_cut_coul_msm_dielectric.cpp +++ b/src/DIELECTRIC/pair_lj_cut_coul_msm_dielectric.cpp @@ -189,7 +189,7 @@ void PairLJCutCoulMSMDielectric::compute(int eflag, int vflag) } } } else - forcecoul = 0.0; + efield_i = forcecoul = 0.0; if (rsq < cut_ljsq[itype][jtype]) { r6inv = r2inv * r2inv * r2inv; @@ -231,7 +231,7 @@ void PairLJCutCoulMSMDielectric::compute(int eflag, int vflag) } if (eflag) { - if (rsq < cut_coulsq) { + if (rsq < cut_coulsq && rsq > EPSILON) { if (!ncoultablebits || rsq <= tabinnersq) ecoul = prefactor * 0.5 * (etmp + eps[j]) * egamma; else { From 5aa9d912a93852b2f5cbcccf8599122d74bdf365 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 3 Jul 2026 05:12:25 -0400 Subject: [PATCH 010/116] Fix triclinic atom placement using uninitialized fractional coordinates in fix gemc The random insertion point for an exchange move is sampled on rank 0 (as fractional coordinates for triclinic boxes) and only the Cartesian coordinates are broadcast, but the owning-subdomain test read lamda[] on all ranks. Every rank except 0 tested uninitialized stack values, so the wrong rank (or no rank, or several) could claim the inserted atom, losing or duplicating atoms in triclinic GEMC runs. Recompute the fractional coordinates from the broadcast position on all ranks, as fix gcmc does. Coverity CID 1662351. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01YNvuaNpJNkbCKaAE8ngPQv --- src/MC/fix_gemc_mcmoves.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/MC/fix_gemc_mcmoves.cpp b/src/MC/fix_gemc_mcmoves.cpp index dc56555c434..c456330a1eb 100644 --- a/src/MC/fix_gemc_mcmoves.cpp +++ b/src/MC/fix_gemc_mcmoves.cpp @@ -292,6 +292,7 @@ void FixGEMC::attempt_atomic_exchange_full() MPI_Bcast(&coord, 3, MPI_DOUBLE, 0, world); if (triclinic_flag) { + domain->x2lamda(coord, lamda); if (lamda[0] >= sublo[0] && lamda[0] < subhi[0] && lamda[1] >= sublo[1] && lamda[1] < subhi[1] && lamda[2] >= sublo[2] && lamda[2] < subhi[2]) proc_flag = 1; From 39acc440a9991b1771f1ff1b258e72a191f4ccb4 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 3 Jul 2026 05:12:25 -0400 Subject: [PATCH 011/116] Fix momentum resampling for rigid bodies outside the fix group In FixRigidSmall::resample_momenta() (used by fix hmc) the body-frame angular velocity wbody is drawn only for bodies in the fix group, but the rotation into b->omega ran for every body, overwriting the angular velocity of non-group bodies with values rotated from uninitialized or stale wbody data. Move the rotation inside the group test. In the momentum-zeroing loop the group test dereferenced b before it was assigned to the current body, so the previous iteration's (or the first loop's last) body decided whether the current body's velocity was corrected. Assign b first. Coverity CID 1662345. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01YNvuaNpJNkbCKaAE8ngPQv --- src/RIGID/fix_rigid_small.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/RIGID/fix_rigid_small.cpp b/src/RIGID/fix_rigid_small.cpp index 2bef4d75eb7..0869f02ee00 100644 --- a/src/RIGID/fix_rigid_small.cpp +++ b/src/RIGID/fix_rigid_small.cpp @@ -2723,15 +2723,15 @@ void FixRigidSmall::resample_momenta(int groupbit, int mom_flag, class RanPark * else wbody[j] = 0.0; } + MathExtra::matvec(b->ex_space, b->ey_space, b->ez_space, wbody, b->omega); } - MathExtra::matvec(b->ex_space, b->ey_space, b->ez_space, wbody, b->omega); } if (mom_flag && (total_mass > 0.0)) { for (int j = 0; j < 3; j++) vcm[j] /= total_mass; for (int ibody = 0; ibody < nlocal; ibody++) { + b = &body[ibody]; if (mask[b->ilocal] & groupbit) { - b = &body[ibody]; for (int j = 0; j < 3; j++) b->vcm[j] -= vcm[j]; } } From 8c75fd5a593e97d820c45b382951c4ce6276ad88 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 3 Jul 2026 05:14:03 -0400 Subject: [PATCH 012/116] Avoid multiplying by uninitialized inverse distance in angle cosine/buck6d For 1-3 pairs beyond the LJ cutoff (a routine case) only forcebuck6d was zeroed, and fpair = forcebuck6d * r32inv multiplied zero by an uninitialized or stale value. If the stale bit pattern happens to be Inf or NaN the product is NaN and silently poisons the forces. Zero r32inv together with forcebuck6d. Coverity CID 1662641. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01YNvuaNpJNkbCKaAE8ngPQv --- src/MOFFF/angle_cosine_buck6d.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/MOFFF/angle_cosine_buck6d.cpp b/src/MOFFF/angle_cosine_buck6d.cpp index 0d8464e14a2..d7942ac6036 100644 --- a/src/MOFFF/angle_cosine_buck6d.cpp +++ b/src/MOFFF/angle_cosine_buck6d.cpp @@ -164,7 +164,7 @@ void AngleCosineBuck6d::compute(int eflag, int vflag) forcebuck6d = forcebuck6d*sme + ebuck6d*smf; ebuck6d *= sme; } - } else forcebuck6d = 0.0; + } else forcebuck6d = r32inv = 0.0; // add forces of additional LJ interaction From c02a80befdaf7812babef21a53502d8d339606fb Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 3 Jul 2026 05:14:03 -0400 Subject: [PATCH 013/116] Fix three copy-paste errors in the region cone hi-boundary parsing The hi-argument parsing block of the region cone constructor had three defects its correct lo-argument twin does not: - histyle was never initialized to CONSTANT (only set for v_ input), so shape_update() of a variable-shape cone with a constant hi bound tested an uninitialized member and could evaluate a garbage variable reference (Coverity CID 1661727). - The EDGE test checked arg[7] (the lo argument), so 'lo EDGE' with a numeric hi silently replaced the given hi value with the box edge. - The y-axis branch was missing its else, so 'hi INF' on a y-axis cone was immediately overwritten with the upper box boundary. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01YNvuaNpJNkbCKaAE8ngPQv --- src/region_cone.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/region_cone.cpp b/src/region_cone.cpp index 0f343c4869c..774f42d8a4e 100644 --- a/src/region_cone.cpp +++ b/src/region_cone.cpp @@ -215,7 +215,8 @@ RegCone::RegCone(LAMMPS *lmp, int narg, char **arg) : if (axis == 'z') lo = zscale * utils::numeric(FLERR, arg[7], false, lmp); } - if (strcmp(arg[8], "INF") == 0 || strcmp(arg[7], "EDGE") == 0) { + histyle = CONSTANT; + if (strcmp(arg[8], "INF") == 0 || strcmp(arg[8], "EDGE") == 0) { if (domain->box_exist == 0) error->all(FLERR, "Cannot use region INF or EDGE when box does not exist"); if (axis == 'x') { @@ -227,8 +228,9 @@ RegCone::RegCone(LAMMPS *lmp, int narg, char **arg) : hi = domain->boxhi_bound[0]; } if (axis == 'y') { - if (strcmp(arg[8], "INF") == 0) hi = BIG; - if (domain->triclinic == 0) + if (strcmp(arg[8], "INF") == 0) + hi = BIG; + else if (domain->triclinic == 0) hi = domain->boxhi[1]; else hi = domain->boxhi_bound[1]; From 3306e0807a680cadf85990f3704407c7d976192c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 3 Jul 2026 05:15:35 -0400 Subject: [PATCH 014/116] Fix garbage contact point for rim contacts with open-side region cylinders In surface_exterior() of region cylinder with an open side face (e.g. 'open 3'), a particle outside the radius closest to a cap was assigned the cap coordinate along the axis, but the two in-plane contact-point coordinates were only set for r < radius; with the side face open they remained uninitialized (or stale), so granular wall forces from fix wall/gran/region acted toward a garbage point. Project the contact point onto the cap rim in that case, in all three axis orientations. For closed cylinders this reproduces the values the curved-surface block already computed, so behavior there is unchanged. Coverity CIDs 1662234, 1662893, 1661299. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01YNvuaNpJNkbCKaAE8ngPQv --- src/region_cylinder.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/region_cylinder.cpp b/src/region_cylinder.cpp index 49bd8d8305a..5a8b8bdd435 100644 --- a/src/region_cylinder.cpp +++ b/src/region_cylinder.cpp @@ -538,6 +538,9 @@ int RegCylinder::surface_exterior(double *x, double cutoff) if (r < radius) { yp = x[1]; zp = x[2]; + } else { + yp = c1 + del1 * radius / r; + zp = c2 + del2 * radius / r; } d2prev = d2; } @@ -556,6 +559,9 @@ int RegCylinder::surface_exterior(double *x, double cutoff) if (r < radius) { yp = x[1]; zp = x[2]; + } else { + yp = c1 + del1 * radius / r; + zp = c2 + del2 * radius / r; } } } @@ -641,6 +647,9 @@ int RegCylinder::surface_exterior(double *x, double cutoff) if (r < radius) { xp = x[0]; zp = x[2]; + } else { + xp = c1 + del1 * radius / r; + zp = c2 + del2 * radius / r; } d2prev = d2; } @@ -659,6 +668,9 @@ int RegCylinder::surface_exterior(double *x, double cutoff) if (r < radius) { xp = x[0]; zp = x[2]; + } else { + xp = c1 + del1 * radius / r; + zp = c2 + del2 * radius / r; } } } @@ -744,6 +756,9 @@ int RegCylinder::surface_exterior(double *x, double cutoff) if (r < radius) { xp = x[0]; yp = x[1]; + } else { + xp = c1 + del1 * radius / r; + yp = c2 + del2 * radius / r; } d2prev = d2; } @@ -762,6 +777,9 @@ int RegCylinder::surface_exterior(double *x, double cutoff) if (r < radius) { xp = x[0]; yp = x[1]; + } else { + xp = c1 + del1 * radius / r; + yp = c2 + del2 * radius / r; } } } From 3a56ef5b29b03ab94aa95a33f4e15bcd6b1a1a0d Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 3 Jul 2026 05:17:02 -0400 Subject: [PATCH 015/116] Fix reads past the neighbor count in compute ackland/atom The mean squared separation was always averaged over 6 entries of the distance array even when an atom has fewer than 6 neighbors inside the cutoff, reading stale data from previous atoms or past the end of the allocation when no atom in the system has 6 neighbors. Atoms with fewer than 6 neighbors (free surfaces, small clusters, gas phase) got a garbage, run-to-run varying structure classification. Average over min(6, n) neighbors instead, in both the base and the OpenMP version, which classifies undercoordinated atoms deterministically (typically as UNKNOWN). Coverity CIDs 1661953, 2108 (OpenMP); the base class shared the flaw. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01YNvuaNpJNkbCKaAE8ngPQv --- src/EXTRA-COMPUTE/compute_ackland_atom.cpp | 10 ++++++---- src/OPENMP/compute_ackland_atom_omp.cpp | 10 ++++++---- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/EXTRA-COMPUTE/compute_ackland_atom.cpp b/src/EXTRA-COMPUTE/compute_ackland_atom.cpp index f527bd8a848..52b6bbf2f81 100644 --- a/src/EXTRA-COMPUTE/compute_ackland_atom.cpp +++ b/src/EXTRA-COMPUTE/compute_ackland_atom.cpp @@ -180,16 +180,18 @@ void ComputeAcklandAtom::compute_peratom() } } - // Select 6 nearest neighbors + // Select up to 6 nearest neighbors + // undercoordinated atoms (n < 6) use all their neighbors - select2(6,n,distsq,nearest); + const int nsel = MIN(6,n); + select2(nsel,n,distsq,nearest); // Mean squared separation double r0_sq = 0.; - for (j = 0; j < 6; j++) + for (j = 0; j < nsel; j++) r0_sq += distsq[j]; - r0_sq /= 6.; + if (nsel > 0) r0_sq /= nsel; // n0 near neighbors with: distsq<1.45*r0_sq // n1 near neighbors with: distsq<1.55*r0_sq diff --git a/src/OPENMP/compute_ackland_atom_omp.cpp b/src/OPENMP/compute_ackland_atom_omp.cpp index 27b62c5e15b..4ca5126b8f6 100644 --- a/src/OPENMP/compute_ackland_atom_omp.cpp +++ b/src/OPENMP/compute_ackland_atom_omp.cpp @@ -121,15 +121,17 @@ void ComputeAcklandAtomOMP::compute_peratom() } } - // Select 6 nearest neighbors + // Select up to 6 nearest neighbors + // undercoordinated atoms (n < 6) use all their neighbors - select2(6, n, t_distsq, t_nearest); + const int nsel = MIN(6, n); + select2(nsel, n, t_distsq, t_nearest); // Mean squared separation double r0_sq = 0.; - for (int j = 0; j < 6; j++) r0_sq += t_distsq[j]; - r0_sq /= 6.; + for (int j = 0; j < nsel; j++) r0_sq += t_distsq[j]; + if (nsel > 0) r0_sq /= nsel; // n0 near neighbors with: distsq<1.45*r0_sq // n1 near neighbors with: distsq<1.55*r0_sq From 3f9fb77bd8590ea0b535a1127cc9a75cb527e99e Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 3 Jul 2026 05:19:11 -0400 Subject: [PATCH 016/116] Initialize members read before first use in three fixes/computes - compute pressure/bocs: p_basis_type, N_basis, N_mol, and vavg were only assigned when fix bocs pushes its coarse-grained correction via send_cg_info(). Used without fix bocs, compute_scalar() compared the uninitialized basis type against BASIS_ANALYTIC (== 0, a common value for uninitialized memory) and could dereference the null phi_coeff or apply a garbage pressure correction. Initialize the basis type to -1 so no correction is applied until one is provided. (Coverity CID 1662610) - fix bond/react: a rate_limit keyword with a numeric Nlimit left RateLimit::var_flag (and var_id) uninitialized, so the rate-limit check could treat garbage as an equal-style variable reference and evaluate a garbage variable index. Use default member initializers. (Coverity CID 1661322) - fix controller: err/sumerr/deltaerr/olderr were uninitialized until the first end_of_step(), but compute_vector() can be invoked before that (e.g. thermo output at setup), reporting garbage PID terms. (Coverity CID 1662773) Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01YNvuaNpJNkbCKaAE8ngPQv --- src/BOCS/compute_pressure_bocs.cpp | 7 +++++++ src/EXTRA-FIX/fix_controller.cpp | 4 ++++ src/REACTION/fix_bond_react.h | 2 +- 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/BOCS/compute_pressure_bocs.cpp b/src/BOCS/compute_pressure_bocs.cpp index ff582f94baa..de1ffb86dc3 100644 --- a/src/BOCS/compute_pressure_bocs.cpp +++ b/src/BOCS/compute_pressure_bocs.cpp @@ -56,6 +56,13 @@ ComputePressureBocs::ComputePressureBocs(LAMMPS *lmp, int narg, char **arg) : p_match_flag = 0; phi_coeff = nullptr; + // no pressure correction is applied until fix bocs provides one via send_cg_info() + + p_basis_type = -1; + N_basis = 0; + N_mol = 0; + vavg = 0.0; + // store temperature ID used by pressure computation // ensure it is valid for temperature computation diff --git a/src/EXTRA-FIX/fix_controller.cpp b/src/EXTRA-FIX/fix_controller.cpp index be5c43eefc7..62d8641aea4 100644 --- a/src/EXTRA-FIX/fix_controller.cpp +++ b/src/EXTRA-FIX/fix_controller.cpp @@ -107,6 +107,10 @@ FixController::FixController(LAMMPS *lmp, int narg, char **arg) : control = input->variable->compute_equal(ivariable); firsttime = 1; + + // so compute_vector() returns zeros until the first end_of_step() + + err = olderr = sumerr = deltaerr = 0.0; } /* ---------------------------------------------------------------------- */ diff --git a/src/REACTION/fix_bond_react.h b/src/REACTION/fix_bond_react.h index cb7f1d8523d..11eb2e99d3b 100644 --- a/src/REACTION/fix_bond_react.h +++ b/src/REACTION/fix_bond_react.h @@ -279,7 +279,7 @@ class FixBondReact : public Fix { std::vector addatoms; struct RateLimit { - int Nrxns, var_flag, var_id, Nlimit, Nsteps; + int Nrxns = 0, var_flag = 0, var_id = -1, Nlimit = 0, Nsteps = 0; std::vector rxnIDs; std::vector rxn_names; std::deque store_rxn_counts; From fa154ae086761d11a19cc9e6dcff1d4315675fe8 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 3 Jul 2026 05:37:07 -0400 Subject: [PATCH 017/116] Preserve the limit_damping setting of granular pair styles across restarts The limit_damping flag parsed by pair styles gran/hooke, gran/hooke/history, and gran/hertz/history was not written to or read from the restart file, and settings() is not called when reading a restart, so after read_restart the flag was uninitialized: the damping limitation could silently turn itself on or off. Append it to the shared restart settings I/O of the base class. Coverity CID 1661997. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01YNvuaNpJNkbCKaAE8ngPQv --- src/GRANULAR/pair_gran_hooke_history.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/GRANULAR/pair_gran_hooke_history.cpp b/src/GRANULAR/pair_gran_hooke_history.cpp index e6f2190151b..76e4430e9f6 100644 --- a/src/GRANULAR/pair_gran_hooke_history.cpp +++ b/src/GRANULAR/pair_gran_hooke_history.cpp @@ -591,6 +591,7 @@ void PairGranHookeHistory::write_restart_settings(FILE *fp) fwrite(&gammat, sizeof(double), 1, fp); fwrite(&xmu, sizeof(double), 1, fp); fwrite(&dampflag, sizeof(int), 1, fp); + fwrite(&limit_damping, sizeof(int), 1, fp); } /* ---------------------------------------------------------------------- @@ -606,6 +607,7 @@ void PairGranHookeHistory::read_restart_settings(FILE *fp) utils::sfread(FLERR, &gammat, sizeof(double), 1, fp, nullptr, error); utils::sfread(FLERR, &xmu, sizeof(double), 1, fp, nullptr, error); utils::sfread(FLERR, &dampflag, sizeof(int), 1, fp, nullptr, error); + utils::sfread(FLERR, &limit_damping, sizeof(int), 1, fp, nullptr, error); } MPI_Bcast(&kn, 1, MPI_DOUBLE, 0, world); MPI_Bcast(&kt, 1, MPI_DOUBLE, 0, world); @@ -613,6 +615,7 @@ void PairGranHookeHistory::read_restart_settings(FILE *fp) MPI_Bcast(&gammat, 1, MPI_DOUBLE, 0, world); MPI_Bcast(&xmu, 1, MPI_DOUBLE, 0, world); MPI_Bcast(&dampflag, 1, MPI_INT, 0, world); + MPI_Bcast(&limit_damping, 1, MPI_INT, 0, world); } /* ---------------------------------------------------------------------- */ From 307e0550de50f37c32cda498dc312a8130ad4ca5 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 3 Jul 2026 05:37:07 -0400 Subject: [PATCH 018/116] Preserve all pair dsmc global settings across restarts Of the six pair_style dsmc arguments only max_cell_size and seed were stored in the restart file: weighting, T_ref (and the derived kT_ref), recompute_vsigmamax_stride, and vsigmamax_samples were uninitialized after read_restart, giving garbage collision statistics. Save and restore all of them and re-derive kT_ref. Coverity CID 1661563. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01YNvuaNpJNkbCKaAE8ngPQv --- src/MC/pair_dsmc.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/MC/pair_dsmc.cpp b/src/MC/pair_dsmc.cpp index 9f36d2c5dc1..73f5eb7fc7c 100644 --- a/src/MC/pair_dsmc.cpp +++ b/src/MC/pair_dsmc.cpp @@ -368,6 +368,10 @@ void PairDSMC::write_restart_settings(FILE *fp) fwrite(&cut_global,sizeof(double),1,fp); fwrite(&max_cell_size,sizeof(double),1,fp); fwrite(&seed,sizeof(int),1,fp); + fwrite(&weighting,sizeof(double),1,fp); + fwrite(&T_ref,sizeof(double),1,fp); + fwrite(&recompute_vsigmamax_stride,sizeof(int),1,fp); + fwrite(&vsigmamax_samples,sizeof(int),1,fp); fwrite(&offset_flag,sizeof(int),1,fp); fwrite(&mix_flag,sizeof(int),1,fp); } @@ -382,6 +386,10 @@ void PairDSMC::read_restart_settings(FILE *fp) utils::sfread(FLERR,&cut_global,sizeof(double),1,fp,nullptr,error); utils::sfread(FLERR,&max_cell_size,sizeof(double),1,fp,nullptr,error); utils::sfread(FLERR,&seed,sizeof(int),1,fp,nullptr,error); + utils::sfread(FLERR,&weighting,sizeof(double),1,fp,nullptr,error); + utils::sfread(FLERR,&T_ref,sizeof(double),1,fp,nullptr,error); + utils::sfread(FLERR,&recompute_vsigmamax_stride,sizeof(int),1,fp,nullptr,error); + utils::sfread(FLERR,&vsigmamax_samples,sizeof(int),1,fp,nullptr,error); utils::sfread(FLERR,&offset_flag,sizeof(int),1,fp,nullptr,error); utils::sfread(FLERR,&mix_flag,sizeof(int),1,fp,nullptr,error); } @@ -389,9 +397,15 @@ void PairDSMC::read_restart_settings(FILE *fp) MPI_Bcast(&cut_global,1,MPI_DOUBLE,0,world); MPI_Bcast(&max_cell_size,1,MPI_DOUBLE,0,world); MPI_Bcast(&seed,1,MPI_INT,0,world); + MPI_Bcast(&weighting,1,MPI_DOUBLE,0,world); + MPI_Bcast(&T_ref,1,MPI_DOUBLE,0,world); + MPI_Bcast(&recompute_vsigmamax_stride,1,MPI_INT,0,world); + MPI_Bcast(&vsigmamax_samples,1,MPI_INT,0,world); MPI_Bcast(&offset_flag,1,MPI_INT,0,world); MPI_Bcast(&mix_flag,1,MPI_INT,0,world); + kT_ref = force->boltz*T_ref; + // initialize Marsaglia RNG with processor-unique seed // same seed that pair_style command initially specified From 3ae573ad9dd039a5409d176a2a713e081644001c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 3 Jul 2026 05:37:07 -0400 Subject: [PATCH 019/116] Preserve the seqav/seqdep setting of oxDNA/oxRNA pair styles across restarts The seqdepflag chosen with the seqav/seqdep pair_coeff argument of pair styles oxdna/hbond, oxdna/stk, and oxrna2/stk (and their oxdna2/ oxrna2 variants derived from them) was not stored in the restart file, but init_one() uses it to decide whether the sequence-dependence scaling of epsilon and shift is applied when symmetrizing the type pairs. After read_restart an uninitialized flag could silently switch between sequence-averaged and sequence-dependent interactions. Coverity CIDs 1661087, 1661247; pair oxdna/stk shared the flaw. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01YNvuaNpJNkbCKaAE8ngPQv --- src/CG-DNA/pair_oxdna_hbond.cpp | 3 +++ src/CG-DNA/pair_oxdna_stk.cpp | 3 +++ src/CG-DNA/pair_oxrna2_stk.cpp | 3 +++ 3 files changed, 9 insertions(+) diff --git a/src/CG-DNA/pair_oxdna_hbond.cpp b/src/CG-DNA/pair_oxdna_hbond.cpp index c97fbe0b57f..6aace63d22f 100644 --- a/src/CG-DNA/pair_oxdna_hbond.cpp +++ b/src/CG-DNA/pair_oxdna_hbond.cpp @@ -1259,6 +1259,7 @@ void PairOxdnaHbond::write_restart_settings(FILE *fp) fwrite(&offset_flag,sizeof(int),1,fp); fwrite(&mix_flag,sizeof(int),1,fp); fwrite(&tail_flag,sizeof(int),1,fp); + fwrite(&seqdepflag,sizeof(int),1,fp); } /* ---------------------------------------------------------------------- @@ -1272,10 +1273,12 @@ void PairOxdnaHbond::read_restart_settings(FILE *fp) utils::sfread(FLERR,&offset_flag,sizeof(int),1,fp,nullptr,error); utils::sfread(FLERR,&mix_flag,sizeof(int),1,fp,nullptr,error); utils::sfread(FLERR,&tail_flag,sizeof(int),1,fp,nullptr,error); + utils::sfread(FLERR,&seqdepflag,sizeof(int),1,fp,nullptr,error); } MPI_Bcast(&offset_flag,1,MPI_INT,0,world); MPI_Bcast(&mix_flag,1,MPI_INT,0,world); MPI_Bcast(&tail_flag,1,MPI_INT,0,world); + MPI_Bcast(&seqdepflag,1,MPI_INT,0,world); } /* ---------------------------------------------------------------------- */ diff --git a/src/CG-DNA/pair_oxdna_stk.cpp b/src/CG-DNA/pair_oxdna_stk.cpp index 8d6941156cc..bfda4653e34 100644 --- a/src/CG-DNA/pair_oxdna_stk.cpp +++ b/src/CG-DNA/pair_oxdna_stk.cpp @@ -1298,6 +1298,7 @@ void PairOxdnaStk::write_restart_settings(FILE *fp) fwrite(&offset_flag,sizeof(int),1,fp); fwrite(&mix_flag,sizeof(int),1,fp); fwrite(&tail_flag,sizeof(int),1,fp); + fwrite(&seqdepflag,sizeof(int),1,fp); } /* ---------------------------------------------------------------------- @@ -1311,10 +1312,12 @@ void PairOxdnaStk::read_restart_settings(FILE *fp) utils::sfread(FLERR,&offset_flag,sizeof(int),1,fp,nullptr,error); utils::sfread(FLERR,&mix_flag,sizeof(int),1,fp,nullptr,error); utils::sfread(FLERR,&tail_flag,sizeof(int),1,fp,nullptr,error); + utils::sfread(FLERR,&seqdepflag,sizeof(int),1,fp,nullptr,error); } MPI_Bcast(&offset_flag,1,MPI_INT,0,world); MPI_Bcast(&mix_flag,1,MPI_INT,0,world); MPI_Bcast(&tail_flag,1,MPI_INT,0,world); + MPI_Bcast(&seqdepflag,1,MPI_INT,0,world); } /* ---------------------------------------------------------------------- */ diff --git a/src/CG-DNA/pair_oxrna2_stk.cpp b/src/CG-DNA/pair_oxrna2_stk.cpp index a6a8b64fe91..e0efc0b9567 100644 --- a/src/CG-DNA/pair_oxrna2_stk.cpp +++ b/src/CG-DNA/pair_oxrna2_stk.cpp @@ -1403,6 +1403,7 @@ void PairOxrna2Stk::write_restart_settings(FILE *fp) fwrite(&offset_flag,sizeof(int),1,fp); fwrite(&mix_flag,sizeof(int),1,fp); fwrite(&tail_flag,sizeof(int),1,fp); + fwrite(&seqdepflag,sizeof(int),1,fp); } /* ---------------------------------------------------------------------- @@ -1416,10 +1417,12 @@ void PairOxrna2Stk::read_restart_settings(FILE *fp) utils::sfread(FLERR,&offset_flag,sizeof(int),1,fp,nullptr,error); utils::sfread(FLERR,&mix_flag,sizeof(int),1,fp,nullptr,error); utils::sfread(FLERR,&tail_flag,sizeof(int),1,fp,nullptr,error); + utils::sfread(FLERR,&seqdepflag,sizeof(int),1,fp,nullptr,error); } MPI_Bcast(&offset_flag,1,MPI_INT,0,world); MPI_Bcast(&mix_flag,1,MPI_INT,0,world); MPI_Bcast(&tail_flag,1,MPI_INT,0,world); + MPI_Bcast(&seqdepflag,1,MPI_INT,0,world); } /* ---------------------------------------------------------------------- */ From a36bbc74ae88fc5f38e2c1163756e71be5f3a671 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 3 Jul 2026 05:37:07 -0400 Subject: [PATCH 020/116] Preserve pair eff/cut settings and ECP parameters across restarts Only the global cutoff was stored in the restart file. The limit/eradius and pressure/evirials flags, the per-type ECP element assignments, and the Pauli core parameters (including per-type values customized via pair_coeff) were all uninitialized after read_restart, and the unit-conversion constants h2e/hhmss2e (flagged by Coverity) were garbage in every force evaluation. Serialize the settings state and re-derive the unit constants the same way settings() does. Coverity CID 1662077. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01YNvuaNpJNkbCKaAE8ngPQv --- src/EFF/pair_eff_cut.cpp | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/src/EFF/pair_eff_cut.cpp b/src/EFF/pair_eff_cut.cpp index 34ae0dac474..9ee21e98dad 100644 --- a/src/EFF/pair_eff_cut.cpp +++ b/src/EFF/pair_eff_cut.cpp @@ -997,6 +997,15 @@ void PairEffCut::write_restart_settings(FILE *fp) fwrite(&cut_global,sizeof(double),1,fp); fwrite(&offset_flag,sizeof(int),1,fp); fwrite(&mix_flag,sizeof(int),1,fp); + fwrite(&limit_eradius_flag,sizeof(int),1,fp); + fwrite(&pressure_with_evirials_flag,sizeof(int),1,fp); + fwrite(&ecp_found,sizeof(int),1,fp); + fwrite(ecp_type,sizeof(int),100,fp); + fwrite(PAULI_CORE_A,sizeof(double),100,fp); + fwrite(PAULI_CORE_B,sizeof(double),100,fp); + fwrite(PAULI_CORE_C,sizeof(double),100,fp); + fwrite(PAULI_CORE_D,sizeof(double),100,fp); + fwrite(PAULI_CORE_E,sizeof(double),100,fp); } /* ---------------------------------------------------------------------- @@ -1009,10 +1018,38 @@ void PairEffCut::read_restart_settings(FILE *fp) utils::sfread(FLERR,&cut_global,sizeof(double),1,fp,nullptr,error); utils::sfread(FLERR,&offset_flag,sizeof(int),1,fp,nullptr,error); utils::sfread(FLERR,&mix_flag,sizeof(int),1,fp,nullptr,error); + utils::sfread(FLERR,&limit_eradius_flag,sizeof(int),1,fp,nullptr,error); + utils::sfread(FLERR,&pressure_with_evirials_flag,sizeof(int),1,fp,nullptr,error); + utils::sfread(FLERR,&ecp_found,sizeof(int),1,fp,nullptr,error); + utils::sfread(FLERR,ecp_type,sizeof(int),100,fp,nullptr,error); + utils::sfread(FLERR,PAULI_CORE_A,sizeof(double),100,fp,nullptr,error); + utils::sfread(FLERR,PAULI_CORE_B,sizeof(double),100,fp,nullptr,error); + utils::sfread(FLERR,PAULI_CORE_C,sizeof(double),100,fp,nullptr,error); + utils::sfread(FLERR,PAULI_CORE_D,sizeof(double),100,fp,nullptr,error); + utils::sfread(FLERR,PAULI_CORE_E,sizeof(double),100,fp,nullptr,error); } MPI_Bcast(&cut_global,1,MPI_DOUBLE,0,world); MPI_Bcast(&offset_flag,1,MPI_INT,0,world); MPI_Bcast(&mix_flag,1,MPI_INT,0,world); + MPI_Bcast(&limit_eradius_flag,1,MPI_INT,0,world); + MPI_Bcast(&pressure_with_evirials_flag,1,MPI_INT,0,world); + MPI_Bcast(&ecp_found,1,MPI_INT,0,world); + MPI_Bcast(ecp_type,100,MPI_INT,0,world); + MPI_Bcast(PAULI_CORE_A,100,MPI_DOUBLE,0,world); + MPI_Bcast(PAULI_CORE_B,100,MPI_DOUBLE,0,world); + MPI_Bcast(PAULI_CORE_C,100,MPI_DOUBLE,0,world); + MPI_Bcast(PAULI_CORE_D,100,MPI_DOUBLE,0,world); + MPI_Bcast(PAULI_CORE_E,100,MPI_DOUBLE,0,world); + + // h2e and hhmss2e are derived from the unit system, same as in settings() + + if (force->qqr2e==332.06371) { // i.e. Real units chosen + h2e = 627.509; // hartree->kcal/mol + hhmss2e = 175.72044219620075; // hartree->kcal/mol * (Bohr->Angstrom)^2 + } else if (force->qqr2e==1.0) { // electron units + h2e = 1.0; + hhmss2e = 1.0; + } else error->all(FLERR,"Check your units"); } /* ---------------------------------------------------------------------- From c93a835c6d7aecb2d218b922d17891ad6aa1be47 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 3 Jul 2026 05:42:26 -0400 Subject: [PATCH 021/116] Guard against invalid variable references crashing instead of erroring - next command: listing the same index/loop variable twice made the first increment exhaust and remove it, so the second lookup returned -1 and variables[-1] was incremented (out-of-bounds write). Reject duplicate variable names with a clear error. (Coverity CID 1661328) - variable formulas: a py_-prefixed function name that does not match any variable passed find() == -1 straight into variables[pyvar], an out-of-bounds read, instead of the intended error message. (Coverity CID 1661224) - fix store/state: an atom-style variable value dereferenced the per-atom storage array unconditionally, which is a null pointer on procs without atoms; fix ave/atom already guards the same call. (Coverity CID 1662474) - fix ave/grid: a bracketed atom-style variable reference (v_name[2]) was accepted but has no array to read, so accumulation dereferenced an uninitialized array pointer; reject it at parse time like other averaging styles do. Also correct three error messages that referred to fix ave/atom. (Coverity CID 1661185) Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01YNvuaNpJNkbCKaAE8ngPQv --- src/fix_ave_grid.cpp | 6 ++++-- src/fix_store_state.cpp | 4 +++- src/variable.cpp | 10 +++++++++- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/fix_ave_grid.cpp b/src/fix_ave_grid.cpp index cdddd58fd09..898429d84b1 100644 --- a/src/fix_ave_grid.cpp +++ b/src/fix_ave_grid.cpp @@ -336,11 +336,13 @@ FixAveGrid::FixAveGrid(LAMMPS *lmp, int narg, char **arg) : utils::errorurl(7)); } else if (which[i] == ArgInfo::VARIABLE) { + if (argindex[i]) + error->all(FLERR, iarg_orig[i], "Fix ave/grid variable {} cannot be indexed", ids[i]); int ivariable = input->variable->find(ids[i]); if (ivariable < 0) - error->all(FLERR, iarg_orig[i], "Variable name for fix ave/atom does not exist"); + error->all(FLERR, iarg_orig[i], "Variable name for fix ave/grid does not exist"); if (input->variable->atomstyle(ivariable) == 0) - error->all(FLERR, iarg_orig[i], "Fix ave/atom variable is not atom-style variable"); + error->all(FLERR, iarg_orig[i], "Fix ave/grid variable is not atom-style variable"); } } } diff --git a/src/fix_store_state.cpp b/src/fix_store_state.cpp index d2e707135d7..412ce8774ef 100644 --- a/src/fix_store_state.cpp +++ b/src/fix_store_state.cpp @@ -664,9 +664,11 @@ void FixStoreState::end_of_step() } // evaluate atom-style variable + // avalues is null when there are no atoms on this proc } else if (val.which == ArgInfo::VARIABLE) { - input->variable->compute_atom(val.val.v, igroup, &avalues[0][m], values.size(),0); + if (avalues) input->variable->compute_atom(val.val.v, igroup, &avalues[0][m], values.size(),0); + else input->variable->compute_atom(val.val.v, igroup, nullptr, values.size(),0); // access custom atom vector/array fields diff --git a/src/variable.cpp b/src/variable.cpp index f2eb40fabd8..a9c4bb32adf 100644 --- a/src/variable.cpp +++ b/src/variable.cpp @@ -774,6 +774,14 @@ int Variable::next(int narg, char **arg) error->all(FLERR,"All variables in next command must have same style"); } + // reject duplicate variable names: incrementing the first copy may + // exhaust and remove the variable, leaving a dangling reference + + for (int iarg = 0; iarg < narg-1; iarg++) + for (int jarg = iarg+1; jarg < narg; jarg++) + if (strcmp(arg[iarg],arg[jarg]) == 0) + error->all(FLERR, jarg, "Duplicate variable '{}' in next command", arg[jarg]); + // invalid styles: STRING, EQUAL, WORLD, GETENV, ATOM, VECTOR, // FORMAT, PYTHON, TIMER, INTERNAL @@ -4258,7 +4266,7 @@ int Variable::math_function(char *word, char *contents, Tree **tree, Tree **tree // pyvar = index of python-style variable which invokes Python function int pyvar = find(&word[3]); - if (variables[pyvar].style != PYTHON) + if ((pyvar < 0) || (variables[pyvar].style != PYTHON)) print_var_error(FLERR,"Invalid python function variable name",ivar); // check that wrapper matches Python function From 679525dae113464e4a6343c77863547c483ecb62 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 3 Jul 2026 05:42:26 -0400 Subject: [PATCH 022/116] Honor the documented default output file of dynamical_matrix and third_order Both commands document a default output file name (dynmat.dyn and third_order.dat), but the file was only opened when the file keyword was given: without it third_order crashed on rank 0 calling ferror() on a null FILE pointer after every written block, and dynamical_matrix silently discarded the entire matrix. Open the file unconditionally and align third_order's default name with its documentation ('Third Order.dat' -> 'third_order.dat'). Coverity CID 1661320. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01YNvuaNpJNkbCKaAE8ngPQv --- src/PHONON/dynamical_matrix.cpp | 7 ++++--- src/PHONON/third_order.cpp | 9 +++++---- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/PHONON/dynamical_matrix.cpp b/src/PHONON/dynamical_matrix.cpp index 5b946eb41f4..caa77addaa8 100644 --- a/src/PHONON/dynamical_matrix.cpp +++ b/src/PHONON/dynamical_matrix.cpp @@ -221,9 +221,10 @@ void DynamicalMatrix::options(int narg, char **arg) iarg += 2; } else error->all(FLERR,"Illegal dynamical_matrix command"); } - if (file_flag == 1) { - openfile(filename); - } + // always open the output file (documented default name unless changed + // with the file keyword); without it the matrix was silently discarded + + openfile(filename); } /* ---------------------------------------------------------------------- diff --git a/src/PHONON/third_order.cpp b/src/PHONON/third_order.cpp index b51bd146aba..5cee775fa38 100644 --- a/src/PHONON/third_order.cpp +++ b/src/PHONON/third_order.cpp @@ -212,7 +212,7 @@ void ThirdOrder::options(int narg, char **arg) { if (narg < 0) error->all(FLERR,"Illegal Third Order command"); int iarg = 0; - const char *filename = "Third Order.dat"; + const char *filename = "third_order.dat"; while (iarg < narg) { if (strcmp(arg[iarg],"binary") == 0) { @@ -238,9 +238,10 @@ void ThirdOrder::options(int narg, char **arg) iarg += 2; } else error->all(FLERR,"Illegal Third Order command"); } - if (file_flag == 1 && me == 0) { - openfile(filename); - } + // always open the output file (documented default name unless changed + // with the file keyword); without it rank 0 wrote to a null FILE pointer + + openfile(filename); } /* ---------------------------------------------------------------------- From 23ef94c116611f5adb8d72fb2b8f85db8b4c709d Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 3 Jul 2026 05:51:36 -0400 Subject: [PATCH 023/116] Harden potential file parsing in pair styles agni and rann pair agni: parameter tags (eta, Rc, n_train, ...) appearing before the n_elements and interaction headers dereferenced a null params array with an uninitialized section index; reject such malformed files with a clean error. (Coverity CID 1662437) pair rann: none of the comment/blank-line skip loops checked the fgets return value. Since fgets leaves the buffer unchanged at EOF, an empty or comment-only potential file - or a valid one with trailing blank lines - spun forever re-reading EOF. Error out (or fall through to the existing EOF handling) when the file ends. (Coverity CID 1662231) Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01YNvuaNpJNkbCKaAE8ngPQv --- src/MISC/pair_agni.cpp | 9 +++++++++ src/ML-RANN/pair_rann.cpp | 4 ++++ 2 files changed, 13 insertions(+) diff --git a/src/MISC/pair_agni.cpp b/src/MISC/pair_agni.cpp index 4c99e72dede..790bdf67279 100644 --- a/src/MISC/pair_agni.cpp +++ b/src/MISC/pair_agni.cpp @@ -281,6 +281,7 @@ void PairAGNI::read_file(char *filename) fp_counter = 0; wantdata = -1; + curparam = -1; // read potential file if (comm->me == 0) { @@ -294,6 +295,14 @@ void PairAGNI::read_file(char *filename) if (wantdata == -1) { std::string tag = values.next_string(); + // these tags describe the current interaction section and + // require that n_elements and interaction were seen before + + if (((curparam < 0) || !params) && + ((tag == "eta") || (tag == "gwidth") || (tag == "Rc") || (tag == "n_train") || + (tag == "sigma") || (tag == "b") || (tag == "endVar"))) + error->all(FLERR,"Invalid AGNI potential file"); + if (tag == "n_elements") { nparams = values.next_int(); diff --git a/src/ML-RANN/pair_rann.cpp b/src/ML-RANN/pair_rann.cpp index c588539b7e8..4eee7f9510d 100644 --- a/src/ML-RANN/pair_rann.cpp +++ b/src/ML-RANN/pair_rann.cpp @@ -362,10 +362,12 @@ void PairRANN::read_file(char *filename) fp = utils::open_potential(filename,lmp,nullptr); if (fp == nullptr) {error->one(FLERR,"Cannot open RANN potential file");} ptr=fgets(linetemp,longline,fp); + if (ptr == nullptr) error->one(FLERR,"Unexpected end of RANN potential file"); linenum++; strtemp=utils::trim_comment(linetemp); while (strtemp.empty()) { ptr=fgets(linetemp,longline,fp); + if (ptr == nullptr) error->one(FLERR,"Unexpected end of RANN potential file"); strtemp=utils::trim_comment(linetemp); linenum++; } @@ -385,6 +387,7 @@ void PairRANN::read_file(char *filename) strtemp=utils::trim_comment(linetemp); while (strtemp.empty()) { ptr=fgets(linetemp,longline,fp); + if (ptr == nullptr) error->one(FLERR,"Unexpected end of RANN potential file"); strtemp=utils::trim_comment(linetemp); linenum++; } @@ -411,6 +414,7 @@ void PairRANN::read_file(char *filename) strtemp=utils::trim_comment(linetemp); while (strtemp.empty()) { ptr=fgets(linetemp,longline,fp); + if (ptr == nullptr) break; strtemp=utils::trim_comment(linetemp); linenum++; } From 5285df6831b47d05b458c452fb284560aa6a14f5 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 3 Jul 2026 05:51:36 -0400 Subject: [PATCH 024/116] Fix integer overflow before the intended 64-bit handling in two places MLIAPData: natoms was narrowed from bigint to int before the too-many-atoms check, so the check compared already-truncated 32-bit arithmetic against MAXSMALLINT and could never trigger; the actual overflow then silently corrupted the global array dimensions. Do the check on atom->natoms in bigint arithmetic first. (CIDs 1661505, 1662169) NPair::coord2bin_big: the bin index was computed with 32-bit multiplications and only widened on assignment, defeating the purpose of the bigint variant that exists precisely for bin counts beyond 2^31 (hash bins for multi-collection neighbor lists). (CIDs 1662186, 1661428) Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01YNvuaNpJNkbCKaAE8ngPQv --- src/ML-IAP/mliap_data.cpp | 5 ++--- src/npair.cpp | 4 +++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/ML-IAP/mliap_data.cpp b/src/ML-IAP/mliap_data.cpp index 1ca57e27457..5830309b529 100644 --- a/src/ML-IAP/mliap_data.cpp +++ b/src/ML-IAP/mliap_data.cpp @@ -50,13 +50,12 @@ MLIAPData::MLIAPData(LAMMPS *lmp, int gradgradflag_in, int *map_in, class MLIAPM ndims_virial = 6; yoffset = nparams * nelements; zoffset = 2 * yoffset; - natoms = atom->natoms; - // must check before assigning bigint expression to regular int - if (1 + ndims_force * natoms + ndims_virial > MAXSMALLINT) + if (1 + ndims_force * atom->natoms + ndims_virial > MAXSMALLINT) error->all(FLERR, "Too many atoms for MLIAP package"); + natoms = atom->natoms; size_array_rows = 1 + ndims_force * natoms + ndims_virial; size_array_cols = nparams * nelements + 1; size_gradforce = ndims_force * nparams * nelements; diff --git a/src/npair.cpp b/src/npair.cpp index 7ad48c5435d..31386f35a74 100644 --- a/src/npair.cpp +++ b/src/npair.cpp @@ -318,6 +318,8 @@ int NPair::coord2bin(double *x, int ic) /* ---------------------------------------------------------------------- bigint version for hash bins + NOTE: the bin index must be computed in 64-bit: this variant exists + for bin counts that overflow 32-bit integers ------------------------------------------------------------------------- */ bigint NPair::coord2bin_big(double *x, int ic) @@ -355,6 +357,6 @@ bigint NPair::coord2bin_big(double *x, int ic) ix -= mbinxlo_multi[ic]; iy -= mbinylo_multi[ic]; iz -= mbinzlo_multi[ic]; - ibin = iz*mbiny_multi[ic]*mbinx_multi[ic] + iy*mbinx_multi[ic] + ix; + ibin = (bigint) iz*mbiny_multi[ic]*mbinx_multi[ic] + (bigint) iy*mbinx_multi[ic] + ix; return ibin; } From ac8f8456c2c02bcf2046e8af1100b778c1746605 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 3 Jul 2026 05:51:36 -0400 Subject: [PATCH 025/116] Fix error-path destructor safety and missing size guards - MyPoolChunk: on invalid constructor parameters the early return left npage and the page/freelist pointers uninitialized, so destroying the partially constructed pool freed garbage pointers. Initialize all destructor-relevant members first and validate the parameters before any allocation. (Coverity CIDs 1661308, 1661903) - fix halt: the MPI_Request array allocated for universe-wide halt messaging was never freed. (Coverity CID 1661334) - fix vector: the nmax keyword accepted values beyond 2^31; the storage grow() then truncated while the bigint ring index did not, an eventual out-of-bounds write. Reject such values. (CID 1662309) - fix imd: the protocol-v3 message length is computed in 32-bit as up to 36 bytes per atom, overflowing for more than ~59M atoms despite the existing atom-count check; tighten that check so the message length always fits. (Coverity CID 1662882) Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01YNvuaNpJNkbCKaAE8ngPQv --- src/MISC/fix_imd.cpp | 7 ++++++- src/fix_halt.cpp | 1 + src/fix_vector.cpp | 2 +- src/my_pool_chunk.cpp | 17 ++++++++++------- 4 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/MISC/fix_imd.cpp b/src/MISC/fix_imd.cpp index bbe24af929c..bf6eb7af7ac 100644 --- a/src/MISC/fix_imd.cpp +++ b/src/MISC/fix_imd.cpp @@ -550,7 +550,12 @@ FixIMD::FixIMD(LAMMPS *lmp, int narg, char **arg) : } bigint n = group->count(igroup); - if (n > MAXSMALLINT) error->all(FLERR,"Too many atoms for fix imd"); + + // the message buffer holds up to 3 groups of 3 floats per atom plus + // headers and its length must fit into a signed 32-bit integer + + if (3*3*4*n + 5*IMDHEADERSIZE + 60 > MAXSMALLINT) + error->all(FLERR,"Too many atoms for fix imd"); num_coords = static_cast (n); // Define MPI dtype for passing x/v/f data diff --git a/src/fix_halt.cpp b/src/fix_halt.cpp index a2d309a89ee..3e7d08c659a 100644 --- a/src/fix_halt.cpp +++ b/src/fix_halt.cpp @@ -300,6 +300,7 @@ void FixHalt::end_of_step() MPI_Wait(req + i, MPI_STATUS_IGNORE); MPI_Request_free(req + i); } + delete[] req; } // hard halt -> exit LAMMPS diff --git a/src/fix_vector.cpp b/src/fix_vector.cpp index b3325a8d39a..17c7b3983a7 100644 --- a/src/fix_vector.cpp +++ b/src/fix_vector.cpp @@ -68,7 +68,7 @@ FixVector::FixVector(LAMMPS *lmp, int narg, char **arg) : if (strcmp(arg[iarg], "nmax") == 0) { if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "fix vector nmax", error); nmaxval = utils::bnumeric(FLERR, arg[iarg + 1], false, lmp); - if (nmaxval < 1) error->all(FLERR, "Invalid nmax value"); + if ((nmaxval < 1) || (nmaxval > MAXSMALLINT)) error->all(FLERR, "Invalid nmax value"); iarg += 2; } else { error->all(FLERR, "Unknown fix vector keyword: {}", arg[iarg]); diff --git a/src/my_pool_chunk.cpp b/src/my_pool_chunk.cpp index 7f8463ddb42..f16bd184e83 100644 --- a/src/my_pool_chunk.cpp +++ b/src/my_pool_chunk.cpp @@ -55,14 +55,22 @@ MyPoolChunk::MyPoolChunk(int user_minchunk, int user_maxchunk, int user_nbin, chunkperpage = user_chunkperpage; pagedelta = user_pagedelta; + // initialize all members freed by the destructor before any early + // return, so a partially constructed pool can be safely destroyed + + ndatum = nchunk = 0; + freehead = chunksize = freelist = nullptr; + pages = nullptr; + whichbin = nullptr; + npage = 0; + errorflag = 0; if (minchunk <= 0 || minchunk > maxchunk) errorflag = 1; if (user_nbin <= 0 || chunkperpage <= 0 || pagedelta <= 0) errorflag = 1; + if (errorflag) return; freehead = new int[nbin]; chunksize = new int[nbin]; - if (!freehead || !chunksize) errorflag = 1; - if (errorflag) return; // ensure nbin*binsize spans minchunk to maxchunk inclusive @@ -75,11 +83,6 @@ MyPoolChunk::MyPoolChunk(int user_minchunk, int user_maxchunk, int user_nbin, chunksize[ibin] = minchunk + (ibin + 1) * binsize - 1; if (chunksize[ibin] > maxchunk) chunksize[ibin] = maxchunk; } - - ndatum = nchunk = 0; - pages = nullptr; - whichbin = nullptr; - npage = 0; } /** Destroy class instance and free all allocated memory */ From 525af5c9ab98cd1dba1cfd0fc3b3159e0306ddee Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 3 Jul 2026 05:51:37 -0400 Subject: [PATCH 026/116] Fix memory reporting and remaining uninitialized members - compute saed/xrd and fix reaxff/bonds/kk reported memory usage from counters that are only set during the first compute or end_of_step, printing garbage sizes at setup. (CIDs 1661547, 1661687, 1663254) - fix surface/local memory_usage overwrote instead of accumulating the connectivity terms (missing +=). (Coverity CID 1660985) - pair runner zeroed 9 doubles into the 6-element Pair::virial array, clobbering the 24 bytes of adjacent class members on every global virial evaluation, and left the directory pointer uninitialized in the constructor although the destructor deletes it. (CIDs 1661855, 1661672, 1662613) Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01YNvuaNpJNkbCKaAE8ngPQv --- src/DIFFRACTION/compute_saed.cpp | 1 + src/DIFFRACTION/compute_xrd.cpp | 1 + src/GRANSURF/fix_surface_local.cpp | 4 ++-- src/KOKKOS/fix_reaxff_bonds_kokkos.cpp | 1 + src/ML-RUNNER/pair_runner.cpp | 8 ++++---- 5 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/DIFFRACTION/compute_saed.cpp b/src/DIFFRACTION/compute_saed.cpp index b73375fcb28..c84f4c146f0 100644 --- a/src/DIFFRACTION/compute_saed.cpp +++ b/src/DIFFRACTION/compute_saed.cpp @@ -52,6 +52,7 @@ static const char cite_compute_saed_c[] = ComputeSAED::ComputeSAED(LAMMPS *lmp, int narg, char **arg) : Compute(lmp, narg, arg), ztype(nullptr), store_tmp(nullptr) { + nlocalgroup = 0; if (lmp->citeme) lmp->citeme->add(cite_compute_saed_c); int ntypes = atom->ntypes; diff --git a/src/DIFFRACTION/compute_xrd.cpp b/src/DIFFRACTION/compute_xrd.cpp index a2e03a95f20..18fb8a25866 100644 --- a/src/DIFFRACTION/compute_xrd.cpp +++ b/src/DIFFRACTION/compute_xrd.cpp @@ -53,6 +53,7 @@ static const char cite_compute_xrd_c[] = ComputeXRD::ComputeXRD(LAMMPS *lmp, int narg, char **arg) : Compute(lmp, narg, arg), ztype(nullptr), store_tmp(nullptr) { + nlocalgroup = 0; if (lmp->citeme) lmp->citeme->add(cite_compute_xrd_c); int ntypes = atom->ntypes; diff --git a/src/GRANSURF/fix_surface_local.cpp b/src/GRANSURF/fix_surface_local.cpp index cab55d1de03..499033cf3b0 100644 --- a/src/GRANSURF/fix_surface_local.cpp +++ b/src/GRANSURF/fix_surface_local.cpp @@ -1703,10 +1703,10 @@ double FixSurfaceLocal::memory_usage() if (dimension == 2) { bytes = nmax_connect * sizeof(Connect2d); - bytes = nmax_connect * sizeof(Pool2d); + bytes += nmax_connect * sizeof(Pool2d); } else { bytes = nmax_connect * sizeof(Connect3d); - bytes = nmax_connect * sizeof(Pool3d); + bytes += nmax_connect * sizeof(Pool3d); } bytes += atom->nmax * sizeof(int); // atom2connect vector diff --git a/src/KOKKOS/fix_reaxff_bonds_kokkos.cpp b/src/KOKKOS/fix_reaxff_bonds_kokkos.cpp index 69ea970b611..ef0abb1fa22 100644 --- a/src/KOKKOS/fix_reaxff_bonds_kokkos.cpp +++ b/src/KOKKOS/fix_reaxff_bonds_kokkos.cpp @@ -36,6 +36,7 @@ FixReaxFFBondsKokkos::FixReaxFFBondsKokkos(LAMMPS *lmp, int narg, char **arg) : kokkosable = 1; atomKK = (AtomKokkos *) atom; + nbuf = 0; datamask_read = EMPTY_MASK; datamask_modify = EMPTY_MASK; } diff --git a/src/ML-RUNNER/pair_runner.cpp b/src/ML-RUNNER/pair_runner.cpp index 6a516c01f07..ca5a6811764 100644 --- a/src/ML-RUNNER/pair_runner.cpp +++ b/src/ML-RUNNER/pair_runner.cpp @@ -127,9 +127,9 @@ enum { int PairRuNNer::instances = 0; PairRuNNer::PairRuNNer(LAMMPS *lmp) : - Pair(lmp), map(nullptr), atomic_charge(nullptr), hirshfeld_volume(nullptr), - electronegativity(nullptr), lagrange_charges(nullptr), de_dq(nullptr), screening_de_dq(nullptr), - committee_storage(nullptr) + Pair(lmp), directory(nullptr), map(nullptr), atomic_charge(nullptr), + hirshfeld_volume(nullptr), electronegativity(nullptr), lagrange_charges(nullptr), + de_dq(nullptr), screening_de_dq(nullptr), committee_storage(nullptr) { // Sanity check: Prevent multiple instances due to static Fortran interface if (instances > 0) { error->all(FLERR, "Only one pair runner instance can be active at a time"); } @@ -727,7 +727,7 @@ void PairRuNNer::compute(int eflag, int vflag) // Virial is -1.0 * d_energy_d_strain if (vflag_global) { - memset(virial, 0, 9 * (sizeof *virial)); + memset(virial, 0, 6 * (sizeof *virial)); for (i = 0; i < num_committee_members; i++) { virial[0] -= committee_d_energy_d_strain[0 + 9 * i] / cfenergy / num_committee_members; virial[1] -= committee_d_energy_d_strain[4 + 9 * i] / cfenergy / num_committee_members; From 4b2f42241de5bc506bb8973f6bfffb518ae5b49b Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 3 Jul 2026 07:26:48 -0400 Subject: [PATCH 027/116] Fix six correctness defects in KOKKOS package styles - mliap/so3/kk computed allocation sizes and the per-pair data offset with 32-bit multiplications before widening to bigint, giving wrong (wrapped) allocation sizes and device indices for large systems; the CPU version already computes these in 64-bit. (Coverity CIDs 1663226, 1663089, 1663395, 1663238) - compute temp/deform/kk declared h_ratelo as Few but initializes it from the 3-element domain->h_ratelo array, a 24-byte overread on every bias removal. (Coverity CID 1663243) - pair exp6/rx/kk passed errorFlag by value into the vectorized mixing-weight path, so the too-few-molecules abort conditions were silently swallowed on host builds while device builds abort. (Coverity CID 1663155) - fix wall/gran/old with the DMT normal model read the cohesion energy from an uninitialized local that only the JKR branch set, giving a garbage friction limit Fncrit. (Coverity CID 1663148) - fix wall/region/kk silently did nothing (zero forces, undefined wall energy and virial) when the region style has no KOKKOS variant; now init() reports a clear error. (Coverity CID 1663218) - pair dpd/fdt/energy/kk instantiated the no-splitting kernels with STACKPARAMS=false in both branches of the ntypes dispatch, so the stack-parameter fast path was dead code; results are unaffected. (Coverity CID 1663182) Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01YNvuaNpJNkbCKaAE8ngPQv --- src/KOKKOS/compute_temp_deform_kokkos.h | 3 ++- src/KOKKOS/fix_wall_gran_old.cpp | 1 + src/KOKKOS/fix_wall_region_kokkos.cpp | 15 ++++++++++++++ src/KOKKOS/fix_wall_region_kokkos.h | 1 + src/KOKKOS/mliap_so3_kokkos.cpp | 18 ++++++++--------- src/KOKKOS/pair_dpd_fdt_energy_kokkos.cpp | 24 +++++++++++------------ src/KOKKOS/pair_exp6_rx_kokkos.cpp | 2 +- src/KOKKOS/pair_exp6_rx_kokkos.h | 2 +- 8 files changed, 42 insertions(+), 24 deletions(-) diff --git a/src/KOKKOS/compute_temp_deform_kokkos.h b/src/KOKKOS/compute_temp_deform_kokkos.h index 49d00a53d95..ec88e72ebc3 100644 --- a/src/KOKKOS/compute_temp_deform_kokkos.h +++ b/src/KOKKOS/compute_temp_deform_kokkos.h @@ -86,7 +86,8 @@ class ComputeTempDeformKokkos: public ComputeTempDeform { class DomainKokkos *domainKK; - Few h_rate, h_ratelo, d_grad_u; + Few h_rate, d_grad_u; + Few h_ratelo; Few d_xref; // stores xmid[3], ylo, zlo }; diff --git a/src/KOKKOS/fix_wall_gran_old.cpp b/src/KOKKOS/fix_wall_gran_old.cpp index f832a80d11c..1356ebbd1d3 100644 --- a/src/KOKKOS/fix_wall_gran_old.cpp +++ b/src/KOKKOS/fix_wall_gran_old.cpp @@ -1253,6 +1253,7 @@ void FixWallGranOld::granular(double rsq, double dx, double dy, double dz, Fncrit = fabs(Fne + 2*F_pulloff); } else if (normal_model == DMT) { + coh = normal_coeffs[3]; F_pulloff = 4*MY_PI*coh*Reff; Fncrit = fabs(Fne + 2*F_pulloff); } diff --git a/src/KOKKOS/fix_wall_region_kokkos.cpp b/src/KOKKOS/fix_wall_region_kokkos.cpp index dffd0c1e643..870697af9a6 100644 --- a/src/KOKKOS/fix_wall_region_kokkos.cpp +++ b/src/KOKKOS/fix_wall_region_kokkos.cpp @@ -55,6 +55,21 @@ FixWallRegionKokkos::~FixWallRegionKokkos() /* ---------------------------------------------------------------------- */ +template +void FixWallRegionKokkos::init() +{ + FixWallRegion::init(); + + // without this check a region w/o KOKKOS support was silently ignored: + // no wall forces and undefined energy/virial contributions + + if (!dynamic_cast*>(region) && + !dynamic_cast*>(region)) + error->all(FLERR,"Fix wall/region/kk requires region style block/kk or sphere/kk"); +} + +/* ---------------------------------------------------------------------- */ + template void FixWallRegionKokkos::post_force(int vflag) { diff --git a/src/KOKKOS/fix_wall_region_kokkos.h b/src/KOKKOS/fix_wall_region_kokkos.h index 584a0615be5..9786a8bee4e 100644 --- a/src/KOKKOS/fix_wall_region_kokkos.h +++ b/src/KOKKOS/fix_wall_region_kokkos.h @@ -40,6 +40,7 @@ class FixWallRegionKokkos : public FixWallRegion { FixWallRegionKokkos(class LAMMPS *, int, char **); ~FixWallRegionKokkos() override; + void init() override; void post_force(int) override; template diff --git a/src/KOKKOS/mliap_so3_kokkos.cpp b/src/KOKKOS/mliap_so3_kokkos.cpp index e0290be03ef..8c5eb4f141e 100644 --- a/src/KOKKOS/mliap_so3_kokkos.cpp +++ b/src/KOKKOS/mliap_so3_kokkos.cpp @@ -679,22 +679,22 @@ void MLIAP_SO3Kokkos::spectrum(int nlocal, DAT::tdual_int_1d numneig bigint totali; - totali = totaln * m_Nmax * (m_lmax + 1); - if ( totali > (int)m_sbes_array.extent(0)) { + totali = (bigint) totaln * m_Nmax * (m_lmax + 1); + if ( totali > (bigint)m_sbes_array.extent(0)) { memoryKK->realloc_kokkos(m_sbes_array, "MLIAP_SO3Kokkos:m_sbes_array", totali); memoryKK->realloc_kokkos(m_sbes_darray, "MLIAP_SO3Kokkos:m_sbes_darray", totali); alloc_arrays += 2.0 * totali * sizeof(double); } - totali = totaln * m_nmax * (m_lmax + 1); - if ( totali > (int)m_rip_array.extent(0)) { + totali = (bigint) totaln * m_nmax * (m_lmax + 1); + if ( totali > (bigint)m_rip_array.extent(0)) { memoryKK->realloc_kokkos(m_rip_array, "MLIAP_SO3Kokkos:m_rip_array", totali); memoryKK->realloc_kokkos(m_rip_darray, "MLIAP_SO3Kokkos:m_rip_darray", totali); alloc_arrays += 2.0 * totali * sizeof(double); } - totali = totaln * ncoefs * 3; - if ( totali > (int)k_dplist_r.extent(0)) { + totali = (bigint) totaln * ncoefs * 3; + if ( totali > (bigint)k_dplist_r.extent(0)) { memoryKK->realloc_kokkos(k_dplist_r, "MLIAP_SO3Kokkos:m_dplist_r", (int)totaln, ncoefs, 3); alloc_arrays += 2.0 * totali * sizeof(double); } @@ -812,8 +812,8 @@ void MLIAP_SO3Kokkos::spectrum_dxdr(int nlocal, DAT::tdual_int_1d nu } } - totali = totaln * m_Nmax * (m_lmax + 1); - if ( totali > (int)m_sbes_array.extent(0)) { + totali = (bigint) totaln * m_Nmax * (m_lmax + 1); + if ( totali > (bigint)m_sbes_array.extent(0)) { memoryKK->create_kokkos(m_sbes_array, totali, "MLIAP_SO3Kokkos:m_sbes_array"); memoryKK->create_kokkos(m_sbes_darray, totali, "MLIAP_SO3Kokkos:m_sbes_darray"); @@ -896,7 +896,7 @@ void MLIAP_SO3Kokkos::operator() (const MLIAP_SO3Kokkos: compute_uarray_recursive(x, y, z, r, twolmax, ulist_r, ulist_i, m_idxu_block, m_rootpq); double sfac_weight = compute_sfac(r, t_rcut)*double(weight); - bigint gindex = (ipair - 1) * findex; + bigint gindex = (bigint) (ipair - 1) * findex; for (int n = 0; n < t_nmax; n++) { int i = 0; for (int l = 0; l < t_lmax + 1; l++) { diff --git a/src/KOKKOS/pair_dpd_fdt_energy_kokkos.cpp b/src/KOKKOS/pair_dpd_fdt_energy_kokkos.cpp index e7eab07b2d6..2ba9e1f79e8 100644 --- a/src/KOKKOS/pair_dpd_fdt_energy_kokkos.cpp +++ b/src/KOKKOS/pair_dpd_fdt_energy_kokkos.cpp @@ -295,27 +295,27 @@ void PairDPDfdtEnergyKokkos::compute(int eflag_in, int vflag_in) } else { if (neighflag == HALF) { if (newton_pair) { - if (evflag) Kokkos::parallel_reduce(Kokkos::RangePolicy >(0,inum),*this,ev); - else Kokkos::parallel_for(Kokkos::RangePolicy >(0,inum),*this); + if (evflag) Kokkos::parallel_reduce(Kokkos::RangePolicy >(0,inum),*this,ev); + else Kokkos::parallel_for(Kokkos::RangePolicy >(0,inum),*this); } else { - if (evflag) Kokkos::parallel_reduce(Kokkos::RangePolicy >(0,inum),*this,ev); - else Kokkos::parallel_for(Kokkos::RangePolicy >(0,inum),*this); + if (evflag) Kokkos::parallel_reduce(Kokkos::RangePolicy >(0,inum),*this,ev); + else Kokkos::parallel_for(Kokkos::RangePolicy >(0,inum),*this); } } else if (neighflag == HALFTHREAD) { if (newton_pair) { - if (evflag) Kokkos::parallel_reduce(Kokkos::RangePolicy >(0,inum),*this,ev); - else Kokkos::parallel_for(Kokkos::RangePolicy >(0,inum),*this); + if (evflag) Kokkos::parallel_reduce(Kokkos::RangePolicy >(0,inum),*this,ev); + else Kokkos::parallel_for(Kokkos::RangePolicy >(0,inum),*this); } else { - if (evflag) Kokkos::parallel_reduce(Kokkos::RangePolicy >(0,inum),*this,ev); - else Kokkos::parallel_for(Kokkos::RangePolicy >(0,inum),*this); + if (evflag) Kokkos::parallel_reduce(Kokkos::RangePolicy >(0,inum),*this,ev); + else Kokkos::parallel_for(Kokkos::RangePolicy >(0,inum),*this); } } else if (neighflag == FULL) { if (newton_pair) { - if (evflag) Kokkos::parallel_reduce(Kokkos::RangePolicy >(0,inum),*this,ev); - else Kokkos::parallel_for(Kokkos::RangePolicy >(0,inum),*this); + if (evflag) Kokkos::parallel_reduce(Kokkos::RangePolicy >(0,inum),*this,ev); + else Kokkos::parallel_for(Kokkos::RangePolicy >(0,inum),*this); } else { - if (evflag) Kokkos::parallel_reduce(Kokkos::RangePolicy >(0,inum),*this,ev); - else Kokkos::parallel_for(Kokkos::RangePolicy >(0,inum),*this); + if (evflag) Kokkos::parallel_reduce(Kokkos::RangePolicy >(0,inum),*this,ev); + else Kokkos::parallel_for(Kokkos::RangePolicy >(0,inum),*this); } } } diff --git a/src/KOKKOS/pair_exp6_rx_kokkos.cpp b/src/KOKKOS/pair_exp6_rx_kokkos.cpp index d179d353582..a72c0a47be5 100644 --- a/src/KOKKOS/pair_exp6_rx_kokkos.cpp +++ b/src/KOKKOS/pair_exp6_rx_kokkos.cpp @@ -1999,7 +1999,7 @@ void partition_range( const int begin, const int end, int &thread_begin, int &th #ifndef LMP_KOKKOS_GPU template template -void PairExp6rxKokkos::getMixingWeightsVect(const int np_total, int errorFlag, +void PairExp6rxKokkos::getMixingWeightsVect(const int np_total, int &errorFlag, ArrayT &epsilon1, ArrayT &alpha1, ArrayT &rm1, ArrayT &mixWtSite1, ArrayT &epsilon2, ArrayT &alpha2, ArrayT &rm2, ArrayT &mixWtSite2, ArrayT &epsilon1_old, ArrayT &alpha1_old, ArrayT &rm1_old, ArrayT &mixWtSite1old, ArrayT &epsilon2_old, ArrayT &alpha2_old, ArrayT &rm2_old, ArrayT &mixWtSite2old) const { ArrayT epsilon = PairExp6ParamDataVect.epsilon ; diff --git a/src/KOKKOS/pair_exp6_rx_kokkos.h b/src/KOKKOS/pair_exp6_rx_kokkos.h index bc047c9f954..d7bb9905c43 100644 --- a/src/KOKKOS/pair_exp6_rx_kokkos.h +++ b/src/KOKKOS/pair_exp6_rx_kokkos.h @@ -198,7 +198,7 @@ class PairExp6rxKokkos : public PairExp6rx { void getMixingWeights(int, KK_FLOAT &, KK_FLOAT &, KK_FLOAT &, KK_FLOAT &, KK_FLOAT &, KK_FLOAT &, KK_FLOAT &, KK_FLOAT &, KK_FLOAT &, KK_FLOAT &, KK_FLOAT &, KK_FLOAT &, KK_FLOAT &, KK_FLOAT &, KK_FLOAT &, KK_FLOAT &) const; template - void getMixingWeightsVect(const int, int, ArrayT &, ArrayT &, ArrayT &, ArrayT &, ArrayT &, ArrayT &, ArrayT &, ArrayT &, ArrayT &, ArrayT &, ArrayT &, ArrayT &, ArrayT &, ArrayT &, ArrayT &, ArrayT &) const; + void getMixingWeightsVect(const int, int &, ArrayT &, ArrayT &, ArrayT &, ArrayT &, ArrayT &, ArrayT &, ArrayT &, ArrayT &, ArrayT &, ArrayT &, ArrayT &, ArrayT &, ArrayT &, ArrayT &, ArrayT &, ArrayT &) const; // NOLINTNEXTLINE KOKKOS_INLINE_FUNCTION From 5bf8d9bf7d63e5b4c7033a92585bd61e341c5747 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 3 Jul 2026 07:26:49 -0400 Subject: [PATCH 028/116] Add missing rx mixing-weight sanity checks and release Kokkos views promptly pair multi/lucy/rx divided by the total molecule count of a CG particle without the 10*DBL_EPSILON sanity check that pair table/rx and pair exp6/rx perform, silently producing NaN weights; add the same check on the CPU and (via Kokkos::abort) in the KOKKOS version, and restore it in pair table/rx/kk which defined MY_EPSILON but never used it after the port. (Coverity CIDs 1661036, 1662158, 1663121, 1663023, 1663371, 1663376) The destroy_kokkos()/destroy_3d/destroy_4d helpers took the view by value, so resetting it released only the local copy and the caller's view kept the allocation alive until reassignment; pass by reference so device memory is released when requested. (Coverity CIDs 1663205, 1663073, 1663169, 1663306, 1663189) Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01YNvuaNpJNkbCKaAE8ngPQv --- src/DPD-REACT/pair_multi_lucy_rx.cpp | 8 ++++++++ src/KOKKOS/memory_kokkos.h | 6 +++--- src/KOKKOS/pair_multi_lucy_rx_kokkos.cpp | 2 ++ src/KOKKOS/pair_table_rx_kokkos.cpp | 2 ++ src/KOKKOS/pair_uf3_kokkos.cpp | 4 ++-- src/KOKKOS/pair_uf3_kokkos.h | 4 ++-- 6 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/DPD-REACT/pair_multi_lucy_rx.cpp b/src/DPD-REACT/pair_multi_lucy_rx.cpp index 92fece7f550..515cb7e3773 100644 --- a/src/DPD-REACT/pair_multi_lucy_rx.cpp +++ b/src/DPD-REACT/pair_multi_lucy_rx.cpp @@ -40,6 +40,12 @@ #include using namespace LAMMPS_NS; + +#ifdef DBL_EPSILON + #define MY_EPSILON (10.0*DBL_EPSILON) +#else + #define MY_EPSILON (10.0*2.220446049250313e-16) +#endif using MathConst::MY_PI; enum{ NONE, RLINEAR, RSQ }; @@ -920,6 +926,8 @@ void PairMultiLucyRX::getMixingWeights(int id, double &mixWtSite1old, double &mi nTotal += atom->dvector[ispecies][id]; nTotalOld += atom->dvector[ispecies+nspecies][id]; } + if (nTotal < MY_EPSILON || nTotalOld < MY_EPSILON) + error->all(FLERR,"The number of molecules in CG particle is less than 10*DBL_EPSILON."); if (isOneFluid(isite1) == false) { nMoleculesOld1 = atom->dvector[isite1+nspecies][id]; diff --git a/src/KOKKOS/memory_kokkos.h b/src/KOKKOS/memory_kokkos.h index fad2aba98cd..bf8567f81bd 100644 --- a/src/KOKKOS/memory_kokkos.h +++ b/src/KOKKOS/memory_kokkos.h @@ -80,7 +80,7 @@ TYPE grow_kokkos(TYPE &data, typename TYPE::value_type *&array, int n1, const ch ------------------------------------------------------------------------- */ template -void destroy_kokkos(TYPE data, typename TYPE::value_type* &array) +void destroy_kokkos(TYPE &data, typename TYPE::value_type* &array) { if (array == nullptr) return; data = TYPE(); @@ -269,7 +269,7 @@ TYPE grow_kokkos(TYPE &data, typename TYPE::value_type **&array, ------------------------------------------------------------------------- */ template -void destroy_kokkos(TYPE data, typename TYPE::value_type** &array) +void destroy_kokkos(TYPE &data, typename TYPE::value_type** &array) { static_assert(std::is_same_v, "A Kokkos view must have LayoutRight to alias with legacy data structures"); @@ -402,7 +402,7 @@ TYPE grow_kokkos(TYPE &data, typename TYPE::value_type ***&array, ------------------------------------------------------------------------- */ template -void destroy_kokkos(TYPE data, typename TYPE::value_type*** &array) +void destroy_kokkos(TYPE &data, typename TYPE::value_type*** &array) { static_assert(std::is_same_v, "A Kokkos view must have LayoutRight to alias with legacy data structures"); diff --git a/src/KOKKOS/pair_multi_lucy_rx_kokkos.cpp b/src/KOKKOS/pair_multi_lucy_rx_kokkos.cpp index cadb5500d59..3d244fc4e6f 100644 --- a/src/KOKKOS/pair_multi_lucy_rx_kokkos.cpp +++ b/src/KOKKOS/pair_multi_lucy_rx_kokkos.cpp @@ -595,6 +595,8 @@ void PairMultiLucyRXKokkos::getMixingWeights(int id, KK_FLOAT &mixWt nTotal += dvector(ispecies,id); nTotalOld += dvector(ispecies+nspecies,id); } + if (nTotal < MY_EPSILON || nTotalOld < MY_EPSILON) + Kokkos::abort("The number of molecules in CG particle is less than 10*DBL_EPSILON."); if (isOneFluid(isite1) == false) { nMoleculesOld1 = dvector(isite1+nspecies,id); diff --git a/src/KOKKOS/pair_table_rx_kokkos.cpp b/src/KOKKOS/pair_table_rx_kokkos.cpp index 3082304e38a..131f70b8f03 100644 --- a/src/KOKKOS/pair_table_rx_kokkos.cpp +++ b/src/KOKKOS/pair_table_rx_kokkos.cpp @@ -80,6 +80,8 @@ void getMixingWeights( assert(ispecies+nspecies < (int)dvector.extent(0)); nTotalOld += dvector(ispecies+nspecies,id); } + if (nTotal < MY_EPSILON || nTotalOld < MY_EPSILON) + Kokkos::abort("The number of molecules in CG particle is less than 10*DBL_EPSILON."); assert(isite1 >= 0); assert(isite1 < nspecies); diff --git a/src/KOKKOS/pair_uf3_kokkos.cpp b/src/KOKKOS/pair_uf3_kokkos.cpp index 707b53e93f5..b217f8348ee 100644 --- a/src/KOKKOS/pair_uf3_kokkos.cpp +++ b/src/KOKKOS/pair_uf3_kokkos.cpp @@ -76,7 +76,7 @@ template PairUF3Kokkos::~PairUF3Kokkos() template template -void PairUF3Kokkos::destroy_3d(TYPE data, typename TYPE::value_type*** &array) +void PairUF3Kokkos::destroy_3d(TYPE &data, typename TYPE::value_type*** &array) { if (array == nullptr) return; data = TYPE(); @@ -89,7 +89,7 @@ void PairUF3Kokkos::destroy_3d(TYPE data, typename TYPE::value_type* template template -void PairUF3Kokkos::destroy_4d(TYPE data, typename TYPE::value_type**** &array) +void PairUF3Kokkos::destroy_4d(TYPE &data, typename TYPE::value_type**** &array) { if (array == nullptr) return; data = TYPE(); diff --git a/src/KOKKOS/pair_uf3_kokkos.h b/src/KOKKOS/pair_uf3_kokkos.h index 17b6f406f10..1af7cc6c7f2 100644 --- a/src/KOKKOS/pair_uf3_kokkos.h +++ b/src/KOKKOS/pair_uf3_kokkos.h @@ -83,8 +83,8 @@ template class PairUF3Kokkos : public PairUF3 { DAT::ttransform_kkfloat_4d k_min_cut_3b; typename AT::t_kkfloat_3d d_cut_3b; typename AT::t_kkfloat_4d d_min_cut_3b; - template void destroy_3d(TYPE data, typename TYPE::value_type*** &array); - template void destroy_4d(TYPE data, typename TYPE::value_type**** &array); + template void destroy_3d(TYPE &data, typename TYPE::value_type*** &array); + template void destroy_4d(TYPE &data, typename TYPE::value_type**** &array); Kokkos::View /*d_cutsq,*/ d_cut_3b_list; //Kokkos::View d_cut_3b; From 9893e492913cd62ae3af7e02beec6f1c3dcfad91 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 3 Jul 2026 07:39:33 -0400 Subject: [PATCH 029/116] Initialize class members missed by the earlier pointer-initialization batch Mechanical follow-up to the batch merged via PR #5058, covering newer files and members the batch engine missed: cached per-atom array pointers in atom_vec_apip; the type2rhor/type2z2r maps of pair eam/apip; the neighbor list pointer of compute ave/sphere/atom; the per-type coefficient arrays of pair lj/pirani; pair granular's extra_svector count; pair hdnnp's settings-stage scalars and directory string (whose garbage value was never freed but also never safely testable); the per-thread centroid-stress accumulators of ThrData (also nulled per step in init_force like their eatom/vatom siblings); the paux1/paux2 pointers of the vendored PTM Voronoi cell; the matvecs_s/matvecs_t counters of fix qeq/reaxff and qtpie/reaxff; the cached box/domain pointers and box_drop/box_other/box_touch/point_drop function pointers of comm_tiled (via init_pointers, covering the Comm-copy constructor); the write_choice (and dump_atom convert_choice) function pointers of the atom/cfg/custom/xyz dumps; the overlap-list counters of Grid2d/Grid3d in both constructors; the linemin function pointer of min_linesearch; and the multi stencil pointers of NPair. Also value-initialize Neighbor::init_pair()'s neigh_bin/neigh_stencil arrays so the existing defensive null checks compare real null pointers instead of uninitialized memory. Coverity CIDs 1662103, 1662812, 1661101, 1661000, 1662461, 1661489, 1661005, 1662718, 1661900, 1661288, 1661621, 1662871, 1661301, 1662252, 1661566, 1661753, 1662305, 1662554, 1662232, 1661906, 1662444, 1661856, 1661718, 1662007. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01YNvuaNpJNkbCKaAE8ngPQv --- src/APIP/atom_vec_apip.cpp | 5 ++++- src/APIP/pair_eam_apip.cpp | 2 ++ src/EXTRA-COMPUTE/compute_ave_sphere_atom.cpp | 2 +- src/EXTRA-PAIR/pair_lj_pirani.cpp | 4 +++- src/GRANULAR/pair_granular.cpp | 1 + src/ML-HDNNP/pair_hdnnp.cpp | 11 +++++++++++ src/OPENMP/thr_data.cpp | 2 ++ src/PTM/ptm_voronoi_cell.cpp | 2 ++ src/REAXFF/fix_qeq_reaxff.cpp | 1 + src/REAXFF/fix_qtpie_reaxff.cpp | 1 + src/comm_tiled.cpp | 9 +++++++++ src/dump_atom.cpp | 3 ++- src/dump_cfg.cpp | 2 +- src/dump_custom.cpp | 2 +- src/dump_xyz.cpp | 2 +- src/grid2d.cpp | 4 ++++ src/grid3d.cpp | 4 ++++ src/min_linesearch.cpp | 1 + src/neighbor.cpp | 4 ++-- src/npair.cpp | 3 ++- 20 files changed, 55 insertions(+), 10 deletions(-) diff --git a/src/APIP/atom_vec_apip.cpp b/src/APIP/atom_vec_apip.cpp index 3e7436ed016..16d4934c493 100644 --- a/src/APIP/atom_vec_apip.cpp +++ b/src/APIP/atom_vec_apip.cpp @@ -21,7 +21,10 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -AtomVecApip::AtomVecApip(LAMMPS *lmp) : AtomVec(lmp) +AtomVecApip::AtomVecApip(LAMMPS *lmp) : + AtomVec(lmp), apip_lambda(nullptr), apip_lambda_input(nullptr), apip_lambda_const(nullptr), + apip_lambda_input_ta(nullptr), apip_e_fast(nullptr), apip_e_precise(nullptr), + apip_f_const_lambda(nullptr), apip_f_dyn_lambda(nullptr), apip_lambda_required(nullptr) { molecular = Atom::ATOMIC; mass_type = PER_TYPE; diff --git a/src/APIP/pair_eam_apip.cpp b/src/APIP/pair_eam_apip.cpp index e7dfa946ba2..5734d88b180 100644 --- a/src/APIP/pair_eam_apip.cpp +++ b/src/APIP/pair_eam_apip.cpp @@ -47,6 +47,8 @@ PairEAMAPIP::PairEAMAPIP(LAMMPS *lmp) : Pair(lmp) fp = nullptr; numforce = nullptr; type2frho = nullptr; + type2rhor = nullptr; + type2z2r = nullptr; nfuncfl = 0; funcfl = nullptr; diff --git a/src/EXTRA-COMPUTE/compute_ave_sphere_atom.cpp b/src/EXTRA-COMPUTE/compute_ave_sphere_atom.cpp index 72a628c37c7..aa2cc622df9 100644 --- a/src/EXTRA-COMPUTE/compute_ave_sphere_atom.cpp +++ b/src/EXTRA-COMPUTE/compute_ave_sphere_atom.cpp @@ -38,7 +38,7 @@ using MathConst::MY_PI; /* ---------------------------------------------------------------------- */ ComputeAveSphereAtom::ComputeAveSphereAtom(LAMMPS *lmp, int narg, char **arg) : - Compute(lmp, narg, arg), result(nullptr) + Compute(lmp, narg, arg), list(nullptr), result(nullptr) { if (narg < 3 || narg > 5) error->all(FLERR, "Illegal compute ave/sphere/atom command"); diff --git a/src/EXTRA-PAIR/pair_lj_pirani.cpp b/src/EXTRA-PAIR/pair_lj_pirani.cpp index 544c3b1b5ce..1e7c11eec27 100644 --- a/src/EXTRA-PAIR/pair_lj_pirani.cpp +++ b/src/EXTRA-PAIR/pair_lj_pirani.cpp @@ -39,7 +39,9 @@ using MathSpecial::square; /* ---------------------------------------------------------------------- */ -PairLJPirani::PairLJPirani(LAMMPS *lmp) : Pair(lmp), cut_respa(nullptr) +PairLJPirani::PairLJPirani(LAMMPS *lmp) : + Pair(lmp), cut_global(0.0), cut(nullptr), alpha(nullptr), beta(nullptr), gamma(nullptr), + rm(nullptr), epsilon(nullptr), offset(nullptr), cut_respa(nullptr) { respa_enable = 1; born_matrix_enable = 0; diff --git a/src/GRANULAR/pair_granular.cpp b/src/GRANULAR/pair_granular.cpp index 5b65d8edfe6..d8c80c3159b 100644 --- a/src/GRANULAR/pair_granular.cpp +++ b/src/GRANULAR/pair_granular.cpp @@ -52,6 +52,7 @@ PairGranular::PairGranular(LAMMPS *lmp) : Pair(lmp), fix_rigid(nullptr) finitecutflag = 1; single_extra = 12; + extra_svector = 0; svector = new double[single_extra]; neighprev = 0; diff --git a/src/ML-HDNNP/pair_hdnnp.cpp b/src/ML-HDNNP/pair_hdnnp.cpp index 7065ae80ebb..d5c086b6155 100644 --- a/src/ML-HDNNP/pair_hdnnp.cpp +++ b/src/ML-HDNNP/pair_hdnnp.cpp @@ -64,6 +64,17 @@ PairHDNNP::PairHDNNP(LAMMPS *lmp) : Pair(lmp) 0; // TODO: Check possible values. value != 0 indicates support for unit conversion. reinitflag = 0; // 1 if compatible with fix adapt and alike + showew = false; + resetew = false; + showewsum = 0; + maxew = 0; + numExtrapolationWarningsTotal = 0; + numExtrapolationWarningsSummary = 0; + cflength = 0.0; + cfenergy = 0.0; + maxCutoffRadius = 0.0; + directory = nullptr; + interface = new nnp::InterfaceLammps(); } diff --git a/src/OPENMP/thr_data.cpp b/src/OPENMP/thr_data.cpp index e45796f9d1d..72ab9acf370 100644 --- a/src/OPENMP/thr_data.cpp +++ b/src/OPENMP/thr_data.cpp @@ -29,6 +29,7 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ ThrData::ThrData(int tid, Timer *t) : + cvatom_pair(nullptr), cvatom_angle(nullptr), cvatom_dihed(nullptr), cvatom_imprp(nullptr), _f(nullptr), _torque(nullptr), _erforce(nullptr), _de(nullptr), _drho(nullptr), _mu(nullptr), _lambda(nullptr), _rhoB(nullptr), _D_values(nullptr), _rho(nullptr), _fp(nullptr), _rho1d(nullptr), _drho1d(nullptr), _rho1d_6(nullptr), _drho1d_6(nullptr), _tid(tid), _timer(t) @@ -81,6 +82,7 @@ void ThrData::init_force(int nall, double **f, double **torque, double *erforce, eatom_pair = eatom_bond = eatom_angle = eatom_dihed = eatom_imprp = eatom_kspce = nullptr; vatom_pair = vatom_bond = vatom_angle = vatom_dihed = vatom_imprp = vatom_kspce = nullptr; + cvatom_pair = cvatom_angle = cvatom_dihed = cvatom_imprp = nullptr; if (nall >= 0 && f) { _f = f + _tid * nall; diff --git a/src/PTM/ptm_voronoi_cell.cpp b/src/PTM/ptm_voronoi_cell.cpp index 7f74846281b..49a634c19cd 100644 --- a/src/PTM/ptm_voronoi_cell.cpp +++ b/src/PTM/ptm_voronoi_cell.cpp @@ -1370,6 +1370,8 @@ void voronoicell_neighbor::check_facets() { /** The class constructor allocates memory for storing neighbor information. */ voronoicell_neighbor::voronoicell_neighbor() { int i; + paux1=nullptr; + paux2=nullptr; mne=new int*[current_vertex_order]; ne=new int*[current_vertices]; for (i=0;i<3;i++) mne[i]=new int[init_n_vertices*i]; diff --git a/src/REAXFF/fix_qeq_reaxff.cpp b/src/REAXFF/fix_qeq_reaxff.cpp index c4e44dae1be..d4c5a7ea2ec 100644 --- a/src/REAXFF/fix_qeq_reaxff.cpp +++ b/src/REAXFF/fix_qeq_reaxff.cpp @@ -90,6 +90,7 @@ FixQEqReaxFF::FixQEqReaxFF(LAMMPS *lmp, int narg, char **arg) : // check for compatibility is in Fix::post_constructor() dual_enabled = 0; + matvecs_s = matvecs_t = 0; // matrix-free support only available for Kokkos backend matrix_free = 0; // default to false diff --git a/src/REAXFF/fix_qtpie_reaxff.cpp b/src/REAXFF/fix_qtpie_reaxff.cpp index a5b981196b2..fbd6381e4a4 100644 --- a/src/REAXFF/fix_qtpie_reaxff.cpp +++ b/src/REAXFF/fix_qtpie_reaxff.cpp @@ -120,6 +120,7 @@ FixQtpieReaxFF::FixQtpieReaxFF(LAMMPS *lmp, int narg, char **arg) : nmax = 0; m_fill = m_cap = 0; pack_flag = 0; + matvecs_s = matvecs_t = 0; s = nullptr; t = nullptr; nprev = 4; diff --git a/src/comm_tiled.cpp b/src/comm_tiled.cpp index 3c9870cc676..a42aa87356a 100644 --- a/src/comm_tiled.cpp +++ b/src/comm_tiled.cpp @@ -128,6 +128,15 @@ void CommTiled::init_pointers() nexchprocmax = nullptr; exchproc = nullptr; exchnum = nullptr; + + prd = nullptr; + boxlo = boxhi = nullptr; + sublo = subhi = nullptr; + + box_drop = nullptr; + box_other = nullptr; + box_touch = nullptr; + point_drop = nullptr; } /* ---------------------------------------------------------------------- diff --git a/src/dump_atom.cpp b/src/dump_atom.cpp index 269dc8fdbe6..90a5777e276 100644 --- a/src/dump_atom.cpp +++ b/src/dump_atom.cpp @@ -32,7 +32,8 @@ static constexpr int DELTA = 1048576; /* ---------------------------------------------------------------------- */ DumpAtom::DumpAtom(LAMMPS *lmp, int narg, char **arg) : - Dump(lmp, narg, arg), header_choice(nullptr), pack_choice(nullptr) + Dump(lmp, narg, arg), header_choice(nullptr), pack_choice(nullptr), convert_choice(nullptr), + write_choice(nullptr) { if (narg != 5) error->all(FLERR,"Illegal dump atom command"); diff --git a/src/dump_cfg.cpp b/src/dump_cfg.cpp index 01f58c9c35a..13d9f88dead 100644 --- a/src/dump_cfg.cpp +++ b/src/dump_cfg.cpp @@ -37,7 +37,7 @@ static constexpr int DELTA = 1048576; /* ---------------------------------------------------------------------- */ DumpCFG::DumpCFG(LAMMPS *lmp, int narg, char **arg) : - DumpCustom(lmp, narg, arg), auxname(nullptr) + DumpCustom(lmp, narg, arg), auxname(nullptr), write_choice(nullptr) { multifile_override = 0; diff --git a/src/dump_custom.cpp b/src/dump_custom.cpp index c5abdfdc600..d9ff3e2e610 100644 --- a/src/dump_custom.cpp +++ b/src/dump_custom.cpp @@ -62,7 +62,7 @@ DumpCustom::DumpCustom(LAMMPS *lmp, int narg, char **arg) : field2index(nullptr), argindex(nullptr), id_compute(nullptr), compute(nullptr), id_fix(nullptr), fix(nullptr), id_variable(nullptr), variable(nullptr), vbuf(nullptr), id_custom(nullptr), custom(nullptr), custom_flag(nullptr), typenames(nullptr), header_choice(nullptr), - pack_choice(nullptr) + write_choice(nullptr), pack_choice(nullptr) { if (narg == 5) error->all(FLERR,"No dump {} arguments specified", style); diff --git a/src/dump_xyz.cpp b/src/dump_xyz.cpp index 144b234bdf7..a78fde979ba 100644 --- a/src/dump_xyz.cpp +++ b/src/dump_xyz.cpp @@ -31,7 +31,7 @@ static constexpr int DELTA = 1048576; /* ---------------------------------------------------------------------- */ DumpXYZ::DumpXYZ(LAMMPS *lmp, int narg, char **arg) : Dump(lmp, narg, arg), - typenames(nullptr) + typenames(nullptr), write_choice(nullptr) { if (narg != 5) error->all(FLERR, Error::NOPOINTER, "Illegal dump {} command", style); if (binary || multiproc) error->all(FLERR, 4, "Invalid dump {} filename", style); diff --git a/src/grid2d.cpp b/src/grid2d.cpp index 8eb32b60084..67c5e44b64d 100644 --- a/src/grid2d.cpp +++ b/src/grid2d.cpp @@ -63,6 +63,8 @@ Grid2d::Grid2d(LAMMPS *lmp, MPI_Comm gcomm, int gnx, int gny) : nx = gnx; ny = gny; + noverlap_list = maxoverlap_list = 0; + // default settings, can be overridden by set() methods // these affect assignment of owned and ghost cells @@ -107,6 +109,8 @@ Grid2d::Grid2d(LAMMPS *lmp, MPI_Comm gcomm, int gnx, int gny, int ixlo, int ixhi nx = gnx; ny = gny; + noverlap_list = maxoverlap_list = 0; + // store owned/ghost indices provided by caller inxlo = ixlo; diff --git a/src/grid3d.cpp b/src/grid3d.cpp index 1ca3be6f4c9..432dae39949 100644 --- a/src/grid3d.cpp +++ b/src/grid3d.cpp @@ -65,6 +65,8 @@ Grid3d::Grid3d(LAMMPS *lmp, MPI_Comm gcomm, int gnx, int gny, int gnz) : ny = gny; nz = gnz; + noverlap_list = maxoverlap_list = 0; + // default settings, can be overridden by set() methods // these affect assignment of owned and ghost cells @@ -112,6 +114,8 @@ Grid3d::Grid3d(LAMMPS *lmp, MPI_Comm gcomm, int gnx, int gny, int gnz, ny = gny; nz = gnz; + noverlap_list = maxoverlap_list = 0; + // store owned/ghost indices provided by caller inxlo = ixlo; diff --git a/src/min_linesearch.cpp b/src/min_linesearch.cpp index 8e36bd40ba7..03773a38118 100644 --- a/src/min_linesearch.cpp +++ b/src/min_linesearch.cpp @@ -56,6 +56,7 @@ MinLineSearch::MinLineSearch(LAMMPS *lmp) : Min(lmp), x0(nullptr), g(nullptr), h searchflag = 1; gextra = hextra = nullptr; x0extra_atom = gextra_atom = hextra_atom = nullptr; + linemin = nullptr; } /* ---------------------------------------------------------------------- */ diff --git a/src/neighbor.cpp b/src/neighbor.cpp index 09177536c8c..a68b55a6b84 100644 --- a/src/neighbor.cpp +++ b/src/neighbor.cpp @@ -911,8 +911,8 @@ int Neighbor::init_pair() nlist = nrequest; lists = new NeighList*[nrequest]; - neigh_bin = new NBin*[nrequest]; - neigh_stencil = new NStencil*[nrequest]; + neigh_bin = new NBin*[nrequest](); + neigh_stencil = new NStencil*[nrequest](); neigh_pair = new NPair*[nrequest]; // allocate new lists diff --git a/src/npair.cpp b/src/npair.cpp index 31386f35a74..8498ee55173 100644 --- a/src/npair.cpp +++ b/src/npair.cpp @@ -31,7 +31,8 @@ using namespace LAMMPS_NS; NPair::NPair(LAMMPS *lmp) : Pointers(lmp), nb(nullptr), ns(nullptr), atom2bin(nullptr), bins(nullptr), - binatoms_hash_multi(nullptr), stencil(nullptr) + binatoms_hash_multi(nullptr), stencil(nullptr), nstencil_multi(nullptr), + stencil_multi(nullptr) { last_build = -1; mycutneighsq = nullptr; From 556570481f4159c26c5494549560a27c64768275 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 3 Jul 2026 08:46:56 -0400 Subject: [PATCH 030/116] Validate size and index fields read from restart and map files Counts and string lengths read from binary restart files were used directly for allocations and loop bounds; a corrupted or truncated file produced allocation failures, heap overflows (the LEPTON styles read per-entry expression lengths into a buffer sized by an unchecked maxlen), out-of-bounds writes (pair granular nmodels vs maxmodels), or stalled unpack loops (read_restart per-atom chunks). Add range checks with clear 'restart file' error messages right after each read: the hybrid styles' nstyles and keyword lengths, LEPTON expression buffer and entry lengths, the gaussian/fourier/nharmonic/spherical term counts, granular model names, pair tracker fix ID and value counts, group names, Modify's global/per-atom restart counts (and the buffer size accumulation, now done in 64-bit), the native dump reader's label-line length and chunk atom count, and the per-atom section of read_restart itself. Guards on broadcast data are placed after the broadcast so all ranks take the error path collectively. fix bond/react map files: template atom IDs were checked against the upper bound only, so zero or negative IDs in a hand-edited map file wrote out of bounds; add the lower bounds, a missing sscanf return check, and a range check on the constraint count. Coverity CIDs 1661508, 1661577, 1661546, 1662928, 1662591, 1661650, 1663159, 1661659, 1661596, 1662805, 1662556, 1660975, 1661125, 1661707, 1661116, 1662541, 1663011, 1663348, 1663285, 1663253, 1663022, 1661793, 1662734, 1661685, 1661527, 1661593, 1661079, 1662143, 1661625, 1661169, 1662250, 1662573, 1662683, 1661056, 1661054, 1661570, 1662274. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01YNvuaNpJNkbCKaAE8ngPQv --- src/EXTRA-MOLECULE/angle_gaussian.cpp | 6 ++++++ src/EXTRA-MOLECULE/bond_gaussian.cpp | 4 ++++ src/EXTRA-MOLECULE/dihedral_fourier.cpp | 6 ++++++ src/EXTRA-MOLECULE/dihedral_nharmonic.cpp | 6 ++++++ src/EXTRA-MOLECULE/dihedral_spherical.cpp | 6 ++++++ src/GRANULAR/granular_model.cpp | 2 ++ src/GRANULAR/pair_granular.cpp | 2 ++ src/KOKKOS/pair_hybrid_scaled_kokkos.cpp | 4 ++++ src/LEPTON/angle_lepton.cpp | 4 ++++ src/LEPTON/bond_lepton.cpp | 4 ++++ src/LEPTON/dihedral_lepton.cpp | 4 ++++ src/LEPTON/pair_lepton.cpp | 4 ++++ src/MISC/pair_tracker.cpp | 3 +++ src/REACTION/fix_bond_react.cpp | 19 +++++++++++-------- src/angle_hybrid.cpp | 3 +++ src/bond_hybrid.cpp | 3 +++ src/dihedral_hybrid.cpp | 3 +++ src/group.cpp | 1 + src/improper_hybrid.cpp | 3 +++ src/modify.cpp | 11 +++++++++-- src/pair_hybrid.cpp | 3 +++ src/pair_hybrid_scaled.cpp | 4 ++++ src/read_restart.cpp | 6 ++++++ src/reader_native.cpp | 2 ++ 24 files changed, 103 insertions(+), 10 deletions(-) diff --git a/src/EXTRA-MOLECULE/angle_gaussian.cpp b/src/EXTRA-MOLECULE/angle_gaussian.cpp index c87f1aeb01b..bb86996bd86 100644 --- a/src/EXTRA-MOLECULE/angle_gaussian.cpp +++ b/src/EXTRA-MOLECULE/angle_gaussian.cpp @@ -284,6 +284,12 @@ void AngleGaussian::read_restart(FILE *fp) MPI_Bcast(&angle_temperature[1], atom->nangletypes, MPI_DOUBLE, 0, world); MPI_Bcast(&nterms[1], atom->nangletypes, MPI_INT, 0, world); + if ((nterms_max < 0) || (nterms_max > 4096)) + error->all(FLERR, "Invalid number of terms in restart file"); + for (int i = 1; i <= atom->nangletypes; i++) + if ((nterms[i] < 0) || (nterms[i] > 4096)) + error->all(FLERR, "Invalid number of terms in restart file"); + // allocate for (int i = 1; i <= atom->nangletypes; i++) { alpha[i] = new double[nterms[i]]; diff --git a/src/EXTRA-MOLECULE/bond_gaussian.cpp b/src/EXTRA-MOLECULE/bond_gaussian.cpp index ceb20c14874..10abdc6bc4d 100644 --- a/src/EXTRA-MOLECULE/bond_gaussian.cpp +++ b/src/EXTRA-MOLECULE/bond_gaussian.cpp @@ -232,6 +232,10 @@ void BondGaussian::read_restart(FILE *fp) MPI_Bcast(&bond_temperature[1], atom->nbondtypes, MPI_DOUBLE, 0, world); MPI_Bcast(&nterms[1], atom->nbondtypes, MPI_INT, 0, world); + for (int i = 1; i <= atom->nbondtypes; i++) + if ((nterms[i] < 0) || (nterms[i] > 4096)) + error->all(FLERR, "Invalid number of terms in restart file"); + // allocate for (int i = 1; i <= atom->nbondtypes; i++) { alpha[i] = new double[nterms[i]]; diff --git a/src/EXTRA-MOLECULE/dihedral_fourier.cpp b/src/EXTRA-MOLECULE/dihedral_fourier.cpp index 1df5fe2c3b8..bcf37f9e2b0 100644 --- a/src/EXTRA-MOLECULE/dihedral_fourier.cpp +++ b/src/EXTRA-MOLECULE/dihedral_fourier.cpp @@ -367,6 +367,12 @@ void DihedralFourier::read_restart(FILE *fp) MPI_Bcast(&nterms_max,1,MPI_INT,0,world); MPI_Bcast(&nterms[1],atom->ndihedraltypes,MPI_INT,0,world); + if ((nterms_max < 0) || (nterms_max > 4096)) + error->all(FLERR,"Invalid number of terms in restart file"); + for (int i = 1; i <= atom->ndihedraltypes; i++) + if ((nterms[i] < 0) || (nterms[i] > 4096)) + error->all(FLERR,"Invalid number of terms in restart file"); + // allocate for (int i = 1; i <= atom->ndihedraltypes; i++) { k[i] = new double[nterms[i]]; diff --git a/src/EXTRA-MOLECULE/dihedral_nharmonic.cpp b/src/EXTRA-MOLECULE/dihedral_nharmonic.cpp index f83c44a2ba0..3e5aed8bbab 100644 --- a/src/EXTRA-MOLECULE/dihedral_nharmonic.cpp +++ b/src/EXTRA-MOLECULE/dihedral_nharmonic.cpp @@ -317,6 +317,12 @@ void DihedralNHarmonic::read_restart(FILE *fp) MPI_Bcast(&nterms_max,1,MPI_INT,0,world); MPI_Bcast(&nterms[1],atom->ndihedraltypes,MPI_INT,0,world); + if ((nterms_max < 0) || (nterms_max > 4096)) + error->all(FLERR,"Invalid number of terms in restart file"); + for (int i = 1; i <= atom->ndihedraltypes; i++) + if ((nterms[i] < 0) || (nterms[i] > 4096)) + error->all(FLERR,"Invalid number of terms in restart file"); + // allocate for (int i = 1; i <= atom->ndihedraltypes; i++) a[i] = new double [nterms[i]]; diff --git a/src/EXTRA-MOLECULE/dihedral_spherical.cpp b/src/EXTRA-MOLECULE/dihedral_spherical.cpp index eee97455110..7d055192d49 100644 --- a/src/EXTRA-MOLECULE/dihedral_spherical.cpp +++ b/src/EXTRA-MOLECULE/dihedral_spherical.cpp @@ -742,6 +742,12 @@ void DihedralSpherical::read_restart(FILE *fp) MPI_Bcast(&nterms_max, 1, MPI_INT, 0, world); MPI_Bcast(&nterms[1], atom->ndihedraltypes, MPI_INT, 0, world); + if ((nterms_max < 0) || (nterms_max > 4096)) + error->all(FLERR, "Invalid number of terms in restart file"); + for (int i = 1; i <= atom->ndihedraltypes; i++) + if ((nterms[i] < 0) || (nterms[i] > 4096)) + error->all(FLERR, "Invalid number of terms in restart file"); + // allocate for (int i = 1; i <= atom->ndihedraltypes; i++) { Ccoeff[i] = new double[nterms[i]]; diff --git a/src/GRANULAR/granular_model.cpp b/src/GRANULAR/granular_model.cpp index 4a130f4f09d..bab3889de43 100644 --- a/src/GRANULAR/granular_model.cpp +++ b/src/GRANULAR/granular_model.cpp @@ -370,6 +370,8 @@ void GranularModel::read_restart(FILE *fp) if (comm->me == 0) utils::sfread(FLERR, &num_char, sizeof(int), 1, fp, nullptr, error); MPI_Bcast(&num_char, 1, MPI_INT, 0, world); + if ((num_char < 0) || (num_char > 65536)) + error->all(FLERR, "Invalid granular model name in restart file"); std::string model_name(num_char, ' '); if (comm->me == 0) diff --git a/src/GRANULAR/pair_granular.cpp b/src/GRANULAR/pair_granular.cpp index d8c80c3159b..d4f2b804c23 100644 --- a/src/GRANULAR/pair_granular.cpp +++ b/src/GRANULAR/pair_granular.cpp @@ -683,6 +683,8 @@ void PairGranular::read_restart(FILE *fp) if (me == 0) utils::sfread(FLERR,&nmodels,sizeof(int),1,fp,nullptr,error); MPI_Bcast(&nmodels,1,MPI_INT,0,world); + if ((nmodels < 0) || (nmodels > maxmodels)) + error->all(FLERR,"Invalid number of granular models in restart file"); for (i = 0; i < nmodels; i++) { delete models_list[i]; diff --git a/src/KOKKOS/pair_hybrid_scaled_kokkos.cpp b/src/KOKKOS/pair_hybrid_scaled_kokkos.cpp index 42f94cb57a5..15bdce989f0 100644 --- a/src/KOKKOS/pair_hybrid_scaled_kokkos.cpp +++ b/src/KOKKOS/pair_hybrid_scaled_kokkos.cpp @@ -745,10 +745,14 @@ void PairHybridScaledKokkos::read_restart(FILE *fp) char *tmp; if (me == 0) utils::sfread(FLERR, &n, sizeof(int), 1, fp, nullptr, error); MPI_Bcast(&n, 1, MPI_INT, 0, world); + if ((n < 0) || (n > 4096)) + error->all(FLERR, "Invalid number of scale variables in restart file"); scalevars.resize(n); for (auto &scale : scalevars) { if (me == 0) utils::sfread(FLERR, &n, sizeof(int), 1, fp, nullptr, error); MPI_Bcast(&n, 1, MPI_INT, 0, world); + if ((n < 1) || (n > 65536)) + error->all(FLERR, "Invalid variable name length in restart file"); tmp = new char[n]; if (me == 0) utils::sfread(FLERR, tmp, sizeof(char), n, fp, nullptr, error); MPI_Bcast(tmp, n, MPI_CHAR, 0, world); diff --git a/src/LEPTON/angle_lepton.cpp b/src/LEPTON/angle_lepton.cpp index 30efa821e8a..f45982c4645 100644 --- a/src/LEPTON/angle_lepton.cpp +++ b/src/LEPTON/angle_lepton.cpp @@ -358,12 +358,16 @@ void AngleLepton::read_restart(FILE *fp) } MPI_Bcast(&num, 1, MPI_INT, 0, world); MPI_Bcast(&maxlen, 1, MPI_INT, 0, world); + if ((num < 0) || (maxlen < 0) || (maxlen > 65536)) + error->all(FLERR, "Invalid expression data in restart file"); char *buf = new char[maxlen]; for (int i = 0; i < num; ++i) { if (comm->me == 0) { utils::sfread(FLERR, &len, sizeof(int), 1, fp, nullptr, error); + if ((len < 1) || (len > maxlen)) + error->one(FLERR, "Invalid expression length in restart file"); utils::sfread(FLERR, buf, sizeof(char), len, fp, nullptr, error); } MPI_Bcast(buf, maxlen, MPI_CHAR, 0, world); diff --git a/src/LEPTON/bond_lepton.cpp b/src/LEPTON/bond_lepton.cpp index 89090a7ba0c..356d8003bd9 100644 --- a/src/LEPTON/bond_lepton.cpp +++ b/src/LEPTON/bond_lepton.cpp @@ -309,12 +309,16 @@ void BondLepton::read_restart(FILE *fp) } MPI_Bcast(&num, 1, MPI_INT, 0, world); MPI_Bcast(&maxlen, 1, MPI_INT, 0, world); + if ((num < 0) || (maxlen < 0) || (maxlen > 65536)) + error->all(FLERR, "Invalid expression data in restart file"); char *buf = new char[maxlen]; for (int i = 0; i < num; ++i) { if (comm->me == 0) { utils::sfread(FLERR, &len, sizeof(int), 1, fp, nullptr, error); + if ((len < 1) || (len > maxlen)) + error->one(FLERR, "Invalid expression length in restart file"); utils::sfread(FLERR, buf, sizeof(char), len, fp, nullptr, error); } MPI_Bcast(buf, maxlen, MPI_CHAR, 0, world); diff --git a/src/LEPTON/dihedral_lepton.cpp b/src/LEPTON/dihedral_lepton.cpp index 6c345358296..f97cb3cd19a 100644 --- a/src/LEPTON/dihedral_lepton.cpp +++ b/src/LEPTON/dihedral_lepton.cpp @@ -452,12 +452,16 @@ void DihedralLepton::read_restart(FILE *fp) } MPI_Bcast(&num, 1, MPI_INT, 0, world); MPI_Bcast(&maxlen, 1, MPI_INT, 0, world); + if ((num < 0) || (maxlen < 0) || (maxlen > 65536)) + error->all(FLERR, "Invalid expression data in restart file"); char *buf = new char[maxlen]; for (int i = 0; i < num; ++i) { if (comm->me == 0) { utils::sfread(FLERR, &len, sizeof(int), 1, fp, nullptr, error); + if ((len < 1) || (len > maxlen)) + error->one(FLERR, "Invalid expression length in restart file"); utils::sfread(FLERR, buf, sizeof(char), len, fp, nullptr, error); } MPI_Bcast(buf, maxlen, MPI_CHAR, 0, world); diff --git a/src/LEPTON/pair_lepton.cpp b/src/LEPTON/pair_lepton.cpp index 82aa08a5928..cefb8ba06a7 100644 --- a/src/LEPTON/pair_lepton.cpp +++ b/src/LEPTON/pair_lepton.cpp @@ -370,12 +370,16 @@ void PairLepton::read_restart(FILE *fp) } MPI_Bcast(&num, 1, MPI_INT, 0, world); MPI_Bcast(&maxlen, 1, MPI_INT, 0, world); + if ((num < 0) || (maxlen < 0) || (maxlen > 65536)) + error->all(FLERR, "Invalid expression data in restart file"); char *buf = new char[maxlen]; for (int i = 0; i < num; ++i) { if (me == 0) { utils::sfread(FLERR, &len, sizeof(int), 1, fp, nullptr, error); + if ((len < 1) || (len > maxlen)) + error->one(FLERR, "Invalid expression length in restart file"); utils::sfread(FLERR, buf, sizeof(char), len, fp, nullptr, error); } MPI_Bcast(buf, maxlen, MPI_CHAR, 0, world); diff --git a/src/MISC/pair_tracker.cpp b/src/MISC/pair_tracker.cpp index c2b1dc2c1db..7670c33e29d 100644 --- a/src/MISC/pair_tracker.cpp +++ b/src/MISC/pair_tracker.cpp @@ -593,6 +593,7 @@ void PairTracker::read_restart_settings(FILE *fp) int n; if (comm->me == 0) utils::sfread(FLERR, &n, sizeof(int), 1, fp, nullptr, error); MPI_Bcast(&n, 1, MPI_INT, 0, world); + if ((n < 1) || (n > 65536)) error->all(FLERR, "Invalid fix ID length in restart file"); id_fix_store_local = new char[n]; if (comm->me == 0) utils::sfread(FLERR, id_fix_store_local, sizeof(char), n, fp, nullptr, error); @@ -601,6 +602,8 @@ void PairTracker::read_restart_settings(FILE *fp) if (comm->me == 0) utils::sfread(FLERR, &nvalues_restart, sizeof(int), 1, fp, nullptr, error); MPI_Bcast(&nvalues_restart, 1, MPI_INT, 0, world); + if ((nvalues_restart < 0) || (nvalues_restart > 4096)) + error->all(FLERR, "Invalid number of values in restart file"); saved_choices.clear(); delete[] pack_choice; diff --git a/src/REACTION/fix_bond_react.cpp b/src/REACTION/fix_bond_react.cpp index 7a434e4032e..3213ca51ffa 100644 --- a/src/REACTION/fix_bond_react.cpp +++ b/src/REACTION/fix_bond_react.cpp @@ -4333,6 +4333,8 @@ void FixBondReact::read_map_file(Reaction &rxn) int nconstraints; rv = sscanf(line,"%d",&nconstraints); if (rv != 1) error->one(FLERR, "Map file header is incorrectly formatted"); + if ((nconstraints < 0) || (nconstraints > 4096)) + error->one(FLERR,"Fix bond/react: Invalid number of constraints in map file"); rxn.constraints.resize(nconstraints); for (int i = 0; i < nconstraints; i++) rxn.constraints[i].ID = i; } else break; @@ -4408,7 +4410,7 @@ void FixBondReact::EdgeIDs(char *line, Reaction &rxn, int nedge) readline(line); rv = sscanf(line,"%d",&tmp); if (rv != 1) error->one(FLERR, "EdgeIDs section is incorrectly formatted"); - if (tmp > rxn.reactant->natoms) + if ((tmp < 1) || (tmp > rxn.reactant->natoms)) error->one(FLERR,"Fix bond/react: Invalid template atom ID in map file"); rxn.atoms[tmp-1].edge = 1; } @@ -4421,7 +4423,7 @@ void FixBondReact::Equivalences(char *line, Reaction &rxn, int nequivalent) readline(line); rv = sscanf(line,"%d %d",&tmp1,&tmp2); if (rv != 2) error->one(FLERR, "Equivalences section is incorrectly formatted"); - if (tmp1 > rxn.reactant->natoms || tmp2 > rxn.product->natoms) + if ((tmp1 < 1) || (tmp1 > rxn.reactant->natoms) || (tmp2 < 1) || (tmp2 > rxn.product->natoms)) error->one(FLERR,"Fix bond/react: Invalid template atom ID in map file"); //equivalences is-> clmn 1: post-reacted, clmn 2: pre-reacted rxn.atoms[tmp2-1].amap[0] = tmp2; @@ -4450,7 +4452,7 @@ void FixBondReact::DeleteAtoms(char *line, Reaction &rxn, int ndelete) readline(line); rv = sscanf(line,"%d",&tmp); if (rv != 1) error->one(FLERR, "DeleteIDs section is incorrectly formatted"); - if (tmp > rxn.reactant->natoms) + if ((tmp < 1) || (tmp > rxn.reactant->natoms)) error->one(FLERR,"Fix bond/react: Invalid template atom ID in map file"); rxn.atoms[tmp-1].deleted = 1; } @@ -4464,7 +4466,7 @@ void FixBondReact::CreateAtoms(char *line, Reaction &rxn, int ncreate) readline(line); rv = sscanf(line,"%d",&tmp); if (rv != 1) error->one(FLERR, Error::NOLASTLINE, "CreateIDs section is incorrectly formatted"); - if (tmp > rxn.product->natoms) + if ((tmp < 1) || (tmp > rxn.product->natoms)) error->one(FLERR, Error::NOLASTLINE, "Fix bond/react: Invalid atom ID in CreateIDs section of map file"); rxn.atoms[tmp-1].created = 1; } @@ -4493,7 +4495,7 @@ void FixBondReact::ChiralCenters(char *line, Reaction &rxn, int nchiral) readline(line); rv = sscanf(line,"%d",&tmp); if (rv != 1) error->one(FLERR, "ChiralIDs section is incorrectly formatted"); - if (tmp > rxn.reactant->natoms) + if ((tmp < 1) || (tmp > rxn.reactant->natoms)) error->one(FLERR,"Fix bond/react: Invalid template atom ID in map file"); rxn.atoms[tmp-1].chiral[0] = 1; if (rxn.reactant->xflag == 0) @@ -4522,11 +4524,12 @@ void FixBondReact::ChiralCenters(char *line, Reaction &rxn, int nchiral) void FixBondReact::ReadWildcards(char *line, Reaction &rxn, int nwild) { - int tmp; + int tmp,rv; for (int i = 0; i < nwild; i++) { readline(line); - sscanf(line,"%d",&tmp); - if (tmp > rxn.reactant->natoms) + rv = sscanf(line,"%d",&tmp); + if (rv != 1) error->one(FLERR, "Wildcards section is incorrectly formatted"); + if ((tmp < 1) || (tmp > rxn.reactant->natoms)) error->one(FLERR,"Bond/react: Invalid template atom ID in map file"); rxn.atoms[tmp-1].wildcard = true; } diff --git a/src/angle_hybrid.cpp b/src/angle_hybrid.cpp index 85237cb602e..b187c896492 100644 --- a/src/angle_hybrid.cpp +++ b/src/angle_hybrid.cpp @@ -364,6 +364,8 @@ void AngleHybrid::read_restart(FILE *fp) int me = comm->me; if (me == 0) utils::sfread(FLERR, &nstyles, sizeof(int), 1, fp, nullptr, error); MPI_Bcast(&nstyles, 1, MPI_INT, 0, world); + if ((nstyles < 1) || (nstyles > 64)) + error->all(FLERR, "Invalid number of sub-styles in restart file"); styles = new Angle *[nstyles]; keywords = new char *[nstyles]; @@ -373,6 +375,7 @@ void AngleHybrid::read_restart(FILE *fp) for (int m = 0; m < nstyles; m++) { if (me == 0) utils::sfread(FLERR, &n, sizeof(int), 1, fp, nullptr, error); MPI_Bcast(&n, 1, MPI_INT, 0, world); + if ((n < 1) || (n > 65536)) error->all(FLERR, "Invalid style name length in restart file"); keywords[m] = new char[n]; if (me == 0) utils::sfread(FLERR, keywords[m], sizeof(char), n, fp, nullptr, error); MPI_Bcast(keywords[m], n, MPI_CHAR, 0, world); diff --git a/src/bond_hybrid.cpp b/src/bond_hybrid.cpp index 1c06f6e9a97..8bd3e4aa6b3 100644 --- a/src/bond_hybrid.cpp +++ b/src/bond_hybrid.cpp @@ -430,6 +430,8 @@ void BondHybrid::read_restart(FILE *fp) int me = comm->me; if (me == 0) utils::sfread(FLERR, &nstyles, sizeof(int), 1, fp, nullptr, error); MPI_Bcast(&nstyles, 1, MPI_INT, 0, world); + if ((nstyles < 1) || (nstyles > 64)) + error->all(FLERR, "Invalid number of sub-styles in restart file"); styles = new Bond *[nstyles]; keywords = new char *[nstyles]; @@ -439,6 +441,7 @@ void BondHybrid::read_restart(FILE *fp) for (int m = 0; m < nstyles; m++) { if (me == 0) utils::sfread(FLERR, &n, sizeof(int), 1, fp, nullptr, error); MPI_Bcast(&n, 1, MPI_INT, 0, world); + if ((n < 1) || (n > 65536)) error->all(FLERR, "Invalid style name length in restart file"); keywords[m] = new char[n]; if (me == 0) utils::sfread(FLERR, keywords[m], sizeof(char), n, fp, nullptr, error); MPI_Bcast(keywords[m], n, MPI_CHAR, 0, world); diff --git a/src/dihedral_hybrid.cpp b/src/dihedral_hybrid.cpp index 19c2f40f65c..c4e763c63ee 100644 --- a/src/dihedral_hybrid.cpp +++ b/src/dihedral_hybrid.cpp @@ -361,6 +361,8 @@ void DihedralHybrid::read_restart(FILE *fp) int me = comm->me; if (me == 0) utils::sfread(FLERR, &nstyles, sizeof(int), 1, fp, nullptr, error); MPI_Bcast(&nstyles, 1, MPI_INT, 0, world); + if ((nstyles < 1) || (nstyles > 64)) + error->all(FLERR, "Invalid number of sub-styles in restart file"); styles = new Dihedral *[nstyles]; keywords = new char *[nstyles]; @@ -370,6 +372,7 @@ void DihedralHybrid::read_restart(FILE *fp) for (int m = 0; m < nstyles; m++) { if (me == 0) utils::sfread(FLERR, &n, sizeof(int), 1, fp, nullptr, error); MPI_Bcast(&n, 1, MPI_INT, 0, world); + if ((n < 1) || (n > 65536)) error->all(FLERR, "Invalid style name length in restart file"); keywords[m] = new char[n]; if (me == 0) utils::sfread(FLERR, keywords[m], sizeof(char), n, fp, nullptr, error); MPI_Bcast(keywords[m], n, MPI_CHAR, 0, world); diff --git a/src/group.cpp b/src/group.cpp index 14bc5096ee2..694c0b89c5e 100644 --- a/src/group.cpp +++ b/src/group.cpp @@ -789,6 +789,7 @@ void Group::read_restart(FILE *fp) } if (me == 0) utils::sfread(FLERR, &n, sizeof(int), 1, fp, nullptr, error); MPI_Bcast(&n, 1, MPI_INT, 0, world); + if ((n < 0) || (n > 65536)) error->all(FLERR, "Invalid group name length in restart file"); if (n) { names[i] = new char[n]; if (me == 0) utils::sfread(FLERR, names[i], sizeof(char), n, fp, nullptr, error); diff --git a/src/improper_hybrid.cpp b/src/improper_hybrid.cpp index 7e61f866f61..9110542c98c 100644 --- a/src/improper_hybrid.cpp +++ b/src/improper_hybrid.cpp @@ -355,6 +355,8 @@ void ImproperHybrid::read_restart(FILE *fp) int me = comm->me; if (me == 0) utils::sfread(FLERR, &nstyles, sizeof(int), 1, fp, nullptr, error); MPI_Bcast(&nstyles, 1, MPI_INT, 0, world); + if ((nstyles < 1) || (nstyles > 64)) + error->all(FLERR, "Invalid number of sub-styles in restart file"); styles = new Improper *[nstyles]; keywords = new char *[nstyles]; @@ -364,6 +366,7 @@ void ImproperHybrid::read_restart(FILE *fp) for (int m = 0; m < nstyles; m++) { if (me == 0) utils::sfread(FLERR, &n, sizeof(int), 1, fp, nullptr, error); MPI_Bcast(&n, 1, MPI_INT, 0, world); + if ((n < 1) || (n > 65536)) error->all(FLERR, "Invalid style name length in restart file"); keywords[m] = new char[n]; if (me == 0) utils::sfread(FLERR, keywords[m], sizeof(char), n, fp, nullptr, error); MPI_Bcast(keywords[m], n, MPI_CHAR, 0, world); diff --git a/src/modify.cpp b/src/modify.cpp index 830f66c3a1e..4767f3c8aba 100644 --- a/src/modify.cpp +++ b/src/modify.cpp @@ -1543,6 +1543,8 @@ int Modify::read_restart(FILE *fp) int me = comm->me; if (me == 0) utils::sfread(FLERR, &nfix_restart_global, sizeof(int), 1, fp, nullptr, error); MPI_Bcast(&nfix_restart_global, 1, MPI_INT, 0, world); + if ((nfix_restart_global < 0) || (nfix_restart_global > 4096)) + error->all(FLERR, "Invalid number of fix entries in restart file"); // allocate space for each entry @@ -1581,10 +1583,12 @@ int Modify::read_restart(FILE *fp) // nfix_restart_peratom = # of restart entries with peratom info - int maxsize = 0; + bigint maxsize = 0; if (me == 0) utils::sfread(FLERR, &nfix_restart_peratom, sizeof(int), 1, fp, nullptr, error); MPI_Bcast(&nfix_restart_peratom, 1, MPI_INT, 0, world); + if ((nfix_restart_peratom < 0) || (nfix_restart_peratom > 4096)) + error->all(FLERR, "Invalid number of fix entries in restart file"); // allocate space for each entry @@ -1615,13 +1619,16 @@ int Modify::read_restart(FILE *fp) if (me == 0) utils::sfread(FLERR, &n, sizeof(int), 1, fp, nullptr, error); MPI_Bcast(&n, 1, MPI_INT, 0, world); + if (n < 0) error->all(FLERR, "Invalid per-atom data size in restart file"); maxsize += n; index_restart_peratom[i] = i; used_restart_peratom[i] = 0; } - return maxsize; + if (maxsize > MAXSMALLINT) error->all(FLERR, "Per-atom fix data in restart file is too large"); + + return (int) maxsize; } /* ---------------------------------------------------------------------- diff --git a/src/pair_hybrid.cpp b/src/pair_hybrid.cpp index 95109260527..cf244a2c3e4 100644 --- a/src/pair_hybrid.cpp +++ b/src/pair_hybrid.cpp @@ -819,6 +819,8 @@ void PairHybrid::read_restart(FILE *fp) int me = comm->me; if (me == 0) utils::sfread(FLERR,&nstyles,sizeof(int),1,fp,nullptr,error); MPI_Bcast(&nstyles,1,MPI_INT,0,world); + if ((nstyles < 1) || (nstyles > 64)) + error->all(FLERR,"Invalid number of sub-styles in restart file"); // allocate list of sub-styles @@ -850,6 +852,7 @@ void PairHybrid::read_restart(FILE *fp) for (int m = 0; m < nstyles; m++) { if (me == 0) utils::sfread(FLERR,&n,sizeof(int),1,fp,nullptr,error); MPI_Bcast(&n,1,MPI_INT,0,world); + if ((n < 1) || (n > 65536)) error->all(FLERR,"Invalid style name length in restart file"); keywords[m] = new char[n]; if (me == 0) utils::sfread(FLERR,keywords[m],sizeof(char),n,fp,nullptr,error); MPI_Bcast(keywords[m],n,MPI_CHAR,0,world); diff --git a/src/pair_hybrid_scaled.cpp b/src/pair_hybrid_scaled.cpp index 902bd754d22..afa4b7ec1a3 100644 --- a/src/pair_hybrid_scaled.cpp +++ b/src/pair_hybrid_scaled.cpp @@ -717,10 +717,14 @@ void PairHybridScaled::read_restart(FILE *fp) char *tmp; if (me == 0) utils::sfread(FLERR, &n, sizeof(int), 1, fp, nullptr, error); MPI_Bcast(&n, 1, MPI_INT, 0, world); + if ((n < 0) || (n > 4096)) + error->all(FLERR, "Invalid number of scale variables in restart file"); scalevars.resize(n); for (auto &scale : scalevars) { if (me == 0) utils::sfread(FLERR, &n, sizeof(int), 1, fp, nullptr, error); MPI_Bcast(&n, 1, MPI_INT, 0, world); + if ((n < 1) || (n > 65536)) + error->all(FLERR, "Invalid variable name length in restart file"); tmp = new char[n]; if (me == 0) utils::sfread(FLERR, tmp, sizeof(char), n, fp, nullptr, error); MPI_Bcast(tmp, n, MPI_CHAR, 0, world); diff --git a/src/read_restart.cpp b/src/read_restart.cpp index 9b98013e932..4f07ca5feb3 100644 --- a/src/read_restart.cpp +++ b/src/read_restart.cpp @@ -202,6 +202,7 @@ void ReadRestart::command(int narg, char **arg) error->all(FLERR, 1, "Invalid flag in peratom section of restart file"); n = read_int(); + if (n < 0) error->all(FLERR, 1, "Invalid data size in peratom section of restart file"); if (n > maxbuf) { maxbuf = n; memory->destroy(buf); @@ -209,8 +210,13 @@ void ReadRestart::command(int narg, char **arg) } read_double_vec(n,buf); + // the first value of each per-atom chunk is the size of the chunk; + // it must be positive so the loop below always advances + m = 0; while (m < n) { + if (static_cast(buf[m]) < 1) + error->all(FLERR, 1, "Invalid data in peratom section of restart file"); x = &buf[m+1]; if (remapflag) { iptr = (imageint *) &buf[m+7]; diff --git a/src/reader_native.cpp b/src/reader_native.cpp index d6381978fd5..01bd0cb2793 100644 --- a/src/reader_native.cpp +++ b/src/reader_native.cpp @@ -238,6 +238,7 @@ bigint ReaderNative::read_header(double box[3][3], int &boxinfo, int &triclinic, } read_buf(&len, sizeof(int), 1); + if (len < 0) error->one(FLERR,"Dump file is invalid or corrupted"); labelline = read_binary_str(len); } else { error->one(FLERR, "Unsupported old binary dump format"); @@ -462,6 +463,7 @@ void ReaderNative::read_atoms(int n, int nfield, double **fields) // if the last chunk has finished if (iatom_chunk == 0) { read_buf(&natom_chunk, sizeof(int), 1); + if (natom_chunk < 0) error->one(FLERR,"Dump file is invalid or corrupted"); read_double_chunk(natom_chunk); natom_chunk /= size_one; m = 0; From 1aeb38ccac669ec0e4ab91da9bf9edb17e3ab01c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 3 Jul 2026 08:46:57 -0400 Subject: [PATCH 031/116] Validate user parameters that are used as divisors or lookups - pair exp6/rx: a pair_coeff site species without an entry in the exp6 parameters file was silently accepted and the mixing weights later used unset values; reject it with a clear error (also covers the KOKKOS variant, which inherits coeff). (16 CIDs, e.g. 1661017, 1663162) - fix adapt: scaling diameter or charge through a value that reaches exactly 0.0 divides by zero on the next step and destroys the atom data irrecoverably; reject a zero scale value. (CIDs 1661310, 1662853) - pair ldd: validate rc > 0 and 0 <= r0 < rc at coefficient parse time, before init_coeffs() divides. (12 CIDs, e.g. 1661143) - pair meam: reject rho0 <= 0 from library and parameter files; the background densities derived from it are used as divisors. (CIDs 1660967, 1661702) - fix rheo: require a positive equilibrium density. (CID 1661752) - fix pour: apply the positivity check of 'diam poly' also to 'diam one' and 'diam range'; a zero diameter led to a division by zero in the insertion count. (CID 1661254) - pair gauss: mixing with b = 0 divided by zero; explicitly set pairs keep working. (CID 1661500) Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01YNvuaNpJNkbCKaAE8ngPQv --- src/BOCS/pair_ldd.cpp | 16 ++++++++++------ src/DPD-REACT/pair_exp6_rx.cpp | 19 +++++++++++++++++++ src/EXTRA-PAIR/pair_gauss.cpp | 8 ++++++++ src/GRANULAR/fix_pour.cpp | 2 ++ src/MEAM/pair_meam.cpp | 12 ++++++++++++ src/RHEO/fix_rheo.cpp | 5 ++++- src/fix_adapt.cpp | 20 ++++++++++++++++++-- 7 files changed, 73 insertions(+), 9 deletions(-) diff --git a/src/BOCS/pair_ldd.cpp b/src/BOCS/pair_ldd.cpp index ee6970aaea3..4a65a02879b 100644 --- a/src/BOCS/pair_ldd.cpp +++ b/src/BOCS/pair_ldd.cpp @@ -513,10 +513,17 @@ void PairLdd::coeff_ldd(int si, int sj, int narg, char **arg) if (bkInd) ErrorDoubleKeyword(KEY_LDD_IND); bkInd = true; if (iarg + 3 >= narg) ErrorNumKeywordArgs(KEY_LDD_IND, "wtype r0 rc"); + const double r0 = utils::numeric(FLERR, arg[iarg + 2], false, lmp); + const double rc = utils::numeric(FLERR, arg[iarg + 3], false, lmp); + // all indicator variants divide by rc (and some by rc - r0) when setting + // up their coefficients, so these values must be validated before init_coeffs() + if ((rc <= 0.0) || (r0 < 0.0) || (r0 >= rc)) + error->all(FLERR, + "ldd species pair {} {}: indicator cutoff rc ({}) must be positive and the " + "inner radius r0 ({}) must be non-negative and smaller than rc", + elements[si], elements[sj], rc, r0); Inds[si][sj] = new_indicator(arg[iarg + 1]); - Inds[si][sj]->init_coeffs(utils::numeric(FLERR, arg[iarg + 2], false, lmp), - utils::numeric(FLERR, arg[iarg + 3], false, lmp), - domain->dimension); + Inds[si][sj]->init_coeffs(r0, rc, domain->dimension); iarg += 4; } else if (strcmp(arg[iarg], KEY_LDD_SELF) == 0) { if (bkSelf) ErrorDoubleKeyword(KEY_LDD_SELF); @@ -567,9 +574,6 @@ void PairLdd::coeff_ldd(int si, int sj, int narg, char **arg) if (!bkSelf) error->all(FLERR, "ldd species pair {} {}: missing required keyword {}", elements[si], elements[sj], KEY_LDD_SELF); - if (Inds[si][sj]->r0 >= Inds[si][sj]->rc) - error->all(FLERR, "ldd species pair {} {}: r0 ({}) must be less than rc ({})", elements[si], - elements[sj], Inds[si][sj]->r0, Inds[si][sj]->rc); if (bSelf) { if (si == sj) diff --git a/src/DPD-REACT/pair_exp6_rx.cpp b/src/DPD-REACT/pair_exp6_rx.cpp index ba953b65425..3b51504c35e 100644 --- a/src/DPD-REACT/pair_exp6_rx.cpp +++ b/src/DPD-REACT/pair_exp6_rx.cpp @@ -656,6 +656,25 @@ void PairExp6rx::coeff(int narg, char **arg) isite2 = isp; } + // verify that a species named as site1 or site2 has an entry in the exp6 parameter file. + // otherwise the mixing weights would later be computed from unset parameters. + + if (!isOneFluidApprox(isite1)) { + int iparam; + for (iparam = 0; iparam < nparams; ++iparam) + if (params[iparam].ispecies == isite1) break; + if (iparam == nparams) + error->all(FLERR, "Site1 species {} has no exp6 parameters in file {}", site1, arg[2]); + } + + if (!isOneFluidApprox(isite2)) { + int iparam; + for (iparam = 0; iparam < nparams; ++iparam) + if (params[iparam].ispecies == isite2) break; + if (iparam == nparams) + error->all(FLERR, "Site2 species {} has no exp6 parameters in file {}", site2, arg[2]); + } + for (int iparam = 0; iparam < nparams; ++iparam) { switch (params[iparam].potentialType) { case PotentialType::exp6: diff --git a/src/EXTRA-PAIR/pair_gauss.cpp b/src/EXTRA-PAIR/pair_gauss.cpp index 48203f2c8ec..ba2d702409f 100644 --- a/src/EXTRA-PAIR/pair_gauss.cpp +++ b/src/EXTRA-PAIR/pair_gauss.cpp @@ -216,6 +216,14 @@ void PairGauss::coeff(int narg, char **arg) double PairGauss::init_one(int i, int j) { if (setflag[i][j] == 0) { + // mixing determines the width of the mixed gaussian from the widths of the + // i,i and j,j gaussians, which is not possible when either b is 0.0 + + if ((b[i][i] == 0.0) || (b[j][j] == 0.0)) + error->all(FLERR, Error::NOLASTLINE, + "Cannot mix pair gauss coefficients for atom types {} and {} when b is 0.0; " + "must use a pair_coeff command to set them explicitly", i, j); + double sign_bi = (b[i][i] >= 0.0) ? 1.0 : -1.0; double sign_bj = (b[j][j] >= 0.0) ? 1.0 : -1.0; double si = sqrt(0.5 / fabs(b[i][i])); diff --git a/src/GRANULAR/fix_pour.cpp b/src/GRANULAR/fix_pour.cpp index 6a1e160b9de..2206aadc991 100644 --- a/src/GRANULAR/fix_pour.cpp +++ b/src/GRANULAR/fix_pour.cpp @@ -969,6 +969,7 @@ void FixPour::options(int narg, char **arg) if (iarg + 3 > narg) utils::missing_cmd_args(FLERR, "pour diam one", error); dstyle = ONE; radius_one = 0.5 * utils::numeric(FLERR, arg[iarg + 2], false, lmp); + if (radius_one <= 0.0) error->all(FLERR, "Illegal fix pour radius: {}", radius_one); radius_max = radius_one; iarg += 3; } else if (strcmp(arg[iarg + 1], "range") == 0) { @@ -977,6 +978,7 @@ void FixPour::options(int narg, char **arg) radius_lo = 0.5 * utils::numeric(FLERR, arg[iarg + 2], false, lmp); radius_hi = 0.5 * utils::numeric(FLERR, arg[iarg + 3], false, lmp); if (radius_lo > radius_hi) error->all(FLERR, "Illegal fix pour radii: {} exceeds {}", radius_lo, radius_hi); + if (radius_lo <= 0.0) error->all(FLERR, "Illegal fix pour radius: {}", radius_lo); radius_max = radius_hi; iarg += 4; } else if (strcmp(arg[iarg + 1], "poly") == 0) { diff --git a/src/MEAM/pair_meam.cpp b/src/MEAM/pair_meam.cpp index 297ec60d934..5e2ed2a868f 100644 --- a/src/MEAM/pair_meam.cpp +++ b/src/MEAM/pair_meam.cpp @@ -469,6 +469,11 @@ void PairMEAM::read_global_meam_file(const std::string &globalfile) if (!isone(t0[index])) error->one(FLERR, 4, "Unsupported parameter in MEAM library file: t0 != 1"); + // rho0 determines the background reference density which divides the + // embedding energy, so it must be positive + if (rozero[index] <= 0.0) + error->one(FLERR, 4, "Invalid parameter in MEAM library file: rho0 must be > 0"); + // z given is ignored: if this is mismatched, we definitely won't do what the user said -> fatal error if (z[index] != MEAM::get_Zij(lat[index])) error->one(FLERR, 4, "Mismatched parameter in MEAM library file: z != lat"); @@ -615,6 +620,13 @@ void PairMEAM::read_user_meam_file(const std::string &userfile, int uidx) } } + // rho0 determines the background reference density which divides the + // embedding energy, so it must remain positive + + if ((which == 2) && (value <= 0.0)) + error->all(FLERR, uidx, "Error in MEAM parameter file {}:{}: rho0 must be > 0", userfile, + lineno); + // pass single setting to MEAM package int errorflag = 0; diff --git a/src/RHEO/fix_rheo.cpp b/src/RHEO/fix_rheo.cpp index cceb82a6830..428169570b1 100644 --- a/src/RHEO/fix_rheo.cpp +++ b/src/RHEO/fix_rheo.cpp @@ -168,7 +168,10 @@ FixRHEO::FixRHEO(LAMMPS *lmp, int narg, char **arg) : } } else if (strcmp(arg[iarg], "density") == 0) { if (iarg + n >= narg) utils::missing_cmd_args(FLERR, "fix rheo density", error); - for (i = 1; i <= n; i++) rho0[i] = utils::numeric(FLERR, arg[iarg + i], false, lmp); + for (i = 1; i <= n; i++) { + rho0[i] = utils::numeric(FLERR, arg[iarg + i], false, lmp); + if (rho0[i] <= 0.0) error->all(FLERR, "The equilibrium density must be greater than zero"); + } iarg += n; } else if (strcmp(arg[iarg], "speed/sound") == 0) { if (iarg + n >= narg) utils::missing_cmd_args(FLERR, "fix rheo speed/sound", error); diff --git a/src/fix_adapt.cpp b/src/fix_adapt.cpp index 6474896a270..47d45b06d8a 100644 --- a/src/fix_adapt.cpp +++ b/src/fix_adapt.cpp @@ -823,7 +823,15 @@ void FixAdapt::change_settings() int nlocal = atom->nlocal; int nall = nlocal + atom->nghost; - if (scaleflag) scale = value / previous_diam_scale; + // a scale factor of 0.0 would zero all diameters permanently and cannot + // be undone on later steps, so it must be rejected before the division + + if (scaleflag) { + if ((value == 0.0) || (previous_diam_scale == 0.0)) + error->all(FLERR, Error::NOLASTLINE, + "Fix adapt diameter scale factor of 0.0 is not supported"); + scale = value / previous_diam_scale; + } // mass must not become zero and radius must not be negative if (massflag && ((scale == 0.0) || (value == 0.0))) @@ -855,7 +863,15 @@ void FixAdapt::change_settings() int nlocal = atom->nlocal; int nall = nlocal + atom->nghost; - if (scaleflag) scale = value / previous_chg_scale; + // a scale factor of 0.0 would zero all charges permanently and cannot + // be undone on later steps, so it must be rejected before the division + + if (scaleflag) { + if ((value == 0.0) || (previous_chg_scale == 0.0)) + error->all(FLERR, Error::NOLASTLINE, + "Fix adapt charge scale factor of 0.0 is not supported"); + scale = value / previous_chg_scale; + } for (i = 0; i < nall; i++) { if (mask[i] & groupbit) { From b0c192737d34c7a8d55e2178173c160d2053f20b Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 3 Jul 2026 08:46:57 -0400 Subject: [PATCH 032/116] Harden geometrically guaranteed searches and degenerate region cases - rigid family: initialize the extended-particle bonus pointers to nullptr in the set_v/set_xv variants that did not, matching their sibling functions. (15 CIDs, e.g. 1662372, 1662728, 1662131) - regions block/prism (CPU and KOKKOS block): with all faces open the closest-point search never sets a contact point; return 'no contact' instead of using unset coordinates. region cone: add the same no-candidate early return to the y/z branches that the x branch has. (CIDs 1662820, 1661140, 1661344, 1663068, 1663227, 1663307, 1661170, 1661018) - GRANSURF: initialize the shared-edge search results and report inconsistent surface connectivity instead of using a stale index; initialize the corner/edge classification variables in the first primary-constraint loop like the second loop does. (CIDs 1663160, 1663259, 1660977, 1661153, 1662451, 1661208, 1663360, 1663402) - pair bop: the neighbor-coordination searches are guaranteed to succeed by construction of the full lists; initialize the result indices and report an inconsistent neighbor list instead of indexing accumulators with garbage. (CIDs 1661757, 1661648, 1662423, 1662042, 1661562) Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01YNvuaNpJNkbCKaAE8ngPQv --- src/GRANSURF/fix_surface_global.cpp | 13 +++++++++++++ src/GRANSURF/fix_surface_local.cpp | 12 ++++++++++++ src/GRANSURF/pair_surf_granular.cpp | 1 + src/KOKKOS/region_block_kokkos.h | 4 ++++ src/MANYBODY/pair_bop.cpp | 8 ++++++++ src/OPENMP/fix_rigid_nh_omp.cpp | 10 +++++----- src/OPENMP/fix_rigid_omp.cpp | 4 ++-- src/OPENMP/fix_rigid_small_omp.cpp | 10 +++++----- src/RIGID/fix_rigid.cpp | 6 +++--- src/region_block.cpp | 4 ++++ src/region_cone.cpp | 2 ++ src/region_prism.cpp | 10 ++++++++-- src/region_prism.h | 2 +- 13 files changed, 68 insertions(+), 18 deletions(-) diff --git a/src/GRANSURF/fix_surface_global.cpp b/src/GRANSURF/fix_surface_global.cpp index ae39cfaa322..c38084cfd6e 100644 --- a/src/GRANSURF/fix_surface_global.cpp +++ b/src/GRANSURF/fix_surface_global.cpp @@ -2595,6 +2595,7 @@ void FixSurfaceGlobal::connectivity3d_complete() for (m = 0; m < connect3d[i].ne1; m++) { j = connect3d[i].neigh_e1[m]; + jpfirst = jpsecond = -1; if (tris[i].p1 == tris[j].p1) jpfirst = 1; else if (tris[i].p1 == tris[j].p2) jpfirst = 2; else if (tris[i].p1 == tris[j].p3) jpfirst = 3; @@ -2603,6 +2604,9 @@ void FixSurfaceGlobal::connectivity3d_complete() else if (tris[i].p2 == tris[j].p2) jpsecond = 2; else if (tris[i].p2 == tris[j].p3) jpsecond = 3; + if ((jpfirst < 0) || (jpsecond < 0)) + error->one(FLERR, Error::NOLASTLINE, "Inconsistent surface connectivity"); + inorm = tris[i].norm; jnorm = tris[j].norm; dotnorm = MathExtra::dot3(inorm,jnorm); @@ -2635,6 +2639,7 @@ void FixSurfaceGlobal::connectivity3d_complete() for (m = 0; m < connect3d[i].ne2; m++) { j = connect3d[i].neigh_e2[m]; + jpfirst = jpsecond = -1; if (tris[i].p2 == tris[j].p1) jpfirst = 1; else if (tris[i].p2 == tris[j].p2) jpfirst = 2; else if (tris[i].p2 == tris[j].p3) jpfirst = 3; @@ -2643,6 +2648,9 @@ void FixSurfaceGlobal::connectivity3d_complete() else if (tris[i].p3 == tris[j].p2) jpsecond = 2; else if (tris[i].p3 == tris[j].p3) jpsecond = 3; + if ((jpfirst < 0) || (jpsecond < 0)) + error->one(FLERR, Error::NOLASTLINE, "Inconsistent surface connectivity"); + inorm = tris[i].norm; jnorm = tris[j].norm; dotnorm = MathExtra::dot3(inorm,jnorm); @@ -2675,6 +2683,7 @@ void FixSurfaceGlobal::connectivity3d_complete() for (m = 0; m < connect3d[i].ne3; m++) { j = connect3d[i].neigh_e3[m]; + jpfirst = jpsecond = -1; if (tris[i].p3 == tris[j].p1) jpfirst = 1; else if (tris[i].p3 == tris[j].p2) jpfirst = 2; else if (tris[i].p3 == tris[j].p3) jpfirst = 3; @@ -2683,6 +2692,9 @@ void FixSurfaceGlobal::connectivity3d_complete() else if (tris[i].p1 == tris[j].p2) jpsecond = 2; else if (tris[i].p1 == tris[j].p3) jpsecond = 3; + if ((jpfirst < 0) || (jpsecond < 0)) + error->one(FLERR, Error::NOLASTLINE, "Inconsistent surface connectivity"); + inorm = tris[i].norm; jnorm = tris[j].norm; dotnorm = MathExtra::dot3(inorm,jnorm); @@ -4214,6 +4226,7 @@ double FixSurfaceGlobal::calculate_3d_forces(std::vector &composite_surfs) flag = contact_surfs[n].flag; MathExtra::copy3(contact_surfs[n].surf_norm, jnorm); + which1 = which2 = -1; if (flag == -4) { which1 = 0; which2 = 2; diff --git a/src/GRANSURF/fix_surface_local.cpp b/src/GRANSURF/fix_surface_local.cpp index 499033cf3b0..8916e2d3f35 100644 --- a/src/GRANSURF/fix_surface_local.cpp +++ b/src/GRANSURF/fix_surface_local.cpp @@ -3621,6 +3621,7 @@ void FixSurfaceLocal::connectivity3d_complete() if (j == -1) error->one(FLERR, Error::NOLASTLINE, "Missing tri atom {} from surface", jtag); jconnect = atom2connect[j]; + jpfirst = jpsecond = -1; if (same_point(cpts[iconnect][0], cpts[jconnect][0])) jpfirst = 1; else if (same_point(cpts[iconnect][0], cpts[jconnect][1])) @@ -3635,6 +3636,9 @@ void FixSurfaceLocal::connectivity3d_complete() else if (same_point(cpts[iconnect][1], cpts[jconnect][2])) jpsecond = 3; + if ((jpfirst < 0) || (jpsecond < 0)) + error->one(FLERR, Error::NOLASTLINE, "Inconsistent surface connectivity"); + inorm = normals[iconnect]; jnorm = normals[jconnect]; dotnorm = MathExtra::dot3(inorm, jnorm); @@ -3675,6 +3679,7 @@ void FixSurfaceLocal::connectivity3d_complete() if (j == -1) error->one(FLERR, Error::NOLASTLINE, "Missing tri atom {} from surface", jtag); jconnect = atom2connect[j]; + jpfirst = jpsecond = -1; if (same_point(cpts[iconnect][1], cpts[jconnect][0])) jpfirst = 1; else if (same_point(cpts[iconnect][1], cpts[jconnect][1])) @@ -3689,6 +3694,9 @@ void FixSurfaceLocal::connectivity3d_complete() else if (same_point(cpts[iconnect][2], cpts[jconnect][2])) jpsecond = 3; + if ((jpfirst < 0) || (jpsecond < 0)) + error->one(FLERR, Error::NOLASTLINE, "Inconsistent surface connectivity"); + inorm = normals[iconnect]; jnorm = normals[jconnect]; dotnorm = MathExtra::dot3(inorm, jnorm); @@ -3728,6 +3736,7 @@ void FixSurfaceLocal::connectivity3d_complete() if (j == -1) error->one(FLERR, Error::NOLASTLINE, "Missing tri atom {} from surface", jtag); jconnect = atom2connect[j]; + jpfirst = jpsecond = -1; if (same_point(cpts[iconnect][2], cpts[jconnect][0])) jpfirst = 1; else if (same_point(cpts[iconnect][2], cpts[jconnect][1])) @@ -3742,6 +3751,9 @@ void FixSurfaceLocal::connectivity3d_complete() else if (same_point(cpts[iconnect][0], cpts[jconnect][2])) jpsecond = 3; + if ((jpfirst < 0) || (jpsecond < 0)) + error->one(FLERR, Error::NOLASTLINE, "Inconsistent surface connectivity"); + inorm = normals[iconnect]; jnorm = normals[jconnect]; dotnorm = MathExtra::dot3(inorm, jnorm); diff --git a/src/GRANSURF/pair_surf_granular.cpp b/src/GRANSURF/pair_surf_granular.cpp index 01f74dd772f..f0e071621f0 100644 --- a/src/GRANSURF/pair_surf_granular.cpp +++ b/src/GRANSURF/pair_surf_granular.cpp @@ -1448,6 +1448,7 @@ double PairSurfGranular::calculate_3d_forces(std::vector &composite_surfs) flag = contact_surfs[n].flag; MathExtra::copy3(contact_surfs[n].surf_norm, jnorm); + which1 = which2 = -1; if (flag == -4) { which1 = 0; which2 = 2; diff --git a/src/KOKKOS/region_block_kokkos.h b/src/KOKKOS/region_block_kokkos.h index 7009b6ce31e..24285e2448f 100644 --- a/src/KOKKOS/region_block_kokkos.h +++ b/src/KOKKOS/region_block_kokkos.h @@ -235,6 +235,10 @@ class RegBlockKokkos : public RegBlock, public KokkosBase { mindist = dist; } } + + // no contact possible if all faces are open + + if (mindist == MAXDOUBLEINT) return 0; } add_contact(0, x, xp, yp, zp); diff --git a/src/MANYBODY/pair_bop.cpp b/src/MANYBODY/pair_bop.cpp index 830c36d890e..4760524f55f 100644 --- a/src/MANYBODY/pair_bop.cpp +++ b/src/MANYBODY/pair_bop.cpp @@ -724,6 +724,7 @@ double PairBOP::SigmaBo(int itmp, int jtmp) memory_sg(nb_t); initial_sg(nb_t); + n_ji = -1; for (loop = 0; loop < nlistj; loop++) { temp_loop = BOP_index[j] + loop; nei_loop = neigh_index[temp_loop]; @@ -733,6 +734,7 @@ double PairBOP::SigmaBo(int itmp, int jtmp) break; } } + if (n_ji < 0) error->one(FLERR,"BOP neighbor list is inconsistent"); dis_ij[0] = pl_ij.dis[0]; dis_ij[1] = pl_ij.dis[1]; @@ -793,6 +795,7 @@ double PairBOP::SigmaBo(int itmp, int jtmp) nfound = 0; pass_jk = 0; + n_ki = -1; for (loop = 0; loop < nlistk; loop++) { temp_loop = BOP_index[k] + loop; nei_loop = neigh_index[temp_loop]; @@ -809,6 +812,7 @@ double PairBOP::SigmaBo(int itmp, int jtmp) if (nfound == 2) break; } } + if (n_ki < 0) error->one(FLERR,"BOP neighbor list is inconsistent"); nb_ik = nb_t; bt_sg[nb_ik].i = i; @@ -818,6 +822,7 @@ double PairBOP::SigmaBo(int itmp, int jtmp) memory_sg(nb_t); initial_sg(nb_t); if (pass_jk) { + temp_jk = n_jk = -1; for (loop = 0; loop < nlistj; loop++) { temp_loop = BOP_index[j] + loop; nei_loop = neigh_index[temp_loop]; @@ -828,6 +833,7 @@ double PairBOP::SigmaBo(int itmp, int jtmp) break; } } + if ((temp_jk < 0) || (n_jk < 0)) error->one(FLERR,"BOP neighbor list is inconsistent"); nb_jk = nb_t; bt_sg[nb_jk].i = j; bt_sg[nb_jk].j = k; @@ -1246,6 +1252,7 @@ double PairBOP::PiBo(int itmp, int jtmp) memory_pi(nb_t); initial_pi(nb_t); + n_ji = -1; for (loop = 0; loop < nlistj; loop++) { temp_loop = BOP_index[j] + loop; nei_loop = neigh_index[temp_loop]; @@ -1255,6 +1262,7 @@ double PairBOP::PiBo(int itmp, int jtmp) break; } } + if (n_ji < 0) error->one(FLERR,"BOP neighbor list is inconsistent"); dis_ij[0] = pl_ij.dis[0]; dis_ij[1] = pl_ij.dis[1]; diff --git a/src/OPENMP/fix_rigid_nh_omp.cpp b/src/OPENMP/fix_rigid_nh_omp.cpp index c9317b9800e..dbc026478e7 100644 --- a/src/OPENMP/fix_rigid_nh_omp.cpp +++ b/src/OPENMP/fix_rigid_nh_omp.cpp @@ -780,11 +780,11 @@ void FixRigidNHOMP::set_xv_thr() double theta_body,theta; double ione[3],exone[3],eyone[3],ezone[3],p[3][3]; - AtomVecEllipsoid::Bonus *ebonus; + AtomVecEllipsoid::Bonus *ebonus = nullptr; if (avec_ellipsoid) ebonus = avec_ellipsoid->bonus; - AtomVecLine::Bonus *lbonus; + AtomVecLine::Bonus *lbonus = nullptr; if (avec_line) lbonus = avec_line->bonus; - AtomVecTri::Bonus *tbonus; + AtomVecTri::Bonus *tbonus = nullptr; if (avec_tri) tbonus = avec_tri->bonus; double **omega_one = atom->omega; double **angmom_one = atom->angmom; @@ -970,9 +970,9 @@ void FixRigidNHOMP::set_v_thr() double *shape,*quatatom,*inertiaatom; double ione[3],exone[3],eyone[3],ezone[3]; - AtomVecEllipsoid::Bonus *ebonus; + AtomVecEllipsoid::Bonus *ebonus = nullptr; if (avec_ellipsoid) ebonus = avec_ellipsoid->bonus; - AtomVecTri::Bonus *tbonus; + AtomVecTri::Bonus *tbonus = nullptr; if (avec_tri) tbonus = avec_tri->bonus; double **omega_one = atom->omega; double **angmom_one = atom->angmom; diff --git a/src/OPENMP/fix_rigid_omp.cpp b/src/OPENMP/fix_rigid_omp.cpp index e1ffb32bead..d88c7794aad 100644 --- a/src/OPENMP/fix_rigid_omp.cpp +++ b/src/OPENMP/fix_rigid_omp.cpp @@ -699,9 +699,9 @@ void FixRigidOMP::set_v_thr() double *shape,*quatatom,*inertiaatom; double ione[3],exone[3],eyone[3],ezone[3]; - AtomVecEllipsoid::Bonus *ebonus; + AtomVecEllipsoid::Bonus *ebonus = nullptr; if (avec_ellipsoid) ebonus = avec_ellipsoid->bonus; - AtomVecTri::Bonus *tbonus; + AtomVecTri::Bonus *tbonus = nullptr; if (avec_tri) tbonus = avec_tri->bonus; double **omega_one = atom->omega; double **angmom_one = atom->angmom; diff --git a/src/OPENMP/fix_rigid_small_omp.cpp b/src/OPENMP/fix_rigid_small_omp.cpp index d4f3fee2fe3..4b8ca1e2e19 100644 --- a/src/OPENMP/fix_rigid_small_omp.cpp +++ b/src/OPENMP/fix_rigid_small_omp.cpp @@ -441,11 +441,11 @@ void FixRigidSmallOMP::set_xv_thr() double theta_body,theta; double *shape,*quatatom,*inertiaatom; - AtomVecEllipsoid::Bonus *ebonus; + AtomVecEllipsoid::Bonus *ebonus = nullptr; if (avec_ellipsoid) ebonus = avec_ellipsoid->bonus; - AtomVecLine::Bonus *lbonus; + AtomVecLine::Bonus *lbonus = nullptr; if (avec_line) lbonus = avec_line->bonus; - AtomVecTri::Bonus *tbonus; + AtomVecTri::Bonus *tbonus = nullptr; if (avec_tri) tbonus = avec_tri->bonus; double **omega = atom->omega; double **angmom = atom->angmom; @@ -627,9 +627,9 @@ void FixRigidSmallOMP::set_v_thr() double ione[3],exone[3],eyone[3],ezone[3]; double *shape,*quatatom,*inertiaatom; - AtomVecEllipsoid::Bonus *ebonus; + AtomVecEllipsoid::Bonus *ebonus = nullptr; if (avec_ellipsoid) ebonus = avec_ellipsoid->bonus; - AtomVecTri::Bonus *tbonus; + AtomVecTri::Bonus *tbonus = nullptr; if (avec_tri) tbonus = avec_tri->bonus; double **omega = atom->omega; double **angmom = atom->angmom; diff --git a/src/RIGID/fix_rigid.cpp b/src/RIGID/fix_rigid.cpp index 7a6d5e5f58a..1022557f35d 100644 --- a/src/RIGID/fix_rigid.cpp +++ b/src/RIGID/fix_rigid.cpp @@ -1576,9 +1576,9 @@ void FixRigid::set_v() if (extended) { double *shape,*quatatom,*inertiaatom; - AtomVecEllipsoid::Bonus *ebonus; + AtomVecEllipsoid::Bonus *ebonus = nullptr; if (avec_ellipsoid) ebonus = avec_ellipsoid->bonus; - AtomVecTri::Bonus *tbonus; + AtomVecTri::Bonus *tbonus = nullptr; if (avec_tri) tbonus = avec_tri->bonus; double **omega_one = atom->omega; double **angmom_one = atom->angmom; @@ -2212,7 +2212,7 @@ void FixRigid::setup_bodies_dynamic() // extended particles add their rotation to angmom of body if (extended) { - AtomVecLine::Bonus *lbonus; + AtomVecLine::Bonus *lbonus = nullptr; if (avec_line) lbonus = avec_line->bonus; double **omega_one = atom->omega; double **angmom_one = atom->angmom; diff --git a/src/region_block.cpp b/src/region_block.cpp index 56651bd8d44..1f313f16949 100644 --- a/src/region_block.cpp +++ b/src/region_block.cpp @@ -429,6 +429,10 @@ int RegBlock::surface_exterior(double *x, double cutoff) mindist = dist; } } + + // no contact possible if all faces are open + + if (mindist == BIG) return 0; } add_contact(0, x, xp, yp, zp); diff --git a/src/region_cone.cpp b/src/region_cone.cpp index 774f42d8a4e..ad0fe5a46dd 100644 --- a/src/region_cone.cpp +++ b/src/region_cone.cpp @@ -694,6 +694,7 @@ int RegCone::surface_exterior(double *x, double cutoff) if (distsq < distsqprev) crad = 0; } + if (distsq == BIG) return 0; add_contact(0, x, nearest[0], nearest[1], nearest[2]); contact[0].radius = crad; contact[0].iwall = 0; @@ -758,6 +759,7 @@ int RegCone::surface_exterior(double *x, double cutoff) if (distsq < distsqprev) crad = 0; } + if (distsq == BIG) return 0; add_contact(0, x, nearest[0], nearest[1], nearest[2]); contact[0].radius = crad; contact[0].iwall = 0; diff --git a/src/region_prism.cpp b/src/region_prism.cpp index 17287635cba..957f1361eba 100644 --- a/src/region_prism.cpp +++ b/src/region_prism.cpp @@ -496,7 +496,7 @@ int RegPrism::surface_exterior(double *x, double cutoff) // could be edge or corner pt of prism // do not add contact point if r >= cutoff - find_nearest(x, xp, yp, zp); + if (!find_nearest(x, xp, yp, zp)) return 0; add_contact(0, x, xp, yp, zp); contact[0].radius = 0; contact[0].iwall = 0; @@ -735,9 +735,10 @@ void RegPrism::variable_check() /* ---------------------------------------------------------------------- x is exterior to prism or on its surface return (xp,yp,zp) = nearest pt to x that is on surface of prism + return 0 if no nearest point exists since all faces are open, else 1 ------------------------------------------------------------------------- */ -void RegPrism::find_nearest(double *x, double &xp, double &yp, double &zp) +int RegPrism::find_nearest(double *x, double &xp, double &yp, double &zp) { int i, j, k, iface; double xproj[3], xline[3], nearest[3]; @@ -776,9 +777,14 @@ void RegPrism::find_nearest(double *x, double &xp, double &yp, double &zp) } } + // no nearest point if all faces are open + + if (distsq == BIG) return 0; + xp = nearest[0]; yp = nearest[1]; zp = nearest[2]; + return 1; } /* ---------------------------------------------------------------------- diff --git a/src/region_prism.h b/src/region_prism.h index 46233f0ba48..12243dc0c87 100644 --- a/src/region_prism.h +++ b/src/region_prism.h @@ -50,7 +50,7 @@ class RegPrism : public Region { double corners[8][3]; // 8 corner pts of prism int tri[12][3]; // 3 corner pts of 12 triangles (2 per face) - void find_nearest(double *, double &, double &, double &); + int find_nearest(double *, double &, double &, double &); int inside_tri(double *, double *, double *, double *, double *); double closest(double *, double *, double *, double); From 782d9d9a6182b1a04864c05caaa22edb25bd5d72 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 3 Jul 2026 08:46:57 -0400 Subject: [PATCH 033/116] Assorted defensive hardening from the Coverity scan triage Small guards, exhaustive-chain else branches, and overflow-safe rewrites across many styles: pppm/disp extract checks made exhaustive; utils::bounds_typelabel returns on null lmp; improper cvff validates the multiplicity range 0..6 at coeff time; colloid pair styles get a default error for unknown interaction forms; comb3 validates element-group indices from the potential file and initializes the torsion prefactors; procmap/universe initialize always-found scan results and reject duplicate entries in -reorder files; the hyper fixes' overflow guards are rewritten so they can actually trigger; fix ipi validates the socket host length, read() results, and the atom count from the wire; variable vector access reports a null compute array; fix qeq/comb manages its log file with SafeFilePtr (fixes the leak on a repeated file keyword); the debye/long dielectric pair styles get the same coincident-atom energy guard as the msm variant (base and OMP); main() catches exceptions escaping the error reporting path; AMOEBA force-field continuation lines cannot overflow their buffer; fix graphics/labels computes TGA sizes in 64-bit; BPM bond styles report a missing bond partner instead of using unset geometry; wall/body/polyhedron, compute adf, math_extra, MDI qm/qmmm, dump_custom thresholds, fix ave/time, fix vector, and compute global/atom get exhaustive-chain else branches or initializations; manifold thylakoid errors on unknown domain types; fix wall/piston initializes the logged piston position; SNAP Kokkos switching-function chains get else branches; vashishta/kk tallies per-atom virial only when requested; remap_kokkos gets the null checks and braces its CPU twin has; airebo's spline-interval scan is restructured to be provably exhaustive (bit-identical selection). Coverity CIDs 1662677, 1661358, 1661720, 1662457, 1661088, 1662921, 1662407, 1662648, 1663343, 1663133, 1661032, 1661009, 1662225, 1661483, 1662035, 1662414, 1662480, 1661336, 1661135, 1661909, 1661341, 1662551, 1662835, 1661339, 1661228, 1662890, 1662752, 1662292, 1662095, 1662502, 1662782, 1662810, 1662022, 1662228, 1661412, 1662603, 1661357, 1662352, 1661155, 1661085, 1662733, 1661392, 1661151, 1663070, 1663273, 1663122, 1661845, 1662399, 1662377, 1662678, 1662239, 1661682, 1661722, 1662918. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01YNvuaNpJNkbCKaAE8ngPQv --- src/AMOEBA/amoeba_file.cpp | 2 + src/BODY/fix_wall_body_polyhedron.cpp | 2 + src/BPM/bond_bpm_rotational.cpp | 7 +- src/BPM/bond_bpm_spring.cpp | 11 +++- src/COLLOID/pair_colloid.cpp | 3 + .../pair_lj_cut_coul_debye_dielectric.cpp | 2 +- .../pair_lj_cut_coul_long_dielectric.cpp | 2 +- src/EXTRA-COMPUTE/compute_adf.cpp | 3 + src/GRAPHICS/fix_graphics_labels.cpp | 6 ++ src/KOKKOS/pair_vashishta_kokkos.cpp | 5 +- src/KOKKOS/remap_kokkos.cpp | 10 +-- src/KOKKOS/sna_kokkos_impl.h | 12 ++-- src/KSPACE/pppm_disp.cpp | 2 +- src/MANIFOLD/manifold_thylakoid_shared.cpp | 7 +- src/MANYBODY/fix_qeq_comb.cpp | 3 +- src/MANYBODY/fix_qeq_comb.h | 3 +- src/MANYBODY/pair_airebo.cpp | 40 +++++------- src/MANYBODY/pair_comb3.cpp | 9 ++- src/MDI/fix_mdi_qm.cpp | 2 + src/MDI/fix_mdi_qmmm.cpp | 4 ++ src/MISC/fix_ipi.cpp | 8 ++- src/MOLECULE/improper_cvff.cpp | 2 + src/OPENMP/pair_colloid_omp.cpp | 3 + .../pair_lj_cut_coul_debye_dielectric_omp.cpp | 2 +- .../pair_lj_cut_coul_long_dielectric_omp.cpp | 2 +- src/REPLICA/fix_hyper_global.cpp | 2 +- src/REPLICA/fix_hyper_local.cpp | 2 +- src/SHOCK/fix_wall_piston.cpp | 2 +- src/compute_global_atom.cpp | 8 +-- src/dump_custom.cpp | 3 + src/fix_ave_time.cpp | 2 +- src/fix_vector.cpp | 2 +- src/main.cpp | 65 +++++++++++-------- src/math_extra.cpp | 4 ++ src/procmap.cpp | 4 +- src/universe.cpp | 7 ++ src/utils.cpp | 6 +- src/variable.cpp | 4 +- 38 files changed, 170 insertions(+), 93 deletions(-) diff --git a/src/AMOEBA/amoeba_file.cpp b/src/AMOEBA/amoeba_file.cpp index b059e5b395b..63489866074 100644 --- a/src/AMOEBA/amoeba_file.cpp +++ b/src/AMOEBA/amoeba_file.cpp @@ -199,6 +199,8 @@ void PairAmoeba::read_prmfile(char *filename) // append to line if next line starts with a number if (utils::is_double(utils::strfind(trimmed, R"(^\S+)"))) { + if (strlen(line) + trimmed.size() + 2 > MAXLINE) + error->one(FLERR, "Force field file {} line {} is too long", filename, nline); strcat(line, " "); strcat(line, trimmed.c_str()); has_next = false; diff --git a/src/BODY/fix_wall_body_polyhedron.cpp b/src/BODY/fix_wall_body_polyhedron.cpp index 987863141ff..cd5e6338c78 100644 --- a/src/BODY/fix_wall_body_polyhedron.cpp +++ b/src/BODY/fix_wall_body_polyhedron.cpp @@ -357,6 +357,8 @@ void FixWallBodyPolyhedron::post_force(int /*vflag*/) dy = -del2; wall_pos = whi; } + } else { + error->one(FLERR, "Unknown wall style in fix wall/body/polyhedron"); } rsq = dx*dx + dy*dy + dz*dz; diff --git a/src/BPM/bond_bpm_rotational.cpp b/src/BPM/bond_bpm_rotational.cpp index db18b050b71..3179d338f6d 100644 --- a/src/BPM/bond_bpm_rotational.cpp +++ b/src/BPM/bond_bpm_rotational.cpp @@ -1172,9 +1172,11 @@ double BondBPMRotational::single(int type, double rsq, int i, int j, double &ffo } double ri_norm = 0.0; - double ri[3], rf[3], bondstore[7]; + double ri[3] = {0.0, 0.0, 0.0}, rf[3], bondstore[7]; + int found = 0; for (int n = 0; n < atom->num_bond[i]; n++) { if (atom->bond_atom[i][n] == atom->tag[j]) { + found = 1; ri_norm = fix_bond_history->get_atom_value(i, n, 0); ri[0] = fix_bond_history->get_atom_value(i, n, 1) * ri_norm; ri[1] = fix_bond_history->get_atom_value(i, n, 2) * ri_norm; @@ -1186,6 +1188,9 @@ double BondBPMRotational::single(int type, double rsq, int i, int j, double &ffo } } } + if (!found) + error->one(FLERR, "Bond between atoms {} and {} not found in bond history", + atom->tag[i], atom->tag[j]); double **x = atom->x; MathExtra::sub3(x[j], x[i], rf); diff --git a/src/BPM/bond_bpm_spring.cpp b/src/BPM/bond_bpm_spring.cpp index 101150c10cd..1fed1857fe2 100644 --- a/src/BPM/bond_bpm_spring.cpp +++ b/src/BPM/bond_bpm_spring.cpp @@ -535,10 +535,17 @@ double BondBPMSpring::single(int type, double rsq, int i, int j, double &fforce) { if (type <= 0) return 0.0; - double r0; + double r0 = 0.0; + int found = 0; for (int n = 0; n < atom->num_bond[i]; n++) { - if (atom->bond_atom[i][n] == atom->tag[j]) r0 = fix_bond_history->get_atom_value(i, n, 0); + if (atom->bond_atom[i][n] == atom->tag[j]) { + r0 = fix_bond_history->get_atom_value(i, n, 0); + found = 1; + } } + if (!found) + error->one(FLERR, "Bond between atoms {} and {} not found in bond history", + atom->tag[i], atom->tag[j]); double r = sqrt(rsq); double rinv = 1.0 / r; diff --git a/src/COLLOID/pair_colloid.cpp b/src/COLLOID/pair_colloid.cpp index 343694b0390..829b3aa7256 100644 --- a/src/COLLOID/pair_colloid.cpp +++ b/src/COLLOID/pair_colloid.cpp @@ -189,6 +189,9 @@ void PairColloid::compute(int eflag, int vflag) if (r <= K[1]) error->one(FLERR,"Overlapping large/large in pair colloid"); break; + + default: + error->one(FLERR,"Unknown colloid interaction form"); } if (eflag) evdwl *= factor_lj; diff --git a/src/DIELECTRIC/pair_lj_cut_coul_debye_dielectric.cpp b/src/DIELECTRIC/pair_lj_cut_coul_debye_dielectric.cpp index d4366e9ab7a..2a5162c1c99 100644 --- a/src/DIELECTRIC/pair_lj_cut_coul_debye_dielectric.cpp +++ b/src/DIELECTRIC/pair_lj_cut_coul_debye_dielectric.cpp @@ -160,7 +160,7 @@ void PairLJCutCoulDebyeDielectric::compute(int eflag, int vflag) epot[i] += epot_i; if (eflag) { - if (rsq < cut_coulsq[itype][jtype]) { + if (rsq < cut_coulsq[itype][jtype] && rsq > EPSILON) { ecoul = factor_coul * qqrd2e * qtmp * q[j] * 0.5 * (etmp + eps[j]) * rinv * screening; } else ecoul = 0.0; diff --git a/src/DIELECTRIC/pair_lj_cut_coul_long_dielectric.cpp b/src/DIELECTRIC/pair_lj_cut_coul_long_dielectric.cpp index 42ae82844c0..f49f59aeb00 100644 --- a/src/DIELECTRIC/pair_lj_cut_coul_long_dielectric.cpp +++ b/src/DIELECTRIC/pair_lj_cut_coul_long_dielectric.cpp @@ -196,7 +196,7 @@ void PairLJCutCoulLongDielectric::compute(int eflag, int vflag) epot[i] += epot_i; if (eflag) { - if (rsq < cut_coulsq) { + if (rsq < cut_coulsq && rsq > EPSILON) { if (!ncoultablebits || rsq <= tabinnersq) ecoul = prefactor * 0.5 * (etmp + eps[j]) * erfc; else { diff --git a/src/EXTRA-COMPUTE/compute_adf.cpp b/src/EXTRA-COMPUTE/compute_adf.cpp index 1fc8c305f2c..9575838e42a 100644 --- a/src/EXTRA-COMPUTE/compute_adf.cpp +++ b/src/EXTRA-COMPUTE/compute_adf.cpp @@ -311,6 +311,9 @@ void ComputeADF::init() deltax = 2.0 / nbin; deltaxinv = 1.0/deltax; x0 = -1.0; + + } else { + error->all(FLERR, "Unknown ordinate style in compute adf"); } for (int i = 0; i < nbin; i++) diff --git a/src/GRAPHICS/fix_graphics_labels.cpp b/src/GRAPHICS/fix_graphics_labels.cpp index 9088756d57b..af78578cfb3 100644 --- a/src/GRAPHICS/fix_graphics_labels.cpp +++ b/src/GRAPHICS/fix_graphics_labels.cpp @@ -242,6 +242,12 @@ unsigned char *read_image(FILE *fp, int &width, int &height, const std::string & width = (int) header.width[0] + ((int) header.width[1]) * 256; height = (int) header.height[0] + ((int) header.height[1]) * 256; + // reject huge images where the buffer size computation would overflow an int + if ((bigint) 3 * width * height > (bigint) MAXSMALLINT) { + info = "TGA image dimensions too large"; + return nullptr; + } + bool right2left = (header.imagedescriptor & 0x10) ? true : false; bool fromtop = (header.imagedescriptor & 0x20) ? true : false; diff --git a/src/KOKKOS/pair_vashishta_kokkos.cpp b/src/KOKKOS/pair_vashishta_kokkos.cpp index 4a64ac0287e..47d63868418 100644 --- a/src/KOKKOS/pair_vashishta_kokkos.cpp +++ b/src/KOKKOS/pair_vashishta_kokkos.cpp @@ -916,7 +916,10 @@ void PairVashishtaKokkos::ev_tally3_atom(EV_FLOAT & /*ev*/, const in { KK_FLOAT epairthird,v[6]; - const int VFLAG = vflag_either; + // only tally per-atom virial data here: the caller computes valid fj/fk data + // only when vflag_atom is set, so vflag_either would be too broad + + const int VFLAG = vflag_atom; if (eflag_atom) { epairthird = THIRD * (evdwl + ecoul); diff --git a/src/KOKKOS/remap_kokkos.cpp b/src/KOKKOS/remap_kokkos.cpp index 1b75e8d2fd0..346e40123ab 100644 --- a/src/KOKKOS/remap_kokkos.cpp +++ b/src/KOKKOS/remap_kokkos.cpp @@ -395,13 +395,15 @@ struct remap_plan_3d_kokkos* RemapKokkos::remap_3d_creat plan->packplan = (struct pack_plan_3d *) malloc(nsend*sizeof(struct pack_plan_3d)); - if (plan->usenonblocking) + if (plan->usenonblocking) { plan->isend_reqs = (MPI_Request *) malloc(nsend*sizeof(MPI_Request)); - plan->send_bufloc = (int *) malloc(nsend*sizeof(int)); - if (plan->send_bufloc == nullptr) return nullptr; + } + plan->send_bufloc = (int *) malloc(nsend*sizeof(int)); if (plan->send_offset == nullptr || plan->send_size == nullptr || - plan->send_proc == nullptr || plan->packplan == nullptr) return nullptr; + plan->send_proc == nullptr || plan->packplan == nullptr || + (plan->usenonblocking && (plan->isend_reqs == nullptr)) || + (plan->send_bufloc == nullptr)) return nullptr; } if (nrecv) { diff --git a/src/KOKKOS/sna_kokkos_impl.h b/src/KOKKOS/sna_kokkos_impl.h index ef85c4f3650..b63871950c3 100644 --- a/src/KOKKOS/sna_kokkos_impl.h +++ b/src/KOKKOS/sna_kokkos_impl.h @@ -2229,14 +2229,14 @@ real_type SNAKokkos::compute_s constexpr real_type zero = static_cast(0.0); constexpr real_type onehalf = static_cast(0.5); if (switch_flag == 0) sfac_outer = one; - if (switch_flag == 1) { + else if (switch_flag == 1) { if (r <= rmin0) sfac_outer = one; else if (r > rcut) return zero; else { real_type rcutfac = static_cast(MY_PI) / (rcut - rmin0); sfac_outer = onehalf * (cos((r - rmin0) * rcutfac) + one); } - } + } else sfac_outer = zero; // switch_flag is always 0 or 1 if (switch_inner_flag == 0) return sfac_outer; if (switch_inner_flag == 1) { @@ -2263,14 +2263,14 @@ real_type SNAKokkos::compute_d constexpr real_type zero = static_cast(0.0); constexpr real_type onehalf = static_cast(0.5); if (switch_flag == 0) dsfac_outer = zero; - if (switch_flag == 1) { + else if (switch_flag == 1) { if (r <= rmin0) dsfac_outer = zero; else if (r > rcut) return zero; else { real_type rcutfac = static_cast(MY_PI) / (rcut - rmin0); dsfac_outer = -onehalf * sin((r - rmin0) * rcutfac) * rcutfac; } - } + } else dsfac_outer = zero; // switch_flag is always 0 or 1 if (switch_inner_flag == 0) return dsfac_outer; if (switch_inner_flag == 1) { @@ -2281,14 +2281,14 @@ real_type SNAKokkos::compute_d // calculate sfac_outer if (switch_flag == 0) sfac_outer = one; - if (switch_flag == 1) { + else if (switch_flag == 1) { if (r <= rmin0) sfac_outer = one; else if (r > rcut) sfac_outer = zero; else { real_type rcutfac = static_cast(MY_PI) / (rcut - rmin0); sfac_outer = onehalf * (cos((r - rmin0) * rcutfac) + one); } - } + } else sfac_outer = zero; // switch_flag is always 0 or 1 // calculate sfac_inner diff --git a/src/KSPACE/pppm_disp.cpp b/src/KSPACE/pppm_disp.cpp index 9f8278983aa..13e84a0ff94 100644 --- a/src/KSPACE/pppm_disp.cpp +++ b/src/KSPACE/pppm_disp.cpp @@ -305,7 +305,7 @@ void PPPMDisp::init() int *ptr = pair ? (int *) pair->extract("ewald_order",tmp) : nullptr; double *p_cutoff = pair ? (double *) pair->extract("cut_coul",tmp) : nullptr; double *p_cutoff_lj = pair ? (double *) pair->extract("cut_vdwl",tmp) : nullptr; - if (!(ptr||p_cutoff||p_cutoff_lj)) + if (!ptr || !p_cutoff || !p_cutoff_lj) error->all(FLERR,"KSpace style is incompatible with Pair style"); cutoff = *p_cutoff; cutoff_lj = *p_cutoff_lj; diff --git a/src/MANIFOLD/manifold_thylakoid_shared.cpp b/src/MANIFOLD/manifold_thylakoid_shared.cpp index 6d2f8004bd6..fd1331a8f07 100644 --- a/src/MANIFOLD/manifold_thylakoid_shared.cpp +++ b/src/MANIFOLD/manifold_thylakoid_shared.cpp @@ -21,7 +21,7 @@ using namespace user_manifold; thyla_part::thyla_part( int type, double *args, double xlo, double ylo, double zlo, double xhi, double yhi, double zhi ) - : type(type), xlo(xlo), xhi(xhi), + : type(type), err_flag(0), xlo(xlo), xhi(xhi), ylo(ylo), yhi(yhi), zlo(zlo), zhi(zhi) { switch(type) { @@ -83,7 +83,12 @@ thyla_part::thyla_part( int type, double *args, double xlo, double ylo, double z params[6] = args[6]; break; default: + // only the types above are used by the internal callers; + // flag the error and do not read the never-assigned parameters err_flag = -1; + for (int i = 0; i < 7; ++i) params[i] = 0.0; + x0 = y0 = z0 = 0.0; + return; } x0 = (type == THYLA_TYPE_SPHERE) ? params[1] : params[3]; y0 = (type == THYLA_TYPE_SPHERE) ? params[2] : params[4]; diff --git a/src/MANYBODY/fix_qeq_comb.cpp b/src/MANYBODY/fix_qeq_comb.cpp index 308a6e17db3..d68b803e31b 100644 --- a/src/MANYBODY/fix_qeq_comb.cpp +++ b/src/MANYBODY/fix_qeq_comb.cpp @@ -42,7 +42,7 @@ static constexpr double QSUMSMALL = 0.00001; /* ---------------------------------------------------------------------- */ FixQEQComb::FixQEQComb(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg), - fp(nullptr), comb(nullptr), comb3(nullptr), qf(nullptr), q1(nullptr), q2(nullptr) + comb(nullptr), comb3(nullptr), qf(nullptr), q1(nullptr), q2(nullptr) { if (narg < 5) error->all(FLERR,"Illegal fix qeq/comb command"); @@ -95,7 +95,6 @@ FixQEQComb::FixQEQComb(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg), FixQEQComb::~FixQEQComb() { - if (me == 0 && fp) fclose(fp); memory->destroy(qf); memory->destroy(q1); memory->destroy(q2); diff --git a/src/MANYBODY/fix_qeq_comb.h b/src/MANYBODY/fix_qeq_comb.h index ed17587988a..374d4870003 100644 --- a/src/MANYBODY/fix_qeq_comb.h +++ b/src/MANYBODY/fix_qeq_comb.h @@ -21,6 +21,7 @@ FixStyle(qeq/comb,FixQEQComb); #define LMP_FIX_QEQ_COMB_H #include "fix.h" +#include "safe_pointers.h" namespace LAMMPS_NS { @@ -44,7 +45,7 @@ class FixQEQComb : public Fix { double precision; int ilevel_respa; bigint ngroup; - FILE *fp; + SafeFilePtr fp; class PairComb *comb; class PairComb3 *comb3; diff --git a/src/MANYBODY/pair_airebo.cpp b/src/MANYBODY/pair_airebo.cpp index deaa846d286..7a7770803bb 100644 --- a/src/MANYBODY/pair_airebo.cpp +++ b/src/MANYBODY/pair_airebo.cpp @@ -3133,39 +3133,31 @@ double PairAIREBO::gSpline(double costh, double Nij, int typei, if (costh < gCdom[0]) costh = gCdom[0]; if (costh > gCdom[4]) costh = gCdom[4]; if (Nij >= NCmax) { - for (i = 0; i < 4; i++) { - if (costh >= gCdom[i] && costh <= gCdom[i+1]) { - for (j = 0; j < 6; j++) coeffs[j] = gC2[i][j]; - } - } + // the clamped costh always falls into one of the intervals; the scan + // stops at the matching interval and defaults to the last one otherwise + for (i = 0; i < 3; i++) + if (costh < gCdom[i+1]) break; + for (j = 0; j < 6; j++) coeffs[j] = gC2[i][j]; g2 = Sp5th(costh,coeffs,&dg2); g = g2; *dgdc = dg2; *dgdN = 0.0; } if (Nij <= NCmin) { - for (i = 0; i < 4; i++) { - if (costh >= gCdom[i] && costh <= gCdom[i+1]) { - for (j = 0; j < 6; j++) coeffs[j] = gC1[i][j]; - } - } + for (i = 0; i < 3; i++) + if (costh < gCdom[i+1]) break; + for (j = 0; j < 6; j++) coeffs[j] = gC1[i][j]; g1 = Sp5th(costh,coeffs,&dg1); g = g1; *dgdc = dg1; *dgdN = 0.0; } if (Nij > NCmin && Nij < NCmax) { - for (i = 0; i < 4; i++) { - if (costh >= gCdom[i] && costh <= gCdom[i+1]) { - for (j = 0; j < 6; j++) coeffs[j] = gC1[i][j]; - } - } + for (i = 0; i < 3; i++) + if (costh < gCdom[i+1]) break; + for (j = 0; j < 6; j++) coeffs[j] = gC1[i][j]; g1 = Sp5th(costh,coeffs,&dg1); - for (i = 0; i < 4; i++) { - if (costh >= gCdom[i] && costh <= gCdom[i+1]) { - for (j = 0; j < 6; j++) coeffs[j] = gC2[i][j]; - } - } + for (j = 0; j < 6; j++) coeffs[j] = gC2[i][j]; g2 = Sp5th(costh,coeffs,&dg2); cut = Sp(Nij,NCmin,NCmax,dS); g = g2+cut*(g1-g2); @@ -3179,11 +3171,9 @@ double PairAIREBO::gSpline(double costh, double Nij, int typei, if (typei == 1) { if (costh < gHdom[0]) costh = gHdom[0]; if (costh > gHdom[3]) costh = gHdom[3]; - for (i = 0; i < 3; i++) { - if (costh >= gHdom[i] && costh <= gHdom[i+1]) { - for (j = 0; j < 6; j++) coeffs[j] = gH[i][j]; - } - } + for (i = 0; i < 2; i++) + if (costh < gHdom[i+1]) break; + for (j = 0; j < 6; j++) coeffs[j] = gH[i][j]; g = Sp5th(costh,coeffs,&dg1); *dgdN = 0.0; *dgdc = dg1; diff --git a/src/MANYBODY/pair_comb3.cpp b/src/MANYBODY/pair_comb3.cpp index ee72f231dcb..4023cb5456f 100644 --- a/src/MANYBODY/pair_comb3.cpp +++ b/src/MANYBODY/pair_comb3.cpp @@ -610,6 +610,13 @@ void PairComb3::read_file(char *file) ) error->one(FLERR,"Illegal COMB3 parameter"); + // element group indices from the potential file must be 1, 2, or 3 + + if ((params[nparams].ielementgp < 1) || (params[nparams].ielementgp > 3) || + (params[nparams].jelementgp < 1) || (params[nparams].jelementgp > 3) || + (params[nparams].kelementgp < 1) || (params[nparams].kelementgp > 3)) + error->one(FLERR,"Invalid element group index in COMB3 potential file"); + nparams++; } } @@ -1603,7 +1610,7 @@ void PairComb3::force_zeta(Param *parami, Param *paramj, double rsq, double r,att_eng,att_force,bij; // att_eng is -cbj double boij, dbij1, dbij2, dbij3, dbij4, dbij5; double boji, dbji1, dbji2, dbji3, dbji4, dbji5; - double pradx, prady; + double pradx = 0.0, prady = 0.0; r = sqrt(rsq); if (r > parami->bigr + parami->bigd) return; diff --git a/src/MDI/fix_mdi_qm.cpp b/src/MDI/fix_mdi_qm.cpp index f5fc2bc4443..d61787d997b 100644 --- a/src/MDI/fix_mdi_qm.cpp +++ b/src/MDI/fix_mdi_qm.cpp @@ -598,6 +598,8 @@ void FixMDIQM::post_force(int vflag) volume = domain->xprd * domain->yprd; else if (domain->dimension == 3) volume = domain->xprd * domain->yprd * domain->zprd; + else + error->all(FLERR, "Unsupported dimension in fix mdi/qm"); for (int i = 0; i < 6; i++) virial[i] = qm_virial_symmetric[i] * volume / nprocs; } } diff --git a/src/MDI/fix_mdi_qmmm.cpp b/src/MDI/fix_mdi_qmmm.cpp index a4fdadde152..4e662ffc0c6 100644 --- a/src/MDI/fix_mdi_qmmm.cpp +++ b/src/MDI/fix_mdi_qmmm.cpp @@ -832,6 +832,8 @@ void FixMDIQMMM::pre_force(int vflag) volume = domain->xprd * domain->yprd; else if (domain->dimension == 3) volume = domain->xprd * domain->yprd * domain->zprd; + else + error->all(FLERR, "Unsupported dimension in fix mdi/qmmm"); for (int i = 0; i < 6; i++) virial[i] = qm_virial_symmetric[i] * volume / nprocs; } @@ -1007,6 +1009,8 @@ void FixMDIQMMM::post_force_direct(int vflag) volume = domain->xprd * domain->yprd; else if (domain->dimension == 3) volume = domain->xprd * domain->yprd * domain->zprd; + else + error->all(FLERR, "Unsupported dimension in fix mdi/qmmm"); for (int i = 0; i < 6; i++) virial[i] = qm_virial_symmetric[i] * volume / nprocs; } } diff --git a/src/MISC/fix_ipi.cpp b/src/MISC/fix_ipi.cpp index eab729e5675..dc5f39d2bea 100644 --- a/src/MISC/fix_ipi.cpp +++ b/src/MISC/fix_ipi.cpp @@ -117,6 +117,8 @@ static void open_socket(int &sockfd, int inet, int port, char *host, Error *erro // fills up details of the socket address memset(&serv_addr, 0, sizeof(serv_addr)); serv_addr.sun_family = AF_UNIX; + if (strlen(host) + 10 > sizeof(serv_addr.sun_path)) + error->one(FLERR, "Fix ipi host name is too long for a UNIX socket name"); strcpy(serv_addr.sun_path, "/tmp/ipi_"); strcpy(serv_addr.sun_path + 9, host); @@ -163,10 +165,10 @@ static void readbuffer(int sockfd, char *data, int len, Error *error) while (nr > 0 && n < len) { nr = read(sockfd, &data[n], len - n); - n += nr; + if (nr > 0) n += nr; } - if (n == 0) error->one(FLERR, "Error reading from socket: broken connection"); + if ((nr < 0) || (n <= 0)) error->one(FLERR, "Error reading from socket: broken connection"); } /* ---------------------------------------------------------------------- */ @@ -311,6 +313,8 @@ void FixIPI::initial_integrate(int /*vflag*/) readbuffer(ipisock, (char*) cellh, 9*8, error); readbuffer(ipisock, (char*) cellih, 9*8, error); readbuffer(ipisock, (char*) &nat, 4, error); + if ((nat <= 0) || ((bigint) nat > 10*atom->natoms)) + error->one(FLERR, "Fix ipi received an invalid number of atoms from the server"); // allocate buffer, but only do this once. if (bsize==0) { diff --git a/src/MOLECULE/improper_cvff.cpp b/src/MOLECULE/improper_cvff.cpp index 42b90143fef..1073e89b4f5 100644 --- a/src/MOLECULE/improper_cvff.cpp +++ b/src/MOLECULE/improper_cvff.cpp @@ -288,6 +288,8 @@ void ImproperCvff::coeff(int narg, char **arg) double k_one = utils::numeric(FLERR, arg[1], false, lmp); int sign_one = utils::inumeric(FLERR, arg[2], false, lmp); int multiplicity_one = utils::inumeric(FLERR, arg[3], false, lmp); + if ((multiplicity_one < 0) || (multiplicity_one > 6)) + error->all(FLERR, "Improper cvff multiplicity {} must be between 0 and 6", multiplicity_one); int count = 0; for (int i = ilo; i <= ihi; i++) { diff --git a/src/OPENMP/pair_colloid_omp.cpp b/src/OPENMP/pair_colloid_omp.cpp index b6ec22dd515..568ba4fbf86 100644 --- a/src/OPENMP/pair_colloid_omp.cpp +++ b/src/OPENMP/pair_colloid_omp.cpp @@ -198,6 +198,9 @@ void PairColloidOMP::eval(int iifrom, int iito, ThrData * const thr) (2.0*K[0]*(K[7]+K[8])-log(K[8]/K[7])) - offset[itype][jtype]; if (r <= K[1]) error->one(FLERR,"Overlapping large/large in pair colloid"); break; + + default: + error->one(FLERR,"Unknown colloid interaction form"); } if (EFLAG) evdwl *= factor_lj; diff --git a/src/OPENMP/pair_lj_cut_coul_debye_dielectric_omp.cpp b/src/OPENMP/pair_lj_cut_coul_debye_dielectric_omp.cpp index eaf3611494a..dd0200b74e0 100644 --- a/src/OPENMP/pair_lj_cut_coul_debye_dielectric_omp.cpp +++ b/src/OPENMP/pair_lj_cut_coul_debye_dielectric_omp.cpp @@ -188,7 +188,7 @@ void PairLJCutCoulDebyeDielectricOMP::eval(int iifrom, int iito, ThrData *const epot[i] += epot_i; if (EFLAG) { - if (rsq < cut_coulsq[itype][jtype]) { + if (rsq < cut_coulsq[itype][jtype] && rsq > EPSILON) { ecoul = factor_coul * qqrd2e * qtmp * q[j] * 0.5 * (etmp + eps[j]) * rinv * screening; } else ecoul = 0.0; diff --git a/src/OPENMP/pair_lj_cut_coul_long_dielectric_omp.cpp b/src/OPENMP/pair_lj_cut_coul_long_dielectric_omp.cpp index 894cafb4348..13c275f4b12 100644 --- a/src/OPENMP/pair_lj_cut_coul_long_dielectric_omp.cpp +++ b/src/OPENMP/pair_lj_cut_coul_long_dielectric_omp.cpp @@ -220,7 +220,7 @@ void PairLJCutCoulLongDielectricOMP::eval(int iifrom, int iito, ThrData *const t epot[i] += epot_i; if (EFLAG) { - if (rsq < cut_coulsq) { + if (rsq < cut_coulsq && rsq > EPSILON) { if (!ncoultablebits || rsq <= tabinnersq) ecoul = prefactor * 0.5 * (etmp + eps[j]) * erfc; else { diff --git a/src/REPLICA/fix_hyper_global.cpp b/src/REPLICA/fix_hyper_global.cpp index 35357fc94c7..037c1ea8299 100644 --- a/src/REPLICA/fix_hyper_global.cpp +++ b/src/REPLICA/fix_hyper_global.cpp @@ -441,7 +441,7 @@ void FixHyperGlobal::build_bond_list(int natom) void FixHyperGlobal::grow_bond() { - if (maxbond + DELTABOND > MAXSMALLINT) + if (maxbond > MAXSMALLINT - DELTABOND) error->one(FLERR,"Fix hyper/global bond count is too big"); maxbond += DELTABOND; blist = (OneBond *) diff --git a/src/REPLICA/fix_hyper_local.cpp b/src/REPLICA/fix_hyper_local.cpp index f5b5a70cf2c..0bd875d6f24 100644 --- a/src/REPLICA/fix_hyper_local.cpp +++ b/src/REPLICA/fix_hyper_local.cpp @@ -1442,7 +1442,7 @@ void FixHyperLocal::unpack_reverse_comm(int n, int *list, double *buf) void FixHyperLocal::grow_bond() { - if (maxbond + DELTABOND > MAXSMALLINT) + if (maxbond > MAXSMALLINT - DELTABOND) error->one(FLERR,"Fix hyper/local bond count is too big"); maxbond += DELTABOND; blist = (OneBond *) diff --git a/src/SHOCK/fix_wall_piston.cpp b/src/SHOCK/fix_wall_piston.cpp index c3017815077..239b0950814 100644 --- a/src/SHOCK/fix_wall_piston.cpp +++ b/src/SHOCK/fix_wall_piston.cpp @@ -183,7 +183,7 @@ void FixWallPiston::initial_integrate(int /*vflag*/) void FixWallPiston::post_integrate() { - double zlo; + double zlo = z0; double **x = atom->x; double **v = atom->v; diff --git a/src/compute_global_atom.cpp b/src/compute_global_atom.cpp index 6301e217708..85eb880a6e1 100644 --- a/src/compute_global_atom.cpp +++ b/src/compute_global_atom.cpp @@ -337,8 +337,8 @@ void ComputeGlobalAtom::compute_peratom() // output = vector if (val.argindex == 0) { - int vmax; - double *source; + int vmax = 0; + double *source = nullptr; if (val.which == ArgInfo::COMPUTE) { @@ -392,8 +392,8 @@ void ComputeGlobalAtom::compute_peratom() // output = array } else { - int vmax; - double *source; + int vmax = 0; + double *source = nullptr; int col = val.argindex - 1; if (val.which == ArgInfo::COMPUTE) { diff --git a/src/dump_custom.cpp b/src/dump_custom.cpp index d9ff3e2e610..09aa231ef83 100644 --- a/src/dump_custom.cpp +++ b/src/dump_custom.cpp @@ -1238,6 +1238,9 @@ int DumpCustom::count() double **darray = atom->darray[iwhich]; ptr = &darray[0][argindex[i]-1]; nstride = atom->dcols[iwhich]; + + } else { + error->all(FLERR, "Unknown dump_modify threshold attribute"); } // unselect atoms that don't meet threshold criterion diff --git a/src/fix_ave_time.cpp b/src/fix_ave_time.cpp index 33ff09c968f..ed8c25ace5e 100644 --- a/src/fix_ave_time.cpp +++ b/src/fix_ave_time.cpp @@ -914,7 +914,7 @@ void FixAveTime::invoke_vector(bigint ntimestep) int FixAveTime::column_length(int dynamic) { - int length,lengthone; + int length,lengthone = 0; // determine nrows for static values diff --git a/src/fix_vector.cpp b/src/fix_vector.cpp index 17c7b3983a7..27a50400fba 100644 --- a/src/fix_vector.cpp +++ b/src/fix_vector.cpp @@ -80,7 +80,7 @@ FixVector::FixVector(LAMMPS *lmp, int narg, char **arg) : // this fix produces either a global vector or array // intensive/extensive flags set by compute,fix,variable that produces value - int value, finalvalue; + int value = 0, finalvalue; bool first = true; for (auto &val : values) { if (val.which == ArgInfo::COMPUTE) { diff --git a/src/main.cpp b/src/main.cpp index 2915b6cf386..2c99fa006f5 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -61,36 +61,45 @@ int main(int argc, char **argv) if (MDI_MPI_get_world_comm(&lammps_comm)) MPI_Abort(MPI_COMM_WORLD, 1); #endif + // the outer try block catches exceptions thrown while reporting an error + // (e.g. when composing the error message text fails) so they cannot escape main() + try { - auto *lammps = new LAMMPS(argc, argv, lammps_comm); - lammps->input->file(); - delete lammps; - } catch (LAMMPSAbortException &ae) { - finalize(); - MPI_Abort(ae.get_universe(), 1); - } catch (LAMMPSException &) { - finalize(); - MPI_Barrier(lammps_comm); - MPI_Finalize(); - exit(1); - } catch (fmt::format_error &fe) { - fprintf(stderr, "\nfmt::format_error: %s%s\n", fe.what(), utils::errorurl(12).c_str()); - finalize(); - MPI_Abort(MPI_COMM_WORLD, 1); - exit(1); - } catch (json::exception &je) { - fprintf(stderr, "\nJSON library error %d: %s\n", je.id, je.what()); - finalize(); - MPI_Abort(MPI_COMM_WORLD, 1); - exit(1); - } catch (std::bad_alloc &ae) { - fprintf(stderr, "C++ memory allocation failed: %s\n", ae.what()); - finalize(); - MPI_Abort(MPI_COMM_WORLD, 1); - exit(1); + try { + auto *lammps = new LAMMPS(argc, argv, lammps_comm); + lammps->input->file(); + delete lammps; + } catch (LAMMPSAbortException &ae) { + finalize(); + MPI_Abort(ae.get_universe(), 1); + } catch (LAMMPSException &) { + finalize(); + MPI_Barrier(lammps_comm); + MPI_Finalize(); + exit(1); + } catch (fmt::format_error &fe) { + fprintf(stderr, "\nfmt::format_error: %s%s\n", fe.what(), utils::errorurl(12).c_str()); + finalize(); + MPI_Abort(MPI_COMM_WORLD, 1); + exit(1); + } catch (json::exception &je) { + fprintf(stderr, "\nJSON library error %d: %s\n", je.id, je.what()); + finalize(); + MPI_Abort(MPI_COMM_WORLD, 1); + exit(1); + } catch (std::bad_alloc &ae) { + fprintf(stderr, "C++ memory allocation failed: %s\n", ae.what()); + finalize(); + MPI_Abort(MPI_COMM_WORLD, 1); + exit(1); + } catch (std::exception &e) { + fprintf(stderr, "Exception: %s\n", e.what()); + finalize(); + MPI_Abort(MPI_COMM_WORLD, 1); + exit(1); + } } catch (std::exception &e) { - fprintf(stderr, "Exception: %s\n", e.what()); - finalize(); + fprintf(stderr, "LAMMPS encountered another error while reporting an error: %s\n", e.what()); MPI_Abort(MPI_COMM_WORLD, 1); exit(1); } diff --git a/src/math_extra.cpp b/src/math_extra.cpp index 4e5c5363ed4..a8bebf5d88b 100644 --- a/src/math_extra.cpp +++ b/src/math_extra.cpp @@ -228,6 +228,10 @@ void no_squish_rotate(int k, double *p, double *q, double *inertia, kq[1] = q[2]; kp[1] = p[2]; kq[2] = -q[1]; kp[2] = -p[1]; kq[3] = q[0]; kp[3] = p[0]; + } else { + // all callers use k = 1, 2, or 3; zero the outputs so they are always defined + kq[0] = kq[1] = kq[2] = kq[3] = 0.0; + kp[0] = kp[1] = kp[2] = kp[3] = 0.0; } // obtain phi, cosines and sines diff --git a/src/procmap.cpp b/src/procmap.cpp index bd6da42a37e..068e39e6441 100644 --- a/src/procmap.cpp +++ b/src/procmap.cpp @@ -668,8 +668,10 @@ void ProcMap::output(char *file, int *procgrid, int ***grid2proc) } // find me in the grid + // grid2proc is a bijection, so the scan always finds a match; + // initialize anyway so the values are always defined - int ime,jme,kme; + int ime = 0, jme = 0, kme = 0; for (int i = 0; i < procgrid[0]; i++) for (int j = 0; j < procgrid[1]; j++) for (int k = 0; k < procgrid[2]; k++) diff --git a/src/universe.cpp b/src/universe.cpp index 1db72f9bb5f..951410e7d15 100644 --- a/src/universe.cpp +++ b/src/universe.cpp @@ -104,6 +104,9 @@ void Universe::reorder(char *style, char *arg) // read nprocs lines // uni2orig = inverse mapping + // each original and each new rank must appear exactly once + + std::vector seen_orig(nprocs,0), seen_new(nprocs,0); int me_orig,me_new,rv; rv = sscanf(line,"%d %d",&me_orig,&me_new); @@ -111,6 +114,7 @@ void Universe::reorder(char *style, char *arg) me_new < 0 || me_new >= nprocs || rv != 2) error->one(FLERR,"Invalid entry '{} {}' in -reorder " "file", me_orig, me_new); + seen_orig[me_orig] = seen_new[me_new] = 1; uni2orig[me_new] = me_orig; for (int i = 1; i < nprocs; i++) { @@ -121,6 +125,9 @@ void Universe::reorder(char *style, char *arg) me_new < 0 || me_new >= nprocs || rv != 2) error->one(FLERR,"Invalid entry '{} {}' in -reorder " "file", me_orig, me_new); + if (seen_orig[me_orig] || seen_new[me_new]) + error->one(FLERR,"Duplicate entry '{} {}' in -reorder file", me_orig, me_new); + seen_orig[me_orig] = seen_new[me_new] = 1; uni2orig[me_new] = me_orig; } } diff --git a/src/utils.cpp b/src/utils.cpp index 558214323cc..4506aa3609b 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -862,8 +862,10 @@ void utils::bounds_typelabel(const char *file, int line, const std::string &str, nlo = nhi = -1; // cannot check for typelabels without a LAMMPS instance or a box - if (!lmp || !lmp->domain->box_exist) - utils::bounds(file, line, str, nmin, nmax, nlo, nhi, nullptr); + if (!lmp || !lmp->domain->box_exist) { + utils::bounds(file, line, str, nmin, nmax, nlo, nhi, lmp ? lmp->error : nullptr); + return; + } char *typestr = nullptr; if ((typestr = utils::expand_type(FLERR, str, mode, lmp))) diff --git a/src/variable.cpp b/src/variable.cpp index a9c4bb32adf..99a863c549d 100644 --- a/src/variable.cpp +++ b/src/variable.cpp @@ -4784,10 +4784,10 @@ int Variable::special_function(const std::string &word, char *contents, Tree **t std::vector unsorted; if (compute) { - double *vec; + double *vec = nullptr; if (index) { if (compute->array) vec = &compute->array[0][index-1]; - else vec = nullptr; + else print_var_error(FLERR,"Variable formula compute array has no values",ivar); } else vec = compute->vector; if ((method == SORT) || (method == RSORT)) unsorted.reserve(nvec); From 609419b8c0d934485a95f83a188a817bc223ae3e Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 3 Jul 2026 08:59:15 -0400 Subject: [PATCH 034/116] Add regression tests for invalid variable and corrupt restart handling New checks in the variables test: 'next' with a duplicated variable name and a py_ function reference without a matching python-style variable must produce clean errors (both previously read out of bounds). New corrupted_restart test in the file operations suite: writes a valid restart, then verifies that a file with a corrupted group-name length errors out cleanly and that truncated restart files (25/50/90 percent) report errors instead of crashing, with the library instance remaining usable afterwards. The new test immediately exposed that Group::read_restart() deletes the previous group names without nulling the pointers; when reading the restart data fails (corrupt file, exceptions enabled as in library and Python usage), the Group destructor freed them a second time, corrupting the heap. Null the pointers after deleting. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01YNvuaNpJNkbCKaAE8ngPQv --- src/group.cpp | 7 ++- unittest/commands/test_variables.cpp | 14 ++++++ unittest/formats/test_file_operations.cpp | 56 +++++++++++++++++++++++ 3 files changed, 76 insertions(+), 1 deletion(-) diff --git a/src/group.cpp b/src/group.cpp index 694c0b89c5e..71e3ac824e6 100644 --- a/src/group.cpp +++ b/src/group.cpp @@ -772,8 +772,13 @@ void Group::read_restart(FILE *fp) // delete existing group names // atom masks will be overwritten by reading of restart file + // also null the pointers: if reading the restart data fails below, the + // destructor of a still-active library instance must not free them again - for (i = 0; i < MAX_GROUP; i++) delete[] names[i]; + for (i = 0; i < MAX_GROUP; i++) { + delete[] names[i]; + names[i] = nullptr; + } if (me == 0) utils::sfread(FLERR, &ngroup, sizeof(int), 1, fp, nullptr, error); MPI_Bcast(&ngroup, 1, MPI_INT, 0, world); diff --git a/unittest/commands/test_variables.cpp b/unittest/commands/test_variables.cpp index 8d96f85c5b4..53a6b16a55b 100644 --- a/unittest/commands/test_variables.cpp +++ b/unittest/commands/test_variables.cpp @@ -246,6 +246,20 @@ TEST_F(VariableTest, CreateDelete) variable->compute_equal("c_thermo_press");); TEST_FAILURE(".*ERROR: Invalid variable reference v_unknown in variable formula.*", variable->compute_equal("v_unknown");); + + // listing the same variable twice would increment a dangling reference + // when the first increment exhausts and removes it + + BEGIN_HIDE_OUTPUT(); + command("variable dup loop 3"); + END_HIDE_OUTPUT(); + TEST_FAILURE(".*ERROR: Duplicate variable 'dup' in next command.*", command("next dup dup");); + + // a py_ function reference without a matching python-style variable + // must give an error instead of an out-of-bounds read + + TEST_FAILURE(".*ERROR: Invalid python function variable name.*", + variable->compute_equal("py_nosuchvariable(1.0)");); } TEST_F(VariableTest, AtomicSystem) diff --git a/unittest/formats/test_file_operations.cpp b/unittest/formats/test_file_operations.cpp index 4aa7da884b5..efcad08834d 100644 --- a/unittest/formats/test_file_operations.cpp +++ b/unittest/formats/test_file_operations.cpp @@ -20,8 +20,11 @@ #include "gmock/gmock.h" #include "gtest/gtest.h" +#include #include #include +#include +#include using namespace LAMMPS_NS; @@ -398,6 +401,59 @@ TEST_F(FileOperationsTest, write_restart) delete_file("triclinic.restart"); } +TEST_F(FileOperationsTest, corrupted_restart) +{ + BEGIN_HIDE_OUTPUT(); + command("echo none"); + command("region box block -2 2 -2 2 -2 2"); + command("create_box 1 box"); + command("create_atoms 1 single 0.0 0.0 0.0"); + command("mass 1 1.0"); + command("run 0 post no"); + command("write_restart good.restart"); + command("clear"); + END_HIDE_OUTPUT(); + + std::ifstream in("good.restart", std::ios::binary); + std::vector image((std::istreambuf_iterator(in)), std::istreambuf_iterator()); + in.close(); + ASSERT_GT(image.size(), 0); + + // corrupt the stored length of the group name "all": the length int + // precedes the string. must trigger a clean error, not a crash. + + const char pattern[] = {4, 0, 0, 0, 'a', 'l', 'l', '\0'}; + auto pos = std::search(image.begin(), image.end(), pattern, pattern + sizeof(pattern)); + if (pos != image.end()) { + auto patched = image; + const int bad = -1; + memcpy(&patched[pos - image.begin()], &bad, sizeof(int)); + std::ofstream out("corrupt.restart", std::ios::binary); + out.write(patched.data(), patched.size()); + out.close(); + TEST_FAILURE(".*ERROR: Invalid group name length in restart file.*", + command("read_restart corrupt.restart");); + BEGIN_HIDE_OUTPUT(); + command("clear"); + END_HIDE_OUTPUT(); + delete_file("corrupt.restart"); + } + + // truncated restart files must give a clean error, not a crash + + for (auto fraction : {0.25, 0.5, 0.9}) { + std::ofstream out("truncated.restart", std::ios::binary); + out.write(image.data(), (std::streamsize)(image.size() * fraction)); + out.close(); + TEST_FAILURE(".*ERROR.*", command("read_restart truncated.restart");); + BEGIN_HIDE_OUTPUT(); + command("clear"); + END_HIDE_OUTPUT(); + } + delete_file("truncated.restart"); + delete_file("good.restart"); +} + TEST_F(FileOperationsTest, write_data) { BEGIN_HIDE_OUTPUT(); From e93a79313532e5b27813c5883c09ba98f011973e Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 3 Jul 2026 10:39:14 -0400 Subject: [PATCH 035/116] Add regression tests for restart settings preservation and input validation test_restart_settings: writes a restart, reads it back, writes a second restart, and requires the two files to be byte-identical (with the instance counter in internal neighbor-history fix IDs masked out), verifying that the restart I/O reads back exactly what it writes for pair styles whose settings were recently added to the restart format (gran/hooke/history with limit_damping, dsmc, eff/cut). Since a setting missing from both writes would not show up in that comparison, the granular test additionally verifies the behavior of the restored flag: an unloading contact with dominant damping must have its normal force clamped to zero, which fails deterministically when the limit_damping flag is lost on restart. test_input_validation: clean errors for improper cvff multiplicity outside 0..6, fix vector nmax values that would truncate, indexed atom-style variable references in fix ave/grid, and empty/comment-only RANN potential files (which used to hang forever); also runs fix store/state with an atom-style variable on a proc without atoms, which used to dereference a null array. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01YNvuaNpJNkbCKaAE8ngPQv --- unittest/commands/CMakeLists.txt | 8 + unittest/commands/test_input_validation.cpp | 165 +++++++++++++++++ unittest/commands/test_restart_settings.cpp | 192 ++++++++++++++++++++ 3 files changed, 365 insertions(+) create mode 100644 unittest/commands/test_input_validation.cpp create mode 100644 unittest/commands/test_restart_settings.cpp diff --git a/unittest/commands/CMakeLists.txt b/unittest/commands/CMakeLists.txt index 8386d3cb24a..57061ed89b6 100644 --- a/unittest/commands/CMakeLists.txt +++ b/unittest/commands/CMakeLists.txt @@ -100,3 +100,11 @@ add_executable(test_mpi_load_balancing test_mpi_load_balancing.cpp) target_link_libraries(test_mpi_load_balancing PRIVATE lammps GTest::GMock) target_compile_definitions(test_mpi_load_balancing PRIVATE ${TEST_CONFIG_DEFS}) add_mpi_test(NAME MPILoadBalancing NUM_PROCS 4 COMMAND $) + +add_executable(test_restart_settings test_restart_settings.cpp) +target_link_libraries(test_restart_settings PRIVATE lammps GTest::GMock) +add_test(NAME RestartSettings COMMAND test_restart_settings) + +add_executable(test_input_validation test_input_validation.cpp) +target_link_libraries(test_input_validation PRIVATE lammps GTest::GMock) +add_test(NAME InputValidation COMMAND test_input_validation) diff --git a/unittest/commands/test_input_validation.cpp b/unittest/commands/test_input_validation.cpp new file mode 100644 index 00000000000..aa581184696 --- /dev/null +++ b/unittest/commands/test_input_validation.cpp @@ -0,0 +1,165 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/, Sandia National Laboratories + LAMMPS development team: developers@lammps.org + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +// Regression tests for input values that used to be silently accepted +// and later caused reads of invalid or uninitialized data. + +#include "lammps.h" + +#include "info.h" +#include "utils.h" + +#include "../testing/core.h" +#include "../testing/utils.h" +#include "gmock/gmock.h" +#include "gtest/gtest.h" + +#include +#include +#include + +using namespace LAMMPS_NS; + +bool verbose = false; + +class InputValidationTest : public LAMMPSTest { +protected: + void SetUp() override + { + testbinary = "InputValidationTest"; + LAMMPSTest::SetUp(); + } + + void atomic_box() + { + BEGIN_HIDE_OUTPUT(); + command("units lj"); + command("region box block 0 2 0 2 0 2"); + command("create_box 1 box"); + command("create_atoms 1 single 1.0 1.0 1.0"); + command("mass 1 1.0"); + END_HIDE_OUTPUT(); + } +}; + +TEST_F(InputValidationTest, improper_cvff_multiplicity) +{ + if (!Info::has_package("MOLECULE")) GTEST_SKIP(); + + BEGIN_HIDE_OUTPUT(); + command("units real"); + command("atom_style full"); + command("region box block 0 10 0 10 0 10"); + command("create_box 1 box improper/types 1 extra/improper/per/atom 1"); + command("improper_style cvff"); + END_HIDE_OUTPUT(); + + // the harmonic lookup tables only cover multiplicities 0 to 6 + + TEST_FAILURE(".*ERROR: Improper cvff multiplicity 7 must be between 0 and 6.*", + command("improper_coeff 1 80.0 1 7");); + TEST_FAILURE(".*ERROR: Improper cvff multiplicity -1 must be between 0 and 6.*", + command("improper_coeff 1 80.0 1 -1");); + BEGIN_HIDE_OUTPUT(); + command("improper_coeff 1 80.0 1 2"); + END_HIDE_OUTPUT(); +} + +TEST_F(InputValidationTest, fix_vector_nmax) +{ + atomic_box(); + BEGIN_HIDE_OUTPUT(); + command("compute t all temp"); + END_HIDE_OUTPUT(); + + // nmax values beyond 32-bit int would truncate the allocation + + TEST_FAILURE(".*ERROR: Invalid nmax value.*", + command("fix v1 all vector 1 c_t nmax 3000000000");); + TEST_FAILURE(".*ERROR: Invalid nmax value.*", command("fix v2 all vector 1 c_t nmax 0");); + BEGIN_HIDE_OUTPUT(); + command("fix v3 all vector 1 c_t nmax 1000"); + END_HIDE_OUTPUT(); +} + +TEST_F(InputValidationTest, fix_ave_grid_indexed_variable) +{ + atomic_box(); + BEGIN_HIDE_OUTPUT(); + command("variable f atom x+y"); + END_HIDE_OUTPUT(); + + // atom-style variables produce a vector: a bracketed reference has + // no array to read and used to access uninitialized storage + + TEST_FAILURE(".*ERROR: Fix ave/grid variable f cannot be indexed.*", + command("fix a1 all ave/grid 1 1 1 2 2 2 v_f[2]");); + BEGIN_HIDE_OUTPUT(); + command("fix a2 all ave/grid 1 1 1 2 2 2 v_f"); + END_HIDE_OUTPUT(); +} + +TEST_F(InputValidationTest, fix_store_state_no_atoms) +{ + // atom-style variable input with zero atoms on a proc used to + // dereference the (then null) per-atom storage array + + BEGIN_HIDE_OUTPUT(); + command("units lj"); + command("region box block 0 2 0 2 0 2"); + command("create_box 1 box"); + command("mass 1 1.0"); + command("variable f atom x+y"); + command("fix s all store/state 1 v_f"); + command("run 1 post no"); + END_HIDE_OUTPUT(); + SUCCEED(); +} + +TEST_F(InputValidationTest, pair_rann_empty_potential) +{ + if (!Info::has_package("ML-RANN")) GTEST_SKIP(); + + // an empty or comment-only potential file used to hang forever + + { + std::ofstream out("empty_test.rann"); + out << "# comment only, no data\n\n"; + } + atomic_box(); + BEGIN_HIDE_OUTPUT(); + command("pair_style rann"); + END_HIDE_OUTPUT(); + TEST_FAILURE(".*(Unexpected end of RANN potential file|Invalid syntax in potential file).*", + command("pair_coeff * * empty_test.rann X");); + delete_file("empty_test.rann"); +} + +int main(int argc, char **argv) +{ + MPI_Init(&argc, &argv); + ::testing::InitGoogleMock(&argc, argv); + + // handle arguments passed via environment variable + if (const char *var = getenv("TEST_ARGS")) { + std::vector env = LAMMPS_NS::utils::split_words(var); + for (auto arg : env) { + if (arg == "-v") verbose = true; + } + } + if ((argc > 1) && (strcmp(argv[1], "-v") == 0)) verbose = true; + + int rv = RUN_ALL_TESTS(); + MPI_Finalize(); + return rv; +} diff --git a/unittest/commands/test_restart_settings.cpp b/unittest/commands/test_restart_settings.cpp new file mode 100644 index 00000000000..6ada38858eb --- /dev/null +++ b/unittest/commands/test_restart_settings.cpp @@ -0,0 +1,192 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/, Sandia National Laboratories + LAMMPS development team: developers@lammps.org + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +// Regression tests for style settings surviving binary restart files. +// Each test writes a restart, reads it back, writes a second restart, +// and requires the two files to be byte-identical: any style setting +// that is parsed in settings() or coeff() but not stored and restored +// by the restart code shows up as a difference in the second file. + +#include "lammps.h" + +#include "atom.h" +#include "info.h" +#include "utils.h" + +#include "../testing/core.h" +#include "../testing/utils.h" +#include "gmock/gmock.h" +#include "gtest/gtest.h" + +#include +#include +#include +#include +#include +#include + +using namespace LAMMPS_NS; + +bool verbose = false; + +class RestartSettingsTest : public LAMMPSTest { +protected: + void SetUp() override + { + testbinary = "RestartSettingsTest"; + LAMMPSTest::SetUp(); + } + + static std::vector read_binary(const std::string &filename) + { + std::ifstream in(filename, std::ios::binary); + return {std::istreambuf_iterator(in), std::istreambuf_iterator()}; + } + + // the IDs of internal fixes created by pair styles embed a per-process + // instance counter that does not reset on the clear command; mask the + // counter digits so they do not fail the round-trip comparison + + static void mask_instance_ids(std::vector &buf) + { + const std::string tag("NEIGH_HISTORY_HH"); + auto it = buf.begin(); + while ((it = std::search(it, buf.end(), tag.begin(), tag.end())) != buf.end()) { + it += tag.size(); + while ((it != buf.end()) && isdigit(*it)) *it++ = '#'; + } + } + + // write -> read -> write round trip; both files must be identical + + void roundtrip_check() + { + BEGIN_HIDE_OUTPUT(); + command("run 0 post no"); + command("write_restart roundtrip_a.restart"); + command("clear"); + command("read_restart roundtrip_a.restart"); + command("run 0 post no"); + command("write_restart roundtrip_b.restart"); + END_HIDE_OUTPUT(); + + auto a = read_binary("roundtrip_a.restart"); + auto b = read_binary("roundtrip_b.restart"); + mask_instance_ids(a); + mask_instance_ids(b); + ASSERT_GT(a.size(), 0); + EXPECT_EQ(a, b) << "restart file changed in write/read/write round trip: " + "some style setting is not preserved"; + + delete_file("roundtrip_a.restart"); + delete_file("roundtrip_b.restart"); + } +}; + +TEST_F(RestartSettingsTest, granular_limit_damping) +{ + if (!Info::has_package("GRANULAR")) GTEST_SKIP(); + + BEGIN_HIDE_OUTPUT(); + command("units si"); + command("atom_style sphere"); + command("boundary f f f"); + command("region box block 0 1 0 1 0 1 units box"); + command("create_box 1 box"); + command("create_atoms 1 single 0.5 0.5 0.5 units box"); + command("create_atoms 1 single 0.5 0.5 0.595 units box"); + command("set group all diameter 0.1 density 2500"); + command("pair_style gran/hooke/history 200000 NULL 50 NULL 0.5 1 limit_damping"); + command("pair_coeff * *"); + command("comm_modify vel yes"); + END_HIDE_OUTPUT(); + roundtrip_check(); + + // behavioral check that the flag itself survived: for an unloading + // contact with dominant damping the limited normal force is clamped + // to zero, while a lost limit_damping flag gives an attractive force + + BEGIN_HIDE_OUTPUT(); + command("velocity all set 0.0 0.0 0.0"); + command("group upper id 2"); + command("velocity upper set 0.0 0.0 1000.0"); + command("run 0 post no"); + END_HIDE_OUTPUT(); + for (int i = 0; i < lmp->atom->nlocal; i++) + if (lmp->atom->tag[i] == 2) EXPECT_GE(lmp->atom->f[i][2], 0.0); +} + +TEST_F(RestartSettingsTest, dsmc_settings) +{ + if (!Info::has_package("MC")) GTEST_SKIP(); + + BEGIN_HIDE_OUTPUT(); + command("units si"); + command("boundary f f f"); + command("region box block 0 1e-5 0 1e-5 0 1e-5 units box"); + command("create_box 1 box"); + command("create_atoms 1 single 5e-6 5e-6 5e-6 units box"); + command("mass 1 6.63e-26"); + // all six settings must survive the restart: + // max_cell_size seed weighting T_ref recompute_stride nsamples + command("pair_style dsmc 5e-6 12345 10 300.0 10 100"); + command("pair_coeff * * 4.0e-10"); + command("timestep 1e-8"); + END_HIDE_OUTPUT(); + roundtrip_check(); +} + +TEST_F(RestartSettingsTest, eff_cut_settings) +{ + if (!Info::has_package("EFF")) GTEST_SKIP(); + + BEGIN_HIDE_OUTPUT(); + command("units electron"); + command("atom_style electron"); + command("boundary f f f"); + command("region box block -10 10 -10 10 -10 10 units box"); + command("create_box 2 box"); + // one nucleus (spin 0, charge 1) and one electron (spin 1) via data-free setup + command("create_atoms 1 single 0.0 0.0 0.0 units box"); + command("create_atoms 2 single 0.5 0.0 0.0 units box"); + command("mass * 1.0"); + command("set type 1 charge 1.0"); + command("set type 2 charge -1.0"); + command("set type 2 spin/electron 1"); + command("set type 2 radius/electron 1.0"); + command("pair_style eff/cut 8.0 limit/eradius pressure/evirials"); + command("pair_coeff * *"); + END_HIDE_OUTPUT(); + roundtrip_check(); +} + +int main(int argc, char **argv) +{ + MPI_Init(&argc, &argv); + ::testing::InitGoogleTest(&argc, argv); + + // handle arguments passed via environment variable + if (const char *var = getenv("TEST_ARGS")) { + std::vector env = LAMMPS_NS::utils::split_words(var); + for (auto arg : env) { + if (arg == "-v") { + verbose = true; + } + } + } + if ((argc > 1) && (strcmp(argv[1], "-v") == 0)) verbose = true; + + int rv = RUN_ALL_TESTS(); + MPI_Finalize(); + return rv; +} From d64e1d72349708e6be299b32c38e8aa24d69840e Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 3 Jul 2026 11:32:57 -0400 Subject: [PATCH 036/116] Overhaul regression test reporting and add result merging tool Improvements to tools/regression-tests/run_tests.py: - JUnit XML output rewritten (drops the unmaintained junit_xml package in favor of xml.etree from the standard library): every input script is now enumerated as a test case with proper JUnit semantics (failure = numerical checks failed, error = crash/timeout/no log file, skipped = not run or nothing to check), the measured walltime in the time attribute, the example folder as the classname, and build/configuration metadata (git info, compiler, config file) as suite properties. Previously, completed-but-unchecked runs were reported as failures, skipped inputs were missing entirely, and walltime and error details were dropped. - progress.yaml and failure.yaml are now written with yaml.safe_dump in the same "key: {flow mapping}" per-line format as reference.yaml, so error messages with quotes can no longer corrupt them and the files parse as a single YAML mapping. This also makes --resume actually work: the previous multi-document format never parsed, so resuming silently restarted from scratch. Also fixes the mismatched 'packaged not installed' resume check that never matched. - runs that exceed the timeout are now started in their own process group and the whole group is killed, so mpirun and LAMMPS child processes can no longer linger after a timeout. - numerical check failures record the number of failed checks in the status and the individual failed quantities in the JUnit output. - valgrind runs that detect a memory leak are now reported as failed. - remove dead #REG marker code paths; replace ls/pwd/cp subprocess calls with glob/os/shutil equivalents; fix TestResult() dropping its checks argument. New tools/regression-tests/merge_results.py (standard library only): merges the JUnit XML files from distributed test runs into a single file and generates a JSON archive file and a Markdown summary suitable for $GITHUB_STEP_SUMMARY. With --compare against the JSON file of a previous run it reports new failures, fixed tests, new tests, and removed tests. The full-regression and quick-regression workflows upload the per-shard files directly (no more tar), also when tests fail, and gain a merge job that runs merge_results.py and posts the summary table with per-test failure details to the workflow step summary. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01RZmFEmpx4SmV2vaUWBF4Yk --- .github/workflows/full-regression.yml | 42 +- .github/workflows/quick-regression.yml | 42 +- tools/regression-tests/README | 29 +- tools/regression-tests/merge_results.py | 222 ++++++++ tools/regression-tests/run_tests.py | 668 ++++++++++++------------ 5 files changed, 639 insertions(+), 364 deletions(-) create mode 100755 tools/regression-tests/merge_results.py diff --git a/.github/workflows/full-regression.yml b/.github/workflows/full-regression.yml index 782268da713..9c8c15237f1 100644 --- a/.github/workflows/full-regression.yml +++ b/.github/workflows/full-regression.yml @@ -48,7 +48,7 @@ jobs: python3 -m venv linuxenv source linuxenv/bin/activate python3 -m pip install --upgrade pip - python3 -m pip install numpy pyyaml junit_xml + python3 -m pip install numpy pyyaml cmake -S cmake -B build \ -C cmake/presets/gcc.cmake \ -C cmake/presets/most.cmake \ @@ -85,21 +85,49 @@ jobs: --progress-file=progress-${{ matrix.idx }}.yaml \ --log-file=run-${{ matrix.idx }}.log - tar -cvf full-regression-test-${{ matrix.idx }}.tar run-${{ matrix.idx }}.log progress-${{ matrix.idx }}.yaml output-${{ matrix.idx }}.xml - - name: Upload artifacts + if: always() uses: actions/upload-artifact@v7 with: name: full-regression-test-artifact-${{ matrix.idx }} - path: full-regression-test-${{ matrix.idx }}.tar + path: | + run-${{ matrix.idx }}.log + progress-${{ matrix.idx }}.yaml + output-${{ matrix.idx }}.xml merge: + name: Merge and Summarize Results runs-on: ubuntu-latest needs: build steps: - - name: Merge Artifacts - uses: actions/upload-artifact/merge@v7 + - name: Checkout repository + uses: actions/checkout@v7 + with: + fetch-depth: 1 + show-progress: false + + - name: Download test results from all shards + uses: actions/download-artifact@v8 with: - name: merged-full-regresssion-artifact pattern: full-regression-test-artifact-* + path: shards + merge-multiple: true + + - name: Merge results and generate summary + shell: bash + run: | + python3 tools/regression-tests/merge_results.py \ + --title "Full Regression Test" \ + --output-xml regression.xml --json run.json --summary summary.md \ + shards/output-*.xml + cat summary.md >> $GITHUB_STEP_SUMMARY + + - name: Upload merged results + uses: actions/upload-artifact@v7 + with: + name: full-regression-test-results + path: | + regression.xml + run.json + summary.md diff --git a/.github/workflows/quick-regression.yml b/.github/workflows/quick-regression.yml index 8843cc55e6d..b1f9540e25e 100644 --- a/.github/workflows/quick-regression.yml +++ b/.github/workflows/quick-regression.yml @@ -52,7 +52,7 @@ jobs: python3 -m venv linuxenv source linuxenv/bin/activate python3 -m pip install --upgrade pip - python3 -m pip install numpy pyyaml junit_xml + python3 -m pip install numpy pyyaml cmake -S cmake -B build \ -C cmake/presets/gcc.cmake \ -C cmake/presets/most.cmake \ @@ -94,21 +94,49 @@ jobs: --log-file=run-${{ matrix.idx }}.log fi - tar -cvf quick-regression-test-${{ matrix.idx }}.tar run-${{ matrix.idx }}.log progress-${{ matrix.idx }}.yaml output-${{ matrix.idx }}.xml - - name: Upload artifacts + if: always() uses: actions/upload-artifact@v7 with: name: quick-regression-test-artifact-${{ matrix.idx }} - path: quick-regression-test-${{ matrix.idx }}.tar + path: | + run-${{ matrix.idx }}.log + progress-${{ matrix.idx }}.yaml + output-${{ matrix.idx }}.xml merge: + name: Merge and Summarize Results runs-on: ubuntu-latest needs: build steps: - - name: Merge Artifacts - uses: actions/upload-artifact/merge@v7 + - name: Checkout repository + uses: actions/checkout@v7 + with: + fetch-depth: 1 + show-progress: false + + - name: Download test results from all shards + uses: actions/download-artifact@v8 with: - name: merged-quick-regresssion-artifact pattern: quick-regression-test-artifact-* + path: shards + merge-multiple: true + + - name: Merge results and generate summary + shell: bash + run: | + python3 tools/regression-tests/merge_results.py \ + --title "Quick Regression Test" \ + --output-xml regression.xml --json run.json --summary summary.md \ + shards/output-*.xml + cat summary.md >> $GITHUB_STEP_SUMMARY + + - name: Upload merged results + uses: actions/upload-artifact@v7 + with: + name: quick-regression-test-results + path: | + regression.xml + run.json + summary.md diff --git a/tools/regression-tests/README b/tools/regression-tests/README index b698be6669b..9360f0dcdc7 100644 --- a/tools/regression-tests/README +++ b/tools/regression-tests/README @@ -45,12 +45,37 @@ Input arguments: Output: - + failure.yaml : a dictionary of the failed runs and reasons + + failure.yaml : a dictionary of the failed runs and reasons (a subset of progress.yaml) + progress.yaml: full testing results of the tested input scripts with the status (completed, failed or skipped) with error messages (for failed runs), and walltime (in seconds) + output.xml : testing results in the JUnit XML format + run.log : screen output and error of individual runs +Both YAML files are written incrementally (one line per tested input) and parse as a +single YAML mapping keyed by the input script name. + +The JUnit XML file records one test case per input script with the walltime and one of +four outcomes: passed (all numerical checks passed), failure (the run completed but +numerical checks failed), error (the run crashed, timed out, or produced no log file), +or skipped (the input was not run, or it ran but nothing could be checked, e.g. when +the reference log file is missing). The test case classname is the example folder +relative to the examples top-level folder, so results from distributed runs can be +merged and compared across machines. + +The JUnit XML files from multiple (distributed) runs can be merged and summarized +with the merge_results.py script in this folder (which only needs the Python +standard library): + + python3 merge_results.py --title "Full Regression Test" \ + --output-xml regression.xml --json run.json --summary summary.md \ + output-*.xml + +This produces a merged JUnit XML file, a JSON file with all results and metadata +for archiving, and a Markdown summary (use "--summary -" to print it to the screen) +suitable for $GITHUB_STEP_SUMMARY. With --compare previous-run.json, the summary +also reports the changes relative to an earlier run: new failures, fixed tests, +new tests, and removed tests. + Limitations: + input scripts use thermo style multi (e.g., examples/peptide) do not work with the expected thermo output format @@ -61,7 +86,7 @@ The following Python packages need to be installed into an activated environment python3 -m venv testing-env source testing-env/bin/activate - pip install numpy pyyaml junit_xml + pip install numpy pyyaml For all the supported arguments, run: diff --git a/tools/regression-tests/merge_results.py b/tools/regression-tests/merge_results.py new file mode 100755 index 00000000000..398709d64e6 --- /dev/null +++ b/tools/regression-tests/merge_results.py @@ -0,0 +1,222 @@ +#!/usr/bin/env python3 +''' +Merge JUnit XML files from distributed regression test runs (see run_tests.py) +and generate machine readable and human readable summaries. + +Only the Python standard library is required. + +Input: + + one or more JUnit XML files, e.g. output-0.xml output-1.xml ... + (files that are empty or cannot be parsed are skipped with a warning) + +Output (all optional, selected via command line flags): + + --output-xml merged.xml : all test cases merged into a single JUnit XML file + + --json run.json : test results and metadata as a JSON file; this is + the input format for --compare and is meant to be + archived for tracking results over time + + --summary summary.md : summary in Markdown format (use "-" for stdout), + suitable for $GITHUB_STEP_SUMMARY + +With --compare previous-run.json, the Markdown summary also reports the changes +relative to a previous run: new failures, fixed tests, new tests, removed tests. + +Example: + python3 merge_results.py --title "Full Regression Test" \ + --output-xml regression.xml --json run.json --summary summary.md \ + --compare previous-run.json output-*.xml +''' + +from argparse import ArgumentParser +import datetime +import json +import sys +import xml.etree.ElementTree as ET + +# statuses that count as broken for the comparison with a previous run +BAD = ('failed', 'error') + +''' + parse a single JUnit XML file as written by run_tests.py (a single + root element, or a wrapper) and return a tuple of + (properties dict, tests dict keyed by "classname/name") +''' +def parse_junit_xml(filename): + tree = ET.parse(filename) + root = tree.getroot() + if root.tag == 'testsuites': + suites = root.findall('testsuite') + elif root.tag == 'testsuite': + suites = [root] + else: + raise ET.ParseError(f"unexpected root element <{root.tag}>") + + properties = {} + tests = {} + for suite in suites: + for prop in suite.findall('./properties/property'): + properties.setdefault(prop.get('name', ''), prop.get('value', '')) + for case in suite.findall('testcase'): + key = case.get('classname', '') + '/' + case.get('name', '') + entry = {'status': 'passed', 'time': float(case.get('time', 0.0)), 'message': ''} + for tag in ('failure', 'error', 'skipped'): + elem = case.find(tag) + if elem is not None: + entry['status'] = 'failed' if tag == 'failure' else tag + entry['message'] = elem.get('message', '') + break + tests[key] = entry + return properties, tests + +''' + write the merged test data back out as a single JUnit XML file +''' +def write_merged_xml(filename, title, properties, tests, counts): + testsuite = ET.Element('testsuite') + testsuite.set('name', title) + testsuite.set('timestamp', datetime.datetime.now().isoformat(timespec='seconds')) + testsuite.set('tests', str(counts['tests'])) + testsuite.set('failures', str(counts['failed'])) + testsuite.set('errors', str(counts['error'])) + testsuite.set('skipped', str(counts['skipped'])) + testsuite.set('time', f"{counts['time']:.3f}") + + if properties: + props = ET.SubElement(testsuite, 'properties') + for key, value in properties.items(): + prop = ET.SubElement(props, 'property') + prop.set('name', str(key)) + prop.set('value', str(value)) + + for key in sorted(tests): + entry = tests[key] + classname, _, name = key.rpartition('/') + case = ET.SubElement(testsuite, 'testcase') + case.set('name', name) + case.set('classname', classname) + case.set('time', f"{entry['time']:.3f}") + if entry['status'] != 'passed': + tag = 'failure' if entry['status'] == 'failed' else entry['status'] + elem = ET.SubElement(case, tag) + elem.set('message', entry['message']) + + tree = ET.ElementTree(testsuite) + ET.indent(tree) + tree.write(filename, encoding='UTF-8', xml_declaration=True) + +''' + format a capped Markdown list of test names with messages +''' +def markdown_list(keys, tests, maxlen=50): + lines = [] + for key in sorted(keys)[:maxlen]: + message = tests[key]['message'] if key in tests else '' + if message: + lines.append(f"- `{key}`: {message}") + else: + lines.append(f"- `{key}`") + if len(keys) > maxlen: + lines.append(f"- ... and {len(keys) - maxlen} more") + return '\n'.join(lines) + '\n' + +if __name__ == "__main__": + parser = ArgumentParser(description="Merge and summarize JUnit XML regression test results") + parser.add_argument("xmlfiles", nargs='+', help="JUnit XML files to merge") + parser.add_argument("--title", default="Regression Test", help="Title used in the merged output") + parser.add_argument("--output-xml", dest="output_xml", default="", help="Merged JUnit XML output file") + parser.add_argument("--json", dest="json_file", default="", help="JSON output file with results and metadata") + parser.add_argument("--summary", dest="summary", default="", help="Markdown summary output file ('-' for stdout)") + parser.add_argument("--compare", dest="compare", default="", help="JSON file from a previous run to compare against") + args = parser.parse_args() + + # merge the shards + properties = {} + tests = {} + for xmlfile in args.xmlfiles: + try: + shard_properties, shard_tests = parse_junit_xml(xmlfile) + except ET.ParseError as err: + print(f"WARNING: skipping {xmlfile}: {err}", file=sys.stderr) + continue + for key, value in shard_properties.items(): + properties.setdefault(key, value) + duplicates = set(shard_tests) & set(tests) + if duplicates: + print(f"WARNING: {len(duplicates)} duplicate test(s) in {xmlfile}, keeping the first result", + file=sys.stderr) + for key in duplicates: + del shard_tests[key] + tests.update(shard_tests) + + counts = {'tests': len(tests), 'passed': 0, 'failed': 0, 'error': 0, 'skipped': 0, 'time': 0.0} + for entry in tests.values(): + counts[entry['status']] += 1 + counts['time'] += entry['time'] + + if args.output_xml: + write_merged_xml(args.output_xml, args.title, properties, tests, counts) + + if args.json_file: + data = { + 'metadata': { + 'title': args.title, + 'generated': datetime.datetime.now().isoformat(timespec='seconds'), + 'properties': properties, + 'counts': counts, + }, + 'tests': tests, + } + with open(args.json_file, 'w') as f: + json.dump(data, f, indent=2) + f.write('\n') + + # generate the Markdown summary + if args.summary: + md = f"## {args.title}\n\n" + md += "| Tests | Passed | Failed | Errors | Skipped | Walltime |\n" + md += "|------:|-------:|-------:|-------:|--------:|---------:|\n" + md += (f"| {counts['tests']} | {counts['passed']} | {counts['failed']} | {counts['error']} |" + f" {counts['skipped']} | {counts['time']:.0f} s |\n\n") + + failed = [key for key, entry in tests.items() if entry['status'] == 'failed'] + errors = [key for key, entry in tests.items() if entry['status'] == 'error'] + if failed: + md += f"### Failed numerical checks ({len(failed)})\n\n" + md += markdown_list(failed, tests) + '\n' + if errors: + md += f"### Runs with errors ({len(errors)})\n\n" + md += markdown_list(errors, tests) + '\n' + + if args.compare: + with open(args.compare, 'r') as f: + previous = json.load(f) + tests_prev = previous.get('tests', {}) + generated_prev = previous.get('metadata', {}).get('generated', 'unknown date') + + new_failures = [k for k in tests if k in tests_prev + and (tests[k]['status'] in BAD) and (tests_prev[k]['status'] not in BAD)] + fixed = [k for k in tests if k in tests_prev + and (tests[k]['status'] == 'passed') and (tests_prev[k]['status'] in BAD)] + new_tests = [k for k in tests if k not in tests_prev] + removed = [k for k in tests_prev if k not in tests] + + md += f"### Changes relative to the previous run (from {generated_prev})\n\n" + if not (new_failures or fixed or new_tests or removed): + md += "No changes.\n\n" + if new_failures: + md += f"**New failures ({len(new_failures)}):**\n\n" + md += markdown_list(new_failures, tests) + '\n' + if fixed: + md += f"**Fixed since the previous run ({len(fixed)}):**\n\n" + md += markdown_list(fixed, {}) + '\n' + if new_tests: + md += f"**New tests ({len(new_tests)}):**\n\n" + md += markdown_list(new_tests, tests) + '\n' + if removed: + md += f"**Removed tests ({len(removed)}):**\n\n" + md += markdown_list(removed, {}) + '\n' + + if args.summary == '-': + sys.stdout.write(md) + else: + with open(args.summary, 'w') as f: + f.write(md) diff --git a/tools/regression-tests/run_tests.py b/tools/regression-tests/run_tests.py index a1642670d1c..24d28583c38 100755 --- a/tools/regression-tests/run_tests.py +++ b/tools/regression-tests/run_tests.py @@ -12,7 +12,7 @@ + specify the list of examples input scripts to test + specify tolerances for individual quantities for any input script to override the global values + launch tests with `mpirun` with all supported command line features (multiple procs, multiple paritions, and suffixes) - + skip certain input files (whose names match specified patterns) if not interested, or packaged not installed, or no reference log file exists + + skip certain input files (whose names match specified patterns) if not interested, or package not installed, or no reference log file exists + set a timeout for every input script run if they may take too long + skip numerical checks if the goal is just to check if the runs do not fail @@ -33,12 +33,16 @@ the path to the top-level examples Output: - + failure.yaml : list of the failed runs and reasons + + failure.yaml : list of the failed runs and reasons (a subset of progress.yaml) + progress.yaml: full testing results of the tested input scripts with the status (completed, failed or skipped) with error messages (for failed runs), and walltime (in seconds) + output.xml : testing results in the JUnit XML format + run.log : screen output and error of individual runs +Both YAML files are written incrementally (one line per tested input) and parse as +a single YAML mapping keyed by the input script name. Multiple JUnit XML files from +distributed runs can be merged and summarized with merge_results.py in this folder. + Limitations: - input scripts use thermo style multi (e.g., examples/peptide) do not work with the expected thermo output format - input scripts that require partition runs (e.g. examples/neb) need a separate config file, e.g. args: "--partition 3x1" @@ -48,7 +52,7 @@ python3 -m venv testing-env source testing-env/bin/activate - pip install numpy pyyaml junit_xml + pip install numpy pyyaml Example usage (aka, tests for this script): @@ -89,21 +93,22 @@ from argparse import ArgumentParser import datetime import fnmatch +import glob import logging import os import random import re +import shutil +import signal import subprocess import sys +import xml.etree.ElementTree as ET #from multiprocessing import Pool # need "pip install numpy pyyaml" import numpy as np import yaml -# need "pip install junit_xml" -from junit_xml import TestSuite, TestCase - try: from yaml import CSafeLoader as Loader except ImportError: @@ -117,90 +122,180 @@ import get_quick_list ''' - data structure to store the test result + data structure to store the result of a single test run + + name : name of the input script (e.g. in.melt) + folder : full path of the folder containing the input script + category: normalized outcome for downstream reporting, one of + 'passed' all numerical checks passed + 'failed' the run completed but numerical checks failed + 'error' the run did not complete (crash, timeout, missing log file) + 'completed' the run completed but no numerical checks were possible + (e.g. no reference log file, skipped numerical checks) + 'skipped' the input script was not run at all + status : human readable description of the outcome (stored in the progress file) + message : additional details (e.g. the individual failed checks) + time : walltime of the run in seconds (-1: failed, -2: skipped) + checks : number of performed numerical checks + timeout : whether the run was killed after exceeding the timeout + memleak : whether valgrind detected memory leaks ''' class TestResult: - def __init__(self, name, output=None, time=None, checks=0, status=None): + def __init__(self, name, folder=None, category='skipped', status="", message="", + time=-2.0, checks=0): self.name = name - self.output = output - self.time = time - self.checks = 0 + self.folder = folder + self.category = category self.status = status + self.message = message + self.time = time + self.checks = checks + self.timeout = False + self.memleak = False + +''' + condense a (possibly multi-line) text into a single line of limited length + suitable for status messages in the progress file and JUnit XML attributes +''' +def shorten(text, maxlen=200): + text = ' '.join(str(text).split()) + if len(text) > maxlen: + text = text[:maxlen] + " ..." + return text + +''' + write the results of the completed test runs into a JUnit XML file + for downstream reporting (merging, summaries, websites) + + output_file: name of the JUnit XML file + results : list of TestResult objects + suite_name : name of the test suite (e.g. the test configuration file) + properties : dictionary with build and test configuration metadata +''' +def write_junit_xml(output_file, results, suite_name, properties=None): + testsuite = ET.Element('testsuite') + testsuite.set('name', suite_name) + testsuite.set('timestamp', datetime.datetime.now().isoformat(timespec='seconds')) + num_failures = 0 + num_errors = 0 + num_skipped = 0 + total_time = 0.0 + + if properties: + props = ET.SubElement(testsuite, 'properties') + for key, value in properties.items(): + prop = ET.SubElement(props, 'property') + prop.set('name', str(key)) + prop.set('value', shorten(value, maxlen=1000)) + + for result in results: + case = ET.SubElement(testsuite, 'testcase') + case.set('name', result.name) + # report the folder relative to the examples top-level folder, so that + # results from different machines or checkouts can be compared + folder = os.path.abspath(result.folder) if result.folder else '' + marker = os.sep + 'examples' + os.sep + if marker in folder: + classname = folder.split(marker, 1)[1] + else: + classname = os.path.basename(folder) + case.set('classname', classname.replace(os.sep, '/')) + case.set('time', f"{max(float(result.time), 0.0):.3f}") + total_time += max(float(result.time), 0.0) + + if result.category == 'failed': + elem = ET.SubElement(case, 'failure') + num_failures += 1 + elif result.category == 'error': + elem = ET.SubElement(case, 'error') + num_errors += 1 + elif result.category in ('skipped', 'completed'): + # 'completed' means the run finished but nothing could be verified, + # so it is reported as skipped rather than as passed + elem = ET.SubElement(case, 'skipped') + num_skipped += 1 + else: + elem = None + if elem is not None: + elem.set('message', shorten(result.status)) + if result.message: + elem.text = result.message + + testsuite.set('tests', str(len(results))) + testsuite.set('failures', str(num_failures)) + testsuite.set('errors', str(num_errors)) + testsuite.set('skipped', str(num_skipped)) + testsuite.set('time', f"{total_time:.3f}") + + tree = ET.ElementTree(testsuite) + ET.indent(tree) + tree.write(output_file, encoding='UTF-8', xml_declaration=True) ''' - Iterate over a list of input folders and scripts using the given lmp_binary and the testing configuration + Iterate over a list of input scripts using the given lmp_binary and the testing configuration lmp_binary : full path to the LAMMPS binary input_folder : the absolute path to the input files input_list : list of the input scripts under the input_folder config : the dict that contains the test configuration + results : list of TestResult objects, one gets appended per input script + progress_file: yaml file that stores the tested input script and status + failure_file : file that reports the failed runs (a subset of progress_file) walltime_ref : reference walltime + last_progress: the dictionary that shows the status of the last tests + output_buf : placeholder for storing the output of a given worker return - results : a list of TestResult objects stat : a dictionary that lists the number of passed, skipped, failed tests - progress_file: yaml file that stores the tested input script and status - failure_file : file that reports the failed runs (a subset of progress_file) - last_progress: the dictionary that shows the status of the last tests - output_buf: placeholder for storing the output of a given worker ''' def iterate(lmp_binary, input_folder, input_list, config, results, progress_file, failure_file, walltime_ref=1, verbose=False, last_progress=None, output_buf=None): num_tests = len(input_list) - - num_skipped = 0 - num_error = 0 - num_timeout = 0 - num_failed = 0 - num_completed = 0 - num_passed = 0 - num_memleak = 0 + num_results_initial = len(results) test_id = 0 - # using REG-commented input scripts, now turned off (False) - using_markers = False EPSILON = np.float64(config['epsilon']) nugget = float(config['nugget']) genref = config['genref'] compiler = config['compiler'] - use_valgrind = False - if 'valgrind' in config['mpiexec']: - use_valgrind = True + use_valgrind = 'valgrind' in config['mpiexec'] - # record all the failed runs - failure = open(failure_file, "a") + # record the outcome of a test: append it to the results list, write one line + # to the progress file and, for failed or errored tests, to the failure file; + # each line is a flow-style YAML mapping so that the whole file parses as a + # single YAML mapping keyed by the input script names + def record(result, walltime_norm=None, failed_checks=None, write_progress=True): + results.append(result) + if not write_progress: + return + entry = { 'folder': result.folder, 'status': result.status } + if failed_checks is not None: + entry['failed_checks'] = failed_checks + entry['walltime'] = float(result.time) + if walltime_norm is not None: + entry['walltime_norm'] = float(walltime_norm) + value = yaml.safe_dump(entry, default_flow_style=True, + sort_keys=False, width=1000000).strip() + line = f"{result.name}: {value}\n" + with open(progress_file, "a") as progress: + progress.write(line) + if result.category in ('failed', 'error'): + with open(failure_file, "a") as failure: + failure.write(line) # iterate over the input scripts for input in input_list: - # check if the progress file exists to append or create a new one - if os.path.isfile(progress_file) == True: - progress = open(progress_file, "a") - else: - progress = open(progress_file, "w") - - # walltime = -2: skipped tests - # -1: failed tests - # >= 0: walltime in seconds (e.g. in.melt walltime = 0.2 seconds) - walltime = -2 + input_test = input + result = TestResult(name=input, folder=input_folder) # skip the input file if listed in the config file or matched with a pattern if 'skip' in config: - if input in config['skip']: - msg = " + " + input + f" ({test_id+1}/{num_tests}): skipped as specified in {configFileName}" - print(msg) - logger.info(msg) - progress.write(f"{{ '{input}': {{ 'folder': '{input_folder}', 'status': 'skipped', 'walltime': '{walltime}' }} }}\n") - progress.close() - num_skipped = num_skipped + 1 - test_id = test_id + 1 - continue - - matched_pattern = False - for skipped_files in config['skip']: - if '*' in skipped_files: - # check input script name e.g. in.*_imd* - if fnmatch.fnmatch(input, skipped_files): + matched_pattern = input in config['skip'] + if not matched_pattern: + for skipped_files in config['skip']: + # check the input script name against a pattern, e.g. in.*_imd* + if ('*' in skipped_files) and fnmatch.fnmatch(input, skipped_files): matched_pattern = True break @@ -208,57 +303,34 @@ def iterate(lmp_binary, input_folder, input_list, config, results, progress_file msg = " + " + input + f" ({test_id+1}/{num_tests}): skipped as specified in {configFileName}" print(msg) logger.info(msg) - progress.write(f"{{ '{input}': {{ 'folder': {input_folder}, 'status': 'skipped', 'walltime': '{walltime}' }} }}\n") - progress.close() - num_skipped = num_skipped + 1 + result.status = 'skipped as specified in the test configuration' + record(result) test_id = test_id + 1 continue # also skip if the test already completed as marked in the progress file if input in last_progress: - status = last_progress[input]['status'] + status = str(last_progress[input].get('status', '')) if 'completed' in status or 'numerical checks skipped' in status: msg = " + " + input + f" ({test_id+1}/{num_tests}): marked as completed or numerical checks skipped (see {progress_file})" logger.info(msg) print(msg) # No need to write to progress again that the run is completed - progress.close() - num_skipped = num_skipped + 1 + result.status = 'skipped, already completed in a previous run' + record(result, write_progress=False) test_id = test_id + 1 continue - if 'packaged not installed' in status: + if 'package not installed' in status: msg = " + " + input + f" ({test_id+1}/{num_tests}): due to package not installed (see {progress_file})" logger.info(msg) print(msg) # No need to write to progress again that the run gets error due to missing packages - progress.close() - num_skipped = num_skipped + 1 + result.status = 'skipped, package not installed in a previous run' + record(result, write_progress=False) test_id = test_id + 1 continue - # if annotating input scripts with REG markers is True - if using_markers == True: - input_test = 'test.' + input - if os.path.isfile(input) == True: - if has_markers(input): - process_markers(input, input_test) - - else: - print(f"WARNING: {input} does not have REG markers") - input_markers = input + '.markers' - # if the input file with the REG markers does not exist - # attempt to plug in the REG markers before each run command - if os.path.isfile(input_markers) == False: - cmd_str = "cp " + input + " " + input_markers - os.system(cmd_str) - generate_markers(input, input_markers) - process_markers(input_markers, input_test) - - else: - # else the same file name for testing - input_test = input - str_t = " + " + input_test + f" ({test_id+1}/{num_tests})" logger.info(str_t) print(str_t) @@ -267,20 +339,20 @@ def iterate(lmp_binary, input_folder, input_list, config, results, progress_file # assuming that input file names start with "in." (except in.disp, in.disp2 and in.dos in phonon/) basename = input_test[3:] ref_logfile_exist = False + thermo_ref_file = '' # if there are multiple log files for different number of procs, pick the maximum number - cmd_str = "ls log.*" - p = subprocess.run(cmd_str, shell=True, text=True, capture_output=True) - logfile_list = p.stdout.split('\n') - logfile_list.remove('') - max_np = 1 - for file in logfile_list: - # looks for pattern log.{date}.{basename}.{compiler}.{nprocs}: log.[date].min.box.[compiler]].* vs log.[date].min.[compiler].* + for file in sorted(glob.glob("log.*")): + # looks for pattern log.{date}.{basename}.{log_compiler}.{nprocs}: log.[date].min.box.[compiler]].* vs log.[date].min.[compiler].* + # skip over log files from previous test runs (log.{basename}.{nprocs}) and log.lammps + parts = file.split('.') + if len(parts) < 5: + continue # get the date from the log files - date = file.split('.',2)[1] - compiler = file.rsplit('.',2)[1] - pattern = f'log.{date}.{basename}.{compiler}.*' + date = parts[1] + log_compiler = file.rsplit('.',2)[1] + pattern = f'log.{date}.{basename}.{log_compiler}.*' if fnmatch.fnmatch(file, pattern): p = file.rsplit('.', 1) if p[1].isnumeric(): @@ -322,24 +394,25 @@ def iterate(lmp_binary, input_folder, input_list, config, results, progress_file config['mpiexec_numproc_flag'] = "" nprocs = 1 + # walltime = -2: skipped tests + # -1: failed tests + # >= 0: walltime in seconds (e.g. in.melt walltime = 0.2 seconds) # default walltime value of failed tests - walltime = -1 - - result = TestResult(name=input, output="", time="", status="passed") + result.time = -1.0 # run the LAMMPS binary with the input script status = execute(lmp_binary, config, input_test) - cmd_str = status['cmd_str'] output = status['stdout'] error = status['stderr'] - returncode = status['returncode'] + returncode = int(status['returncode']) logfilename = status['logfilename'] + result.timeout = status['timedout'] # restore the nprocs value in the configuration config['nprocs'] = saved_nprocs # check if the output contains ERROR - # there might not be a log file generated at this point, or only the log file contains only the date line + # there might not be a log file generated at this point, or the log file contains only the date line if "ERROR" in output: error_line = "" for line in output.split('\n'): @@ -349,43 +422,39 @@ def iterate(lmp_binary, input_folder, input_list, config, results, progress_file logger.info(f" The run terminated with {input_test} gives the following output:") logger.info(f" {error_line}") if "Unrecognized" in output: - result.status = f"failed, unrecognized command, package not installed, {error_line}" + result.status = f"failed, unrecognized command, package not installed, {shorten(error_line)}" elif "Unknown" in output: - result.status = f"failed, unknown command, package not installed, {error_line}" + result.status = f"failed, unknown command, package not installed, {shorten(error_line)}" else: - result.status = f"failed, {error_line}." + result.status = f"failed, {shorten(error_line)}" + result.category = 'error' + result.message = error_line logger.info(f" Output:") logger.info(f" {output}") logger.info(f" Failed with {input_test}.\n") - num_error = num_error + 1 - - results.append(result) print(f"{result.status}") - msg = f"{{ '{input}': {{ 'folder': '{input_folder}', 'status': '{result.status}', 'walltime': '{walltime}' }} }}\n" - progress.write(msg) - progress.close() - failure.write(msg) - + record(result) test_id = test_id + 1 continue # check if a log file log.{basename}.{nprocs} exists in the current folder if os.path.isfile(logfilename) == False: - msg = f" failed, no log.{basename}.{nprocs} generated with {input_test} with return code {returncode}.\n" + msg = f" failed, no {logfilename} generated with {input_test} with return code {returncode}.\n" print(msg) logger.info(msg) logger.info(f" Output:") logger.info(f" {output}") logger.info(f" Error:\n{error}") - msg = f"{{ '{input}': {{ 'folder': '{input_folder}', 'status': 'failed, no log file generated', 'walltime': '{walltime}' }} }}\n" - progress.write(msg) - progress.close() - failure.write(msg) - - num_error = num_error + 1 + result.category = 'error' + if result.timeout: + result.status = f"failed, no log file generated, {shorten(error)}" + else: + result.status = f"failed, no log file generated with return code {returncode}" + result.message = shorten(error, maxlen=1000) + record(result) test_id = test_id + 1 continue else: @@ -393,35 +462,42 @@ def iterate(lmp_binary, input_folder, input_list, config, results, progress_file if genref == True: dmy = datetime.datetime.now() date = dmy.strftime("%d%b%y") - # assume g++ for now, but is be available from running "lmp_binary -h" - compiler = "g++" - cmd_str = f"cp log.{basename}.{nprocs} log.{date}.{basename}.{compiler}.{nprocs}" - p = subprocess.run(cmd_str, shell=True, text=True, capture_output=True) + shutil.copy(f"log.{basename}.{nprocs}", f"log.{date}.{basename}.{compiler}.{nprocs}") + + # parse the total wall time from the screen output (may be absent if the run did not complete) + # NOTE: Total wall time could be 00:00:00 whereas Loop time is non-zero seconds + walltime = None + walltime_norm = 1.0 + for line in output.split('\n'): + if "Total wall time" in line: + walltime_str = line.split('time:')[1] + hms = walltime_str.split(':') + hours = float(hms[0]) + minutes = float(hms[1]) + seconds = float(hms[2]) + walltime = hours * 3600.0 + minutes * 60.0 + seconds + walltime_norm = float(walltime) / float(walltime_ref) + result.time = walltime + break # if skip numerical checks, then skip the rest if skip_numerical_check == True: msg = "completed, skipping numerical checks" + result.category = 'completed' if use_valgrind == True: if "All heap blocks were freed" in error: msg += ", no memory leak" else: msg += ", memory leaks detected" - num_memleak = num_memleak + 1 + result.category = 'failed' + result.memleak = True result.status = msg - results.append(result) - - msg = f"{{ '{input}': {{ 'folder': '{input_folder}', status: \"{msg}\", 'walltime': '{walltime}' }} }}\n" - progress.write(msg) - progress.close() - failure.write(msg) - - # count the number of completed runs - num_completed = num_completed + 1 + record(result, walltime_norm=walltime_norm) test_id = test_id + 1 continue # if there is no ERROR in the output, but there is no Total wall time printed out - if "Total wall time" not in output: + if walltime is None: msg = f" failed, no Total wall time in the output.\n" print(msg) logger.info(msg) @@ -429,32 +505,13 @@ def iterate(lmp_binary, input_folder, input_list, config, results, progress_file logger.info(f"\n Output:\n{output}") logger.info(f"\n Error:\n{error}") - msg = f"{{ '{input}': {{ 'folder': '{input_folder}', 'status': 'failed, no Total wall time in the output, {error}', 'walltime': '{walltime}' }} }}\n" - progress.write(msg) - progress.close() - failure.write(msg) - - returncode = int(returncode) - if returncode == -1: - num_timeout = num_timeout + 1 - - num_error = num_error + 1 + result.category = 'error' + result.status = f"failed, no Total wall time in the output, {shorten(error)}" + result.message = shorten(error, maxlen=1000) + record(result) test_id = test_id + 1 continue - # NOTE: Total wall time could be 00:00:00 whereas Loop time is non-zero seconds - walltime_norm = 1.0 - for line in output.split('\n'): - if "Total wall time" in line: - walltime_str = line.split('time:')[1] - hms = walltime_str.split(':') - hours = float(hms[0]) - minutes = float(hms[1]) - seconds = float(hms[2]) - walltime = hours * 3600.0 + minutes * 60.0 + seconds - walltime_norm = float(walltime) / float(walltime_ref) - break - # if there is no Step or no Loop printed out if "Step" not in output or "Loop" not in output: msg = f" completed, but no Step nor Loop in the output.\n" @@ -464,12 +521,9 @@ def iterate(lmp_binary, input_folder, input_list, config, results, progress_file logger.info(f"\n Output:\n{output}") logger.info(f"\n Error:\n{error}") - msg = f"{{ '{input}': {{ 'folder': '{input_folder}', 'status': 'completed, but no Step nor Loop in the output.', 'walltime': '{walltime}', 'walltime_norm': '{walltime_norm}' }} }}\n" - progress.write(msg) - progress.close() - failure.write(msg) - - num_error = num_error + 1 + result.category = 'completed' + result.status = 'completed, but no Step nor Loop in the output' + record(result, walltime_norm=walltime_norm) test_id = test_id + 1 continue @@ -483,22 +537,20 @@ def iterate(lmp_binary, input_folder, input_list, config, results, progress_file logger.info(f" {output}") msg = "completed" - if 'valgrind' in config['mpiexec']: - if "All heap blocks were free" in error: + result.category = 'completed' + if use_valgrind == True: + if "All heap blocks were freed" in error: msg += ", no memory leak" else: msg += ", memory leaks detected" - num_memleak = num_memleak + 1 + result.category = 'failed' + result.memleak = True result.status = msg + f", error parsing {logfilename} into YAML" - results.append(result) - progress.write(f"{{ '{input}': {{ 'folder': '{input_folder}', 'status': '{result.status}', 'walltime': '{walltime}', 'walltime_norm': '{walltime_norm}' }} }}\n") - progress.close() - if verbose == True: print(result.status) - num_completed = num_completed + 1 + record(result, walltime_norm=walltime_norm) test_id = test_id + 1 continue @@ -512,12 +564,9 @@ def iterate(lmp_binary, input_folder, input_list, config, results, progress_file else: # the thermo_ref dictionary is empty logger.info(f" failed, error parsing the reference log file {thermo_ref_file}.") - result.status = "skipped numerical checks due to parsing the reference log file" - results.append(result) - progress.write(f"{{ '{input}': {{ 'folder': '{input_folder}', 'status': 'completed, numerical checks skipped, unsupported log file format', 'walltime': '{walltime}', 'walltime_norm': '{walltime_norm}' }} }}\n") - progress.close() - num_completed = num_completed + 1 - num_failed = num_failed + 1 + result.category = 'completed' + result.status = 'completed, numerical checks skipped, unsupported log file format' + record(result, walltime_norm=walltime_norm) test_id = test_id + 1 continue else: @@ -533,15 +582,9 @@ def iterate(lmp_binary, input_folder, input_list, config, results, progress_file else: # most likely to reach here if the reference log file does not exist logger.info(f" {thermo_ref_file} also does not exist in the working directory.") - result.status = "skipped due to missing the reference log file" - results.append(result) - - msg = f"{{ '{input}': {{ 'folder': '{input_folder}', 'status': 'completed, numerical checks skipped due to missing the reference log file', 'walltime': '{walltime}', 'walltime_norm': '{walltime_norm}' }} }}\n" - progress.write(msg) - progress.close() - failure.write(msg) - num_completed = num_completed + 1 - num_failed = num_failed + 1 + result.category = 'completed' + result.status = 'completed, numerical checks skipped due to missing the reference log file' + record(result, walltime_norm=walltime_norm) test_id = test_id + 1 continue @@ -552,12 +595,9 @@ def iterate(lmp_binary, input_folder, input_list, config, results, progress_file if num_runs != num_runs_ref: logger.info(f" ERROR: Number of runs in {logfilename} ({num_runs}) is different from that in the reference log ({num_runs_ref})." " Check README in the folder, possibly due to using mpirun with partitions or parsing the wrong reference log file.") + result.category = 'failed' result.status = "failed, incomplete runs" - results.append(result) - progress.write(f"{{ '{input}': {{ 'folder': '{input_folder}', 'status': '{result.status}', 'walltime': '{walltime}', 'walltime_norm': '{walltime_norm}' }} }}\n") - progress.close() - num_completed = num_completed + 1 - num_failed = num_failed + 1 + record(result, walltime_norm=walltime_norm) test_id = test_id + 1 continue @@ -569,12 +609,9 @@ def iterate(lmp_binary, input_folder, input_list, config, results, progress_file if num_fields != num_fields_ref: logger.info(f" failed, number of thermo colums in {logfilename} ({num_fields}) is different from that in the reference log ({num_fields_ref}) in the first run.") logger.info(f" Check both log files for more details.") + result.category = 'failed' result.status = "failed, mismatched columns in the log files" - results.append(result) - progress.write(f"{{ '{input}': {{ 'folder': '{input_folder}', 'status': '{result.status}', 'walltime': '{walltime}', 'walltime_norm': '{walltime_norm}' }} }}\n") - progress.close() - num_completed = num_completed + 1 - num_failed = num_failed + 1 + record(result, walltime_norm=walltime_norm) test_id = test_id + 1 continue @@ -673,12 +710,9 @@ def iterate(lmp_binary, input_folder, input_list, config, results, progress_file msg = f" mismatched columns in the log files after the first run. Check both log files for more details." print(msg) logger.info(msg) - result.status = "thermo checks failed due to mismatched log files after the first run" - results.append(result) - progress.write(f"{{ '{input}': {{ 'folder': '{input_folder}', 'status': '{result.status}', 'walltime': '{walltime}', 'walltime_norm': '{walltime_norm}' }} }}\n") - progress.close() - num_completed = num_completed + 1 - num_failed = num_failed + 1 + result.category = 'failed' + result.status = "failed, thermo checks skipped due to mismatched log files after the first run" + record(result, walltime_norm=walltime_norm) test_id = test_id + 1 continue @@ -687,16 +721,12 @@ def iterate(lmp_binary, input_folder, input_list, config, results, progress_file msg = f" mismatched num steps in the log files. Check both log files for more details." print(msg) logger.info(msg) - result.status = "thermo checks failed due to mismatched log files " - results.append(result) - progress.write(f"{{ '{input}': {{ 'folder': '{input_folder}', 'status': '{result.status}', 'walltime': '{walltime}', 'walltime_norm': '{walltime_norm}' }} }}\n") - progress.close() - num_completed = num_completed + 1 - num_failed = num_failed + 1 + result.category = 'failed' + result.status = "failed, thermo checks skipped due to mismatched number of steps in the log files" + record(result, walltime_norm=walltime_norm) test_id = test_id + 1 continue - result.status = "" if num_abs_failed > 0: msg = f" {num_abs_failed} abs diff checks failed." print(msg) @@ -714,56 +744,63 @@ def iterate(lmp_binary, input_folder, input_list, config, results, progress_file logger.info(msg) for out in failed_rel_output: logger.info(f" - {out}") - + if verbose == True: for out in failed_rel_output: print(f" - {out}") + result.checks = num_checks if num_abs_failed == 0 and num_rel_failed == 0: msg = f" all {num_checks} checks passed." print(msg) logger.info(msg) - - result.status = f" 'status': 'passed', 'abs_diff_failed': '{num_abs_failed}', 'rel_diff_failed': '{num_rel_failed}' " - - num_passed = num_passed + 1 + result.category = 'passed' + msg = "completed" else: - result.status = f" 'status': 'failed', 'abs_diff_failed': '{num_abs_failed}', 'rel_diff_failed': '{num_rel_failed}' " - num_failed = num_failed + 1 - - results.append(result) + result.category = 'failed' + result.message = '\n'.join(failed_abs_output + failed_rel_output) + msg = f"completed, {num_abs_failed} abs diff and {num_rel_failed} rel diff checks failed" # check if memleak detects from valgrind run (need to replace "mpirun" -> valgrind --leak-check=yes mpirun") - msg = "completed" if use_valgrind == True: if "All heap blocks were freed" in error: msg += ", no memory leak" else: msg += ", memory leaks detected" - num_memleak = num_memleak + 1 - - progress.write(f"{{ '{input}': {{ 'folder': '{input_folder}', 'status': '{msg}', 'failed_checks': {{ {result.status} }}, 'walltime': '{walltime}', 'walltime_norm': '{walltime_norm}' }} }}\n") - progress.close() - - # write to failure if there is any numerical failed check - if num_abs_failed > 0 or num_rel_failed > 0: - failure.write(f"{{ '{input}': {{ 'folder': '{input_folder}', 'status': '{msg}', 'failed_checks': '{{ {result.status} }}, 'walltime': '{walltime}', 'walltime_norm': '{walltime_norm}' }} }}\n") - - # count the number of completed runs - num_completed = num_completed + 1 + result.category = 'failed' + result.memleak = True + result.status = msg + + failed_checks = { 'num_checks': num_checks, + 'abs_diff_failed': num_abs_failed, + 'rel_diff_failed': num_rel_failed } + record(result, walltime_norm=walltime_norm, failed_checks=failed_checks) test_id = test_id + 1 - # close the failure file - failure.close() - - stat = { 'num_completed': num_completed, - 'num_passed': num_passed, - 'num_skipped': num_skipped, - 'num_error': num_error, - 'num_timeout': num_timeout, - 'num_failed': num_failed, - 'num_memleak': num_memleak, + # collect statistics over the results recorded in this call + stat = { 'num_completed': 0, + 'num_passed': 0, + 'num_skipped': 0, + 'num_error': 0, + 'num_timeout': 0, + 'num_failed': 0, + 'num_memleak': 0, } + for result in results[num_results_initial:]: + if result.category in ('passed', 'failed', 'completed'): + stat['num_completed'] += 1 + if result.category == 'passed': + stat['num_passed'] += 1 + elif result.category == 'failed': + stat['num_failed'] += 1 + elif result.category == 'error': + stat['num_error'] += 1 + elif result.category == 'skipped': + stat['num_skipped'] += 1 + if result.timeout: + stat['num_timeout'] += 1 + if result.memleak: + stat['num_memleak'] += 1 return stat # HELPER FUNCTIONS @@ -914,7 +951,8 @@ def get_lammps_build_configuration(lmp_binary): - cmd_str: the complete command used to launch LAMMPS with the input - stdout: stdout of the process - stderr: stderr of the process - - errorcode: error code returned by the process + - returncode: error code returned by the process + - timedout: whether the run was killed after exceeding the timeout - logfilename: the log file name for the given input to avoid duplicate writes to log.lammps if multiple workers execute in the same folder ''' @@ -937,28 +975,40 @@ def execute(lmp_binary, config, input_file_name, generate_ref=False): if config['timeout'] != "": timeout = int(config['timeout']) + # launch the run in its own process group, so that on a timeout the whole group + # (the shell, mpirun, and the LAMMPS processes) can be killed; with subprocess.run() + # only the shell would be killed, leaving orphaned LAMMPS processes behind + p = subprocess.Popen(cmd_str, shell=True, text=True, stdout=subprocess.PIPE, + stderr=subprocess.PIPE, start_new_session=True) try: - p = subprocess.run(cmd_str, shell=True, text=True, capture_output=True, timeout=timeout) - status = { + stdout, stderr = p.communicate(timeout=timeout) + status = { 'cmd_str': cmd_str, - 'stdout': p.stdout, - 'stderr': p.stderr, + 'stdout': stdout, + 'stderr': stderr, 'returncode': p.returncode, + 'timedout': False, 'logfilename': logfilename, } return status except subprocess.TimeoutExpired: + try: + os.killpg(os.getpgid(p.pid), signal.SIGKILL) + except (ProcessLookupError, PermissionError): + p.kill() + p.communicate() msg = f" Timeout for: {cmd_str} ({timeout}s expired)" logger.info(msg) print(msg) error_str = f"timeout ({timeout}s expired)" - status = { + status = { 'cmd_str': cmd_str, 'stdout': "", 'stderr': error_str, 'returncode': -1, + 'timedout': True, 'logfilename': logfilename, } return status @@ -1063,75 +1113,6 @@ def divide_into_N(original_list, N): b.append(l) return b -''' - process the #REG markers in an input script, add/replace with what follows each marker - - inputFileName: LAMMPS input file with comments #REG:ADD and #REG:SUB as markers - outputFileName: modified input file ready for testing -''' -def process_markers(inputFileName, outputFileName): - # read in the script - with open(inputFileName, 'r') as file: - data = file.read() - - # replace #REG:ADD with empty string (i.e. adding the text at the end of the line) - data = data.replace("#REG:ADD", "") - - # replace the line contaning #REG:SUB with a line with the text that follows this marker - data = data.splitlines() - separator="#REG:SUB" - out = [] - for line in data: - s = line.split(separator) - if len(s) < 2: - out.append(line) - else: - out.append(s[1]) - - # write data to the new script - with open(outputFileName, 'w') as file: - for line in out: - file.write(line + "\n") - - -''' - attempt to insert the #REG markers before each run command - #REG:ADD thermo 10 - #REG:ADD thermo_style yaml - - inputFileName: provided LAMMPS input file - outputFileName: modified input file ready for testing -''' -def generate_markers(inputFileName, outputFileName): - # read in the script - with open(inputFileName, 'r') as file: - data = file.read() - - lines = data.splitlines() - out = [] - for line in lines: - s = line.split() - if len(s) > 0: - if s[0] == "run": - out.append(" #REG:ADD thermo 10") - out.append(" #REG:ADD thermo_style yaml") - out.append(line) - - # write data to the new script - with open(outputFileName, 'w') as file: - for line in out: - file.write(line + "\n") - -''' - check if any input script has any #REG markers -''' -def has_markers(inputFileName): - with open(inputFileName) as f: - if '#REG' in f.read(): - return True - return False - - ''' Main entry ''' @@ -1365,10 +1346,8 @@ def has_markers(inputFileName): with open(filename, "w") as f: for folder in list_input: # count the number of input scripts in each folder - cmd_str = f"ls {folder}/in.* | wc -l" - p = subprocess.run(cmd_str, shell=True, text=True, capture_output=True) - num_input = p.stdout.split('\n')[0] - f.write(folder + ' ' + num_input + '\n') + num_input = len(glob.glob(f"{folder}/in.*")) + f.write(f"{folder} {num_input}\n") f.close() idx = idx + 1 @@ -1488,9 +1467,7 @@ def has_markers(inputFileName): all_results = [] # save current working dir - p = subprocess.run("pwd", shell=True, text=True, capture_output=True) - pwd = p.stdout.split('\n')[0] - pwd = os.path.abspath(pwd) + pwd = os.getcwd() print("\nWorking directory: " + pwd) progress_file_abs = pwd + "/" + progress_file @@ -1503,6 +1480,8 @@ def has_markers(inputFileName): progress = open(progress_file_abs, "r") last_progress = yaml.load(progress, Loader=Loader) progress.close() + if last_progress is None: + last_progress = {} except Exception: print(f" Cannot open progress file {progress_file_abs} to resume, rerun all the tests") @@ -1550,10 +1529,7 @@ def has_markers(inputFileName): logger.info("Entering " + directory) os.chdir(directory) - cmd_str = "ls in.*" - p = subprocess.run(cmd_str, shell=True, text=True, capture_output=True) - all_input_list = p.stdout.split('\n') - all_input_list.remove('') + all_input_list = sorted(glob.glob("in.*")) # if the list of example input scripts is provided # if an input script is not in the list, then remove it from input_list @@ -1621,10 +1597,11 @@ def has_markers(inputFileName): # print notice to GitHub if 'GITHUB_STEP_SUMMARY' in os.environ: - with open(os.environ.get('GITHUB_STEP_SUMMARY'), 'w') as f: - print(f"Skipped: {skipped_tests} Error: {error_tests} Timeout: {timeout_tests} Failed: {failed_tests} Completed: {completed_tests}", file=f) + with open(os.environ.get('GITHUB_STEP_SUMMARY'), 'a') as f: + print(f"Total: {total_tests} Skipped: {skipped_tests} Error: {error_tests} Timeout: {timeout_tests}" + f" Failed: {failed_tests} Passed: {passed_tests} Completed: {completed_tests}", file=f) - if memleak_tests < completed_tests and 'valgrind' in config['mpiexec']: + if 'valgrind' in config['mpiexec']: msg += f" - memory leak detected : {memleak_tests}\n" if passed_tests <= completed_tests: msg += f" - numerical tests passed: {passed_tests}\n" @@ -1636,19 +1613,14 @@ def has_markers(inputFileName): print(msg) - # optional: need to check if junit_xml packaged is already installed in the env - # generate a JUnit XML file - with open(output_file, 'w') as f: - test_cases = [] - for result in all_results: - #print(f"{result.name}: {result.status}") - case = TestCase(name=result.name, classname=result.name) - if "passed" not in result.status: - case.add_failure_info(message=result.status) - if "skipped" in result.status: - case.add_skipped_info(message="Test was skipped.") - test_cases.append(case) - - current_timestamp = datetime.datetime.now() - ts = TestSuite(f"{configFileName}", test_cases, timestamp=current_timestamp) - TestSuite.to_file(f, [ts], prettyprint=True) + # generate a JUnit XML file with all test results for downstream reporting + properties = { + 'operating_system': operating_system, + 'git_info': GitInfo, + 'compiler': compiler_full, + 'compile_flags': compile_flags, + 'config_file': os.path.basename(configFileName), + 'lmp_binary': lmp_binary, + } + write_junit_xml(output_file, all_results, suite_name=os.path.basename(configFileName), + properties=properties) From 3f72b3955a43a54a824ac34faf9d28d11e18bfee Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 3 Jul 2026 13:06:19 -0400 Subject: [PATCH 037/116] Test per-atom energy tallying without virial in the pair style driver Add eatom_only and eatom_only_omp subtests to the pair style tester: they invoke the pair style directly with per-atom energy tallying as the only request besides the global energy (no virial at all) and compare the resulting per-atom energies, including the ghost-atom reduction, against a reference invocation with full virial tallying on the identical configuration. The regular driver runs cannot reach this code path: their thermo output schedules the virial on every sampled step. Styles that maintain tally bookkeeping only when the virial is requested then use stale or uninitialized atom indices, as the two recently fixed TIP4P OpenMP variants did. With those fixes reverted the new subtests detect the bug for all six affected TIP4P pair style configurations (segfault or per-atom mismatch); with the fixes all 262 pair style tests pass. The direct invocation is used because a sum rule over dynamics runs cannot detect the misdistribution: the tally distributes exactly the pair energy for any in-range stale index list. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01YNvuaNpJNkbCKaAE8ngPQv --- unittest/force-styles/test_pair_style.cpp | 91 +++++++++++++++++++++++ 1 file changed, 91 insertions(+) diff --git a/unittest/force-styles/test_pair_style.cpp b/unittest/force-styles/test_pair_style.cpp index e5baeac606d..a6e05c51d96 100644 --- a/unittest/force-styles/test_pair_style.cpp +++ b/unittest/force-styles/test_pair_style.cpp @@ -30,6 +30,7 @@ #include "kspace.h" #include "modify.h" #include "pair.h" +#include "update.h" #include @@ -839,6 +840,96 @@ static void run_kokkos_test(LAMMPS::argv &args) if (!verbose) ::testing::internal::GetCapturedStdout(); } + +/* ---------------------------------------------------------------------- + collect per-atom pair energies from a direct pair->compute() call + with explicit energy/virial flags on the current configuration, + including the ghost atom reduction done by compute pe/atom. styles + must produce the same per-atom energies whether or not the virial is + tallied; styles that maintain their tally bookkeeping only when the + virial is requested (as the TIP4P OpenMP variants did) assign + per-atom energies to stale or invalid atom indices otherwise, which + the comparison against the with-virial reference detects +------------------------------------------------------------------------- */ + +std::vector eatom_direct(LAMMPS *lmp, bool with_virial) +{ + // satisfy the tally timestamp checks of pair->compute consumers + + lmp->update->eflag_atom = lmp->update->ntimestep; + lmp->update->eflag_global = lmp->update->ntimestep; + int vflag = 0; + if (with_virial) { + vflag = VIRIAL_PAIR | VIRIAL_ATOM; + lmp->update->vflag_atom = lmp->update->ntimestep; + lmp->update->vflag_global = lmp->update->ntimestep; + } + lmp->force->pair->compute(ENERGY_GLOBAL | ENERGY_ATOM, vflag); + + auto *pea = lmp->modify->get_compute_by_id("peaonly"); + EXPECT_NE(pea, nullptr); + pea->compute_peratom(); + pea->invoked_peratom = -1; // force a fresh evaluation on the next call + + const int nlocal = lmp->atom->nlocal; + const tagint *tag = lmp->atom->tag; + std::vector eatom(nlocal, 0.0); + for (int i = 0; i < nlocal; i++) + eatom[tag[i] - 1] = pea->vector_atom[i]; + return eatom; +} + +void eatom_only_test(LAMMPS::argv args, const TestConfig &cfg) +{ + ::testing::internal::CaptureStdout(); + LAMMPS *lmp = nullptr; + try { + lmp = init_lammps(args, cfg, true); + } catch (std::exception &e) { + std::string output = ::testing::internal::GetCapturedStdout(); + if (verbose) std::cout << output; + FAIL() << e.what(); + } + std::string output = ::testing::internal::GetCapturedStdout(); + if (verbose) std::cout << output; + if (!lmp) GTEST_SKIP(); + + ::testing::internal::CaptureStdout(); + lmp->input->one("compute peaonly all pe/atom pair"); + lmp->input->one("run 0 post no"); + auto reference = eatom_direct(lmp, true); + auto eonly = eatom_direct(lmp, false); + cleanup_lammps(lmp, cfg); + ::testing::internal::GetCapturedStdout(); + + ASSERT_EQ(reference.size(), eonly.size()); + const double epsilon = cfg.epsilon; + for (std::size_t i = 0; i < reference.size(); i++) + EXPECT_NEAR(eonly[i], reference[i], (fabs(reference[i]) + 1.0) * epsilon * 10.0) + << "per-atom energy for atom " << i + 1 + << " differs between tallying with and without virial"; +} + +TEST(PairStyle, eatom_only) +{ + if (test_config.skip_tests.count(test_info_->name())) GTEST_SKIP(); + + LAMMPS::argv args = {"PairStyle", "-log", "none", "-echo", "screen", "-nocite"}; + eatom_only_test(args, test_config); +} + +TEST(PairStyle, eatom_only_omp) +{ + if (!Info::has_package("OPENMP")) GTEST_SKIP(); + if (test_config.skip_tests.count(test_info_->name())) GTEST_SKIP(); + if (test_config.skip_tests.count("omp")) GTEST_SKIP(); + + LAMMPS::argv args = {"PairStyle", "-log", "none", "-echo", "screen", "-nocite", + "-pk", "omp", "4", "-sf", "omp"}; + if (test_config.has_tag("single_thread")) args[8] = "1"; + eatom_only_test(args, test_config); +} + TEST(PairStyle, kokkos_omp) { if (!Info::has_package("KOKKOS")) GTEST_SKIP(); From f3ede6d5b43357f5d17732b4fe7da00dca65dbad Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 3 Jul 2026 13:10:10 -0400 Subject: [PATCH 038/116] Add DEM regression test for rim contacts with an open-side region cylinder A sphere approaches the lower cap rim of a region cylinder with an open curved surface ('open 3') from outside the radius and bounces off it via fix wall/gran/region. Before the recent region cylinder fix the in-plane contact point coordinates were uninitialized for this configuration and the wall force acted toward a garbage point; with the fix reverted both newton on/off variants of this test fail against the recorded trajectory. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01YNvuaNpJNkbCKaAE8ngPQv --- .../granular/tests/dem04-opencyl-rim-3d.yaml | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 unittest/granular/tests/dem04-opencyl-rim-3d.yaml diff --git a/unittest/granular/tests/dem04-opencyl-rim-3d.yaml b/unittest/granular/tests/dem04-opencyl-rim-3d.yaml new file mode 100644 index 00000000000..06e574f94c4 --- /dev/null +++ b/unittest/granular/tests/dem04-opencyl-rim-3d.yaml @@ -0,0 +1,63 @@ +--- +lammps_version: 30 Mar 2026 +tags: granular +date_generated: Fri Jul 3 13:07:49 2026 +epsilon: 1e-10 +skip_tests: +prerequisites: | + atom sphere + pair granular +pre_commands: | + units lj + dimension 3 + boundary f f f + atom_style sphere + region box block -3.0 3.0 -3.0 3.0 -3.0 3.0 units box + create_box 1 box + create_atoms 1 single 1.45 0.0 0.25 units box + set group all diameter ${diam} density ${dens} + velocity all set ${vx0} 0.0 ${vz0} + comm_modify vel yes + neighbor 0.3 bin + timestep 2.0e-4 +post_commands: | + region cyl cylinder z 0.0 0.0 ${rad} ${zlo} ${zhi} units box open 3 + fix wreg all wall/gran/region granular hooke ${knorm} ${en} tangential linear_history ${kt} ${gt} ${xmu} damping coeff_restitution region cyl + fix integr all nve/sphere +input_file: +natoms: 1 +variables: | + diam 1.0 + dens 1.0 + knorm 1.0e4 + en 0.9 + kt 2857.0 + gt 50.0 + xmu 0.5 + rad 1.0 + zlo 0.0 + zhi 2.0 + vx0 -0.43 + vz0 -0.26 +pair_style: granular +pair_coeff: | + * * hooke ${knorm} ${en} tangential linear_history ${kt} ${gt} ${xmu} damping coeff_restitution +run_segments: |- + 600 600 800 +run_pos: |2 + 0 1 1.4649172516992330e+00 0.0000000000000000e+00 2.5590025675929823e-01 + 1 1 1.5133734660423841e+00 0.0000000000000000e+00 2.8047164415352149e-01 + 2 1 1.5779817518332522e+00 0.0000000000000000e+00 3.1323349401248585e-01 +run_vel: |2 + 0 1 4.0380178619273527e-01 0.0000000000000000e+00 2.0476156161839568e-01 + 1 1 4.0380178619273527e-01 0.0000000000000000e+00 2.0476156161839568e-01 + 2 1 4.0380178619273527e-01 0.0000000000000000e+00 2.0476156161839568e-01 +run_torque: |2 + 0 1 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 + 1 1 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 + 2 1 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +run_omega: |2 + 0 1 0.0000000000000000e+00 1.3665989122173849e-02 0.0000000000000000e+00 + 1 1 0.0000000000000000e+00 1.3665989122173849e-02 0.0000000000000000e+00 + 2 1 0.0000000000000000e+00 1.3665989122173849e-02 0.0000000000000000e+00 +... From dc33eb51fed7e726f773015ddc35d4bb34c5198b Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 3 Jul 2026 17:47:42 -0400 Subject: [PATCH 039/116] simplify demo modeling file (we are on 64-bit Linux) --- tools/coverity/coverity_model.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/coverity/coverity_model.cpp b/tools/coverity/coverity_model.cpp index 11ad1488ac7..95bc33628e3 100644 --- a/tools/coverity/coverity_model.cpp +++ b/tools/coverity/coverity_model.cpp @@ -25,14 +25,14 @@ goes inert. ------------------------------------------------------------------------- */ -#include + namespace LAMMPS_NS { // Must match the typedef in src/lmptype.h for the analyzed build. // The Coverity Scan build uses -D LAMMPS_SIZES=SMALLBIG (see // .github/workflows/coverity.yml), where bigint == int64_t. -typedef int64_t bigint; +typedef long int bigint; /* ---------------------------------------------------------------------- Custom memory allocator -- src/memory.h From 639b07387a61caab36cb77fb03954214c729f8c1 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 3 Jul 2026 20:30:06 -0400 Subject: [PATCH 040/116] Fix eatom_only subtest failure for pair styles without per-atom virial The reference invocation of the new eatom_only subtests requested VIRIAL_PAIR | VIRIAL_ATOM, but per-atom virial support is not universal: pair style rann rejects it (and any non-fdotr global mode) with an error, and the exception escaped the stdout capture section, which aborts the whole test program at the next captured section. This failed the ManybodyPairStyle:rann test in CI. Request only the global virial in the mode the integrator would pick for the style (VIRIAL_FDOTR, or VIRIAL_PAIR when the style sets no_virial_fdotr_compute), which every style supports and which still selects the with-virial template paths. Wrap the capture section in a try/catch that closes the capturer before failing so a throwing style can never abort the remaining tests. The TIP4P negative control still segfaults with the fix reverted; manybody (65), molecular and atomic (262) pair suites all pass. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01YNvuaNpJNkbCKaAE8ngPQv --- unittest/force-styles/test_pair_style.cpp | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/unittest/force-styles/test_pair_style.cpp b/unittest/force-styles/test_pair_style.cpp index a6e05c51d96..583534d77d9 100644 --- a/unittest/force-styles/test_pair_style.cpp +++ b/unittest/force-styles/test_pair_style.cpp @@ -858,10 +858,11 @@ std::vector eatom_direct(LAMMPS *lmp, bool with_virial) lmp->update->eflag_atom = lmp->update->ntimestep; lmp->update->eflag_global = lmp->update->ntimestep; + // request the same global-virial mode the integrator would use; + // per-atom virial support is not universal (e.g. pair rann) int vflag = 0; if (with_virial) { - vflag = VIRIAL_PAIR | VIRIAL_ATOM; - lmp->update->vflag_atom = lmp->update->ntimestep; + vflag = lmp->force->pair->no_virial_fdotr_compute ? VIRIAL_PAIR : VIRIAL_FDOTR; lmp->update->vflag_global = lmp->update->ntimestep; } lmp->force->pair->compute(ENERGY_GLOBAL | ENERGY_ATOM, vflag); @@ -894,11 +895,21 @@ void eatom_only_test(LAMMPS::argv args, const TestConfig &cfg) if (verbose) std::cout << output; if (!lmp) GTEST_SKIP(); + // exception safety matters here: leaving the capturer active on a + // throw aborts the whole test program at the next captured section ::testing::internal::CaptureStdout(); - lmp->input->one("compute peaonly all pe/atom pair"); - lmp->input->one("run 0 post no"); - auto reference = eatom_direct(lmp, true); - auto eonly = eatom_direct(lmp, false); + std::vector reference, eonly; + try { + lmp->input->one("compute peaonly all pe/atom pair"); + lmp->input->one("run 0 post no"); + reference = eatom_direct(lmp, true); + eonly = eatom_direct(lmp, false); + } catch (std::exception &e) { + std::string errout = ::testing::internal::GetCapturedStdout(); + if (verbose) std::cout << errout; + cleanup_lammps(lmp, cfg); + FAIL() << e.what(); + } cleanup_lammps(lmp, cfg); ::testing::internal::GetCapturedStdout(); From 9f9080a960e5478efac104a48ed1e33e14f27cdc Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 4 Jul 2026 04:12:45 -0400 Subject: [PATCH 041/116] GRANSURF: fix realloc of wrong pointer when growing the model list Growing past the initial DELTAMODEL models reallocated the models array twice: the first srealloc passed models (instead of modeltypes) and assigned the result to modeltypes, and the second srealloc then reused the already-released models pointer. Growing the list thus corrupted the heap and cross-linked the two arrays. Found by Coverity Scan (CID 1663481) after modeling the custom allocator. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01EQzrZAwqmkabYN65PkjAkX --- src/GRANSURF/fix_surface_global.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/GRANSURF/fix_surface_global.cpp b/src/GRANSURF/fix_surface_global.cpp index 232350e7801..05abdf72d8d 100644 --- a/src/GRANSURF/fix_surface_global.cpp +++ b/src/GRANSURF/fix_surface_global.cpp @@ -144,7 +144,7 @@ FixSurfaceGlobal::FixSurfaceGlobal(LAMMPS *lmp, int narg, char **arg) : if (nmodel == maxmodel) { maxmodel += DELTAMODEL; modeltypes = (ModelTypes *) - memory->srealloc(models,maxmodel*sizeof(ModelTypes),"surf/global:modeltypes"); + memory->srealloc(modeltypes,maxmodel*sizeof(ModelTypes),"surf/global:modeltypes"); models = (Granular_NS::GranularModel **) memory->srealloc(models,maxmodel*sizeof(Granular_NS::GranularModel *), "surf/global:models"); From a1811a87b1f7bc9b052fa34dd76ff1c9595737d9 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 4 Jul 2026 04:12:46 -0400 Subject: [PATCH 042/116] MANYBODY: avoid out-of-bounds read in pair local/density single() When an LD potential applies to neither of the two atom types, the index selecting which accumulated density to read was left over from the previous loop iteration (or uninitialized on the first one), so LD[k][index] could read out of bounds. Such potentials contribute nothing to energy or force, so skip them. Coverity CID 1663445. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01EQzrZAwqmkabYN65PkjAkX --- src/MANYBODY/pair_local_density.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/MANYBODY/pair_local_density.cpp b/src/MANYBODY/pair_local_density.cpp index f0968d095b9..411f357bd1b 100644 --- a/src/MANYBODY/pair_local_density.cpp +++ b/src/MANYBODY/pair_local_density.cpp @@ -483,7 +483,9 @@ double PairLocalDensity::single(int /* i */, int /* j */, int itype, int jtype, } for (k = 0; k < nLD; k++) { - if (a[k][itype]) index = 1; + // this LD potential contributes nothing for this pair of atom types + if (!a[k][itype] && !a[k][jtype]) continue; + index = 1; if (a[k][jtype]) index = 2; if (LD[k][index] <= rho_min[k]) { From 28afa88fe7498a1fb40fa3d25dd85de86bc43f32 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 4 Jul 2026 04:12:46 -0400 Subject: [PATCH 043/116] Return no contact from fully open regions instead of reading garbage A region cylinder with 'open 1 open 2 open 3' (or a block with all six faces open) has no surface left, but surface_exterior() still called add_contact() with coordinates no candidate-face branch had assigned. Return 0 (no contact) instead. Completes the open-face rim-contact fix; Coverity CID 1661299. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01EQzrZAwqmkabYN65PkjAkX --- src/region_block.cpp | 4 ++++ src/region_cylinder.cpp | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/src/region_block.cpp b/src/region_block.cpp index 56651bd8d44..5aade0208b2 100644 --- a/src/region_block.cpp +++ b/src/region_block.cpp @@ -429,6 +429,10 @@ int RegBlock::surface_exterior(double *x, double cutoff) mindist = dist; } } + + // with all six faces open there is no surface left to contact + + if (mindist == BIG) return 0; } add_contact(0, x, xp, yp, zp); diff --git a/src/region_cylinder.cpp b/src/region_cylinder.cpp index 5a8b8bdd435..2cf0376447e 100644 --- a/src/region_cylinder.cpp +++ b/src/region_cylinder.cpp @@ -459,6 +459,10 @@ int RegCylinder::surface_exterior(double *x, double cutoff) double xp, yp, zp; double dx, dr, dr2, d2, d2prev; + // with all three faces open there is no surface left to contact + + if (open_faces[0] && open_faces[1] && open_faces[2]) return 0; + // radius of curvature for granular // 0 for flat surfaces (infinite case), 2*radius for curved portion From 92cdf13a0f6cbda2af301f8c17c355e94a3127d0 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 4 Jul 2026 04:13:03 -0400 Subject: [PATCH 044/116] tools: fix logic, uninitialized-data, and error-path defects from Coverity - msi2lmp MakeLists.c: the class2 angle-angle debug listing used a bitwise & between a flag bit and a boolean, which is always 0; the block never ran (CID 1661187) - msi2lmp SearchAndFill.c: a malformed .frc line with no parameter at all replicated uninitialized memory into parameters[] (CID 1660994) - msi2lmp ReadMdfFile.c: terminate residue names copied with strncpy/memcpy of the full buffer size (CID 1662237), check fgets return before parsing an @molecule line (CID 1661119), drop a dead strtok assignment - binary2txt: check fopen of the output file, previously a read-only directory led to fprintf(NULL) (CID 1662796) - phonon green.cpp: null alpha/beta before the constructor's early error returns so the destructor does not destroy garbage pointers (CID 1662139) Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01EQzrZAwqmkabYN65PkjAkX --- tools/binary2txt.cpp | 6 ++++++ tools/msi2lmp/src/MakeLists.c | 2 +- tools/msi2lmp/src/ReadMdfFile.c | 12 +++++++++--- tools/msi2lmp/src/SearchAndFill.c | 3 ++- tools/phonon/green.cpp | 1 + 5 files changed, 19 insertions(+), 5 deletions(-) diff --git a/tools/binary2txt.cpp b/tools/binary2txt.cpp index 5671f31451b..e9b7308cbcf 100644 --- a/tools/binary2txt.cpp +++ b/tools/binary2txt.cpp @@ -84,6 +84,12 @@ int main(int narg, char **arg) strcpy(filetxt, arg[iarg]); strcat(filetxt, ".txt"); FILE *fptxt = fopen(filetxt, "w"); + if (!fptxt) { + printf("ERROR: Could not open %s for writing\n", filetxt); + delete[] filetxt; + fclose(fp); + return 1; + } delete[] filetxt; // detect newer format diff --git a/tools/msi2lmp/src/MakeLists.c b/tools/msi2lmp/src/MakeLists.c index f88c4395f3c..7276cd14c60 100644 --- a/tools/msi2lmp/src/MakeLists.c +++ b/tools/msi2lmp/src/MakeLists.c @@ -243,7 +243,7 @@ void MakeLists() } } - if ((forcefield & FF_TYPE_CLASS2) & (total_no_angle_angles > 0)) { + if ((forcefield & FF_TYPE_CLASS2) && (total_no_angle_angles > 0)) { fprintf(stderr,"Angleangle Types\n"); for (i=0; i < no_angleangle_types; i++) { diff --git a/tools/msi2lmp/src/ReadMdfFile.c b/tools/msi2lmp/src/ReadMdfFile.c index 253121d0018..a9057149ae1 100644 --- a/tools/msi2lmp/src/ReadMdfFile.c +++ b/tools/msi2lmp/src/ReadMdfFile.c @@ -73,7 +73,7 @@ void ReadMdfFile(void) at_end = 1; } else if (strncmp(line,"@column",7) == 0) { - temp_string = strtok(line,WHITESPACE); + strtok(line,WHITESPACE); col_no = strtok(NULL,WHITESPACE); col_name = strtok(NULL,WHITESPACE); if (strncmp(col_name,"charge",6) == 0) { @@ -91,6 +91,10 @@ void ReadMdfFile(void) exit(42); } sptr = fgets(line,MAX_LINE_LENGTH,MdfF); + if (sptr == NULL) { + printf("Trouble reading molecule - exiting\n"); + exit(43); + } status = get_molecule(line,connect_col_no,q_col_no,&atom_counter); if (status == 0) { printf("Trouble reading molecule - exiting\n"); @@ -135,7 +139,8 @@ void ReadMdfFile(void) for (n=0; n < no_molecules; n++) { j = 0; strncpy(molecule[n].residue[j].name, - atoms[molecule[n].start].residue_string,MAX_NAME); + atoms[molecule[n].start].residue_string,MAX_NAME-1); + molecule[n].residue[j].name[MAX_NAME-1] = '\0'; molecule[n].residue[j].start = molecule[n].start; for (i=molecule[n].start+1; i < molecule[n].end; i++) { @@ -144,7 +149,8 @@ void ReadMdfFile(void) molecule[n].residue[j].end = i; molecule[n].residue[++j].start = i; - memcpy(molecule[n].residue[j].name,atoms[i].residue_string,MAX_NAME); + memcpy(molecule[n].residue[j].name,atoms[i].residue_string,MAX_NAME-1); + molecule[n].residue[j].name[MAX_NAME-1] = '\0'; } } molecule[n].residue[j].end = molecule[n].end; diff --git a/tools/msi2lmp/src/SearchAndFill.c b/tools/msi2lmp/src/SearchAndFill.c index a26554aeaab..d94ec14e60a 100644 --- a/tools/msi2lmp/src/SearchAndFill.c +++ b/tools/msi2lmp/src/SearchAndFill.c @@ -169,8 +169,9 @@ void SearchAndFill(struct FrcFieldItem *item) for( i = 0; i < item->number_of_parameters; i++ ) { charptr = strtok(NULL, WHITESPACE); if(charptr == NULL) { + /* with no parameter read yet there is nothing to replicate */ for ( j = i; j < item->number_of_parameters; j++ ) - parameters[j] = parameters[j-i]; + parameters[j] = (i > 0) ? parameters[j-i] : 0.0; break; } else { parameters[i] = atof(charptr); diff --git a/tools/phonon/green.cpp b/tools/phonon/green.cpp index 63b820dd2cf..903abe86bac 100644 --- a/tools/phonon/green.cpp +++ b/tools/phonon/green.cpp @@ -45,6 +45,7 @@ Green::Green(const int ntm, const int sdim, const int niter, const double min, c ldos = lpdos; memory = new Memory(); + alpha = beta = NULL; if (natom < 1 || iatom < 0 || iatom >= natom){ printf("\nError: Wrong number of total atoms or wrong index of interested atom!\n"); return; From 44a99cca2bae71d56662557855378f7b57b62508 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 4 Jul 2026 04:13:03 -0400 Subject: [PATCH 045/116] PHONON: plug two block leaks and guard ferror in third_order The scratch block backing the first neighbortags table was overwritten by a second smalloc without being freed, and the block backing the firsttags table became unreachable when its row-pointer array was freed at the end of the function. Also skip the ferror check when no file was opened (no 'file' keyword), which dereferenced a null FILE pointer on rank 0 (CIDs 1663463, 1661320). Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01EQzrZAwqmkabYN65PkjAkX --- src/PHONON/third_order.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/PHONON/third_order.cpp b/src/PHONON/third_order.cpp index 5cee775fa38..6843883e165 100644 --- a/src/PHONON/third_order.cpp +++ b/src/PHONON/third_order.cpp @@ -452,7 +452,7 @@ void ThirdOrder::writeMatrix(double *dynmat, bigint i, int a, bigint j, int b) clearerr(fp); fwrite(&dynmat[0], sizeof(double), dynlen, fp); } - if (ferror(fp)) error->one(FLERR,"Error writing to file"); + if (fp && ferror(fp)) error->one(FLERR,"Error writing to file"); } @@ -778,6 +778,7 @@ void ThirdOrder::getNeighbortags() { } free (neighbortags); + memory->sfree(datarecv); nbytes = ((bigint) sizeof(bigint)) * sum; datarecv = (bigint *) memory->smalloc(nbytes, "thirdorder:firsttags"); nbytes = ((bigint) sizeof(bigint *)) * natoms; @@ -812,6 +813,7 @@ void ThirdOrder::getNeighbortags() { } } + memory->sfree(data); free (firsttags); free (ijnumproc); free (temptags); From f5ddca0548dcda6d00992a8a2c0311c77ee753b0 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 4 Jul 2026 04:14:09 -0400 Subject: [PATCH 046/116] coverity: model Kokkos::abort as noreturn Divisions guarded by Kokkos::abort in KOKKOS styles were still flagged as divide-by-zero because the analyzer does not treat the library's host/device-split inline as noreturn on every path. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01EQzrZAwqmkabYN65PkjAkX --- tools/coverity/coverity_model.cpp | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/tools/coverity/coverity_model.cpp b/tools/coverity/coverity_model.cpp index 11ad1488ac7..53143a66a35 100644 --- a/tools/coverity/coverity_model.cpp +++ b/tools/coverity/coverity_model.cpp @@ -85,3 +85,27 @@ void Memory::sfree(void *ptr) ------------------------------------------------------------------------- */ } // namespace LAMMPS_NS + +/* ---------------------------------------------------------------------- + Kokkos::abort -- external Kokkos library + + Kokkos::abort terminates execution, but its inline definition splits + into host and device branches and, depending on backend and version, + not every branch is annotated noreturn, so the analyzer continues on + paths that cannot be reached. Several KOKKOS styles guard divisions + with Kokkos::abort; without this model those guards are invisible and + the guarded divisions are reported as divide-by-zero (e.g. CIDs + 1663023, 1663121, 1663371, 1663376). This is library code we cannot + annotate, hence a model is appropriate. +------------------------------------------------------------------------- */ + +namespace Kokkos { + +void abort(const char *const message); + +void abort(const char *const) +{ + __coverity_panic__(); +} + +} // namespace Kokkos From 615083194444ebca63d73b0a20d1b8bbdfb90877 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 4 Jul 2026 04:21:28 -0400 Subject: [PATCH 047/116] Complete constructor member initialization flagged by the rescan The July 4 Coverity snapshot re-flagged one further uninitialized member per constructor that the first initialization pass fixed (the checker reports them one at a time). Also make the Grid2d/Grid3d constructor that defers initialize() to setup_grid() zero all counts the destructor iterates over, so destroying a never-setup grid is safe, and give region cone parse-state members safe defaults. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01EQzrZAwqmkabYN65PkjAkX --- src/APIP/pair_eam_apip.cpp | 1 + src/BOCS/compute_pressure_bocs.cpp | 1 + src/EXTRA-COMPUTE/compute_ave_sphere_atom.cpp | 1 + src/GRANULAR/pair_granular.cpp | 1 + src/ML-RUNNER/pair_runner.cpp | 1 + src/OPENMP/thr_data.cpp | 3 ++- src/REAXFF/fix_qeq_reaxff.cpp | 3 +++ src/REAXFF/fix_qtpie_reaxff.cpp | 1 + src/comm_tiled.cpp | 2 ++ src/dump_custom.cpp | 2 ++ src/grid2d.cpp | 11 +++++++++++ src/grid3d.cpp | 11 +++++++++++ src/my_pool_chunk.cpp | 1 + src/npair.cpp | 1 + src/region_cone.cpp | 5 +++++ 15 files changed, 44 insertions(+), 1 deletion(-) diff --git a/src/APIP/pair_eam_apip.cpp b/src/APIP/pair_eam_apip.cpp index 5734d88b180..9fbdbb91316 100644 --- a/src/APIP/pair_eam_apip.cpp +++ b/src/APIP/pair_eam_apip.cpp @@ -73,6 +73,7 @@ PairEAMAPIP::PairEAMAPIP(LAMMPS *lmp) : Pair(lmp) lambda_thermostat = true; lambda_la = true; + cutforcesq = 0.0; } /* ---------------------------------------------------------------------- diff --git a/src/BOCS/compute_pressure_bocs.cpp b/src/BOCS/compute_pressure_bocs.cpp index de1ffb86dc3..cc146c9fbdc 100644 --- a/src/BOCS/compute_pressure_bocs.cpp +++ b/src/BOCS/compute_pressure_bocs.cpp @@ -121,6 +121,7 @@ ComputePressureBocs::ComputePressureBocs(LAMMPS *lmp, int narg, char **arg) : splines = nullptr; spline_length = 0; + temperature = nullptr; } /* ---------------------------------------------------------------------- */ diff --git a/src/EXTRA-COMPUTE/compute_ave_sphere_atom.cpp b/src/EXTRA-COMPUTE/compute_ave_sphere_atom.cpp index aa2cc622df9..183b84b0e90 100644 --- a/src/EXTRA-COMPUTE/compute_ave_sphere_atom.cpp +++ b/src/EXTRA-COMPUTE/compute_ave_sphere_atom.cpp @@ -62,6 +62,7 @@ ComputeAveSphereAtom::ComputeAveSphereAtom(LAMMPS *lmp, int narg, char **arg) : comm_forward = 3; nmax = 0; + volume = 0.0; } /* ---------------------------------------------------------------------- */ diff --git a/src/GRANULAR/pair_granular.cpp b/src/GRANULAR/pair_granular.cpp index d4f2b804c23..4da1377614a 100644 --- a/src/GRANULAR/pair_granular.cpp +++ b/src/GRANULAR/pair_granular.cpp @@ -83,6 +83,7 @@ PairGranular::PairGranular(LAMMPS *lmp) : Pair(lmp), fix_rigid(nullptr) id_dummy = utils::strdup(std::string("NEIGH_HISTORY_GRANULAR_DUMMY") + std::to_string(instance_me)); id_history = utils::strdup(std::string("NEIGH_HISTORY_GRANULAR") + std::to_string(instance_me)); + cutoff_global = -1.0; fix_history = nullptr; fix_dummy = dynamic_cast(modify->add_fix(fmt::format("{} all DUMMY", id_dummy))); } diff --git a/src/ML-RUNNER/pair_runner.cpp b/src/ML-RUNNER/pair_runner.cpp index ca5a6811764..c7262ba2856 100644 --- a/src/ML-RUNNER/pair_runner.cpp +++ b/src/ML-RUNNER/pair_runner.cpp @@ -167,6 +167,7 @@ PairRuNNer::PairRuNNer(LAMMPS *lmp) : // variable for output using pair compute nextra = 0; pvector = nullptr; + num_committee_members = 0; if (atom->natoms > MAXSMALLINT / 4) error->all(FLERR, "Too many total atoms"); } diff --git a/src/OPENMP/thr_data.cpp b/src/OPENMP/thr_data.cpp index 72ab9acf370..ecc6442e5c4 100644 --- a/src/OPENMP/thr_data.cpp +++ b/src/OPENMP/thr_data.cpp @@ -29,7 +29,8 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ ThrData::ThrData(int tid, Timer *t) : - cvatom_pair(nullptr), cvatom_angle(nullptr), cvatom_dihed(nullptr), cvatom_imprp(nullptr), + vatom_pair(nullptr), vatom_bond(nullptr), vatom_angle(nullptr), vatom_dihed(nullptr), + vatom_imprp(nullptr), vatom_kspce(nullptr), cvatom_pair(nullptr), cvatom_angle(nullptr), cvatom_dihed(nullptr), cvatom_imprp(nullptr), _f(nullptr), _torque(nullptr), _erforce(nullptr), _de(nullptr), _drho(nullptr), _mu(nullptr), _lambda(nullptr), _rhoB(nullptr), _D_values(nullptr), _rho(nullptr), _fp(nullptr), _rho1d(nullptr), _drho1d(nullptr), _rho1d_6(nullptr), _drho1d_6(nullptr), _tid(tid), _timer(t) diff --git a/src/REAXFF/fix_qeq_reaxff.cpp b/src/REAXFF/fix_qeq_reaxff.cpp index d4c5a7ea2ec..1aa4a9ea9c4 100644 --- a/src/REAXFF/fix_qeq_reaxff.cpp +++ b/src/REAXFF/fix_qeq_reaxff.cpp @@ -151,6 +151,9 @@ FixQEqReaxFF::FixQEqReaxFF(LAMMPS *lmp, int narg, char **arg) : reaxff = dynamic_cast(force->pair_match("^reaxff",0)); s_hist = t_hist = nullptr; + H.cap = H.n = H.m = 0; + H.start = H.end = nullptr; + H.entries = nullptr; atom->add_callback(Atom::GROW); } diff --git a/src/REAXFF/fix_qtpie_reaxff.cpp b/src/REAXFF/fix_qtpie_reaxff.cpp index fbd6381e4a4..356b331cfda 100644 --- a/src/REAXFF/fix_qtpie_reaxff.cpp +++ b/src/REAXFF/fix_qtpie_reaxff.cpp @@ -154,6 +154,7 @@ FixQtpieReaxFF::FixQtpieReaxFF(LAMMPS *lmp, int narg, char **arg) : reaxff = dynamic_cast(force->pair_match("^reaxff",0)); s_hist = t_hist = nullptr; + dist_cutoff_sq = 0.0; atom->add_callback(Atom::GROW); } diff --git a/src/comm_tiled.cpp b/src/comm_tiled.cpp index a42aa87356a..ad5ac6b7cf1 100644 --- a/src/comm_tiled.cpp +++ b/src/comm_tiled.cpp @@ -59,6 +59,7 @@ CommTiled::CommTiled(LAMMPS *lmp) : init_pointers(); init_buffers_flag = 0; maxswap = 0; + dimension = 3; } /* ---------------------------------------------------------------------- */ @@ -76,6 +77,7 @@ CommTiled::CommTiled(LAMMPS * /*lmp*/, Comm *oldcomm) : Comm(*oldcomm) init_pointers(); init_buffers_flag = 0; maxswap = 0; + dimension = 3; } /* ---------------------------------------------------------------------- */ diff --git a/src/dump_custom.cpp b/src/dump_custom.cpp index 09aa231ef83..745dcd54138 100644 --- a/src/dump_custom.cpp +++ b/src/dump_custom.cpp @@ -164,6 +164,8 @@ DumpCustom::DumpCustom(LAMMPS *lmp, int narg, char **arg) : cols += earg[iarg]; } columns_default = utils::strdup(cols); + + nchoose = 0; } /* ---------------------------------------------------------------------- */ diff --git a/src/grid2d.cpp b/src/grid2d.cpp index 67c5e44b64d..3561dca7e77 100644 --- a/src/grid2d.cpp +++ b/src/grid2d.cpp @@ -79,6 +79,15 @@ Grid2d::Grid2d(LAMMPS *lmp, MPI_Comm gcomm, int gnx, int gny) : // layout_grid = how this grid instance is distributed across procs // depends on comm->layout at time this Grid2d instance is created + // the destructor may run before setup_grid() calls initialize(); + // null all counts it iterates over + + nswap = maxswap = 0; + nsend = nrecv = ncopy = 0; + nsend_remap = nrecv_remap = self_remap = 0; + copy_remap.npack = copy_remap.nunpack = 0; + copy_remap.packlist = copy_remap.unpacklist = nullptr; + layout_grid = comm->layout; } @@ -431,6 +440,8 @@ void Grid2d::initialize() nsend_remap = nrecv_remap = self_remap = 0; send_remap = nullptr; recv_remap = nullptr; + copy_remap.npack = copy_remap.nunpack = 0; + copy_remap.packlist = copy_remap.unpacklist = nullptr; // store info about Comm decomposition needed for remap operation // two Grid instances will exist for duration of remap diff --git a/src/grid3d.cpp b/src/grid3d.cpp index 432dae39949..1e9e787500b 100644 --- a/src/grid3d.cpp +++ b/src/grid3d.cpp @@ -81,6 +81,15 @@ Grid3d::Grid3d(LAMMPS *lmp, MPI_Comm gcomm, int gnx, int gny, int gnz) : // layout_grid = how this grid instance is distributed across procs // depends on comm->layout at time this Grid3d instance is created + // the destructor may run before setup_grid() calls initialize(); + // null all counts it iterates over + + nswap = maxswap = 0; + nsend = nrecv = ncopy = 0; + nsend_remap = nrecv_remap = self_remap = 0; + copy_remap.npack = copy_remap.nunpack = 0; + copy_remap.packlist = copy_remap.unpacklist = nullptr; + layout_grid = comm->layout; } @@ -481,6 +490,8 @@ void Grid3d::initialize() nsend_remap = nrecv_remap = self_remap = 0; send_remap = nullptr; recv_remap = nullptr; + copy_remap.npack = copy_remap.nunpack = 0; + copy_remap.packlist = copy_remap.unpacklist = nullptr; // store info about Comm decomposition needed for remap operation // two Grid instances will exist for duration of remap diff --git a/src/my_pool_chunk.cpp b/src/my_pool_chunk.cpp index f16bd184e83..d81a9b85ed7 100644 --- a/src/my_pool_chunk.cpp +++ b/src/my_pool_chunk.cpp @@ -63,6 +63,7 @@ MyPoolChunk::MyPoolChunk(int user_minchunk, int user_maxchunk, int user_nbin, pages = nullptr; whichbin = nullptr; npage = 0; + binsize = 0; errorflag = 0; if (minchunk <= 0 || minchunk > maxchunk) errorflag = 1; diff --git a/src/npair.cpp b/src/npair.cpp index 8498ee55173..cb63a5dba33 100644 --- a/src/npair.cpp +++ b/src/npair.cpp @@ -35,6 +35,7 @@ NPair::NPair(LAMMPS *lmp) : stencil_multi(nullptr) { last_build = -1; + flag_same_multi = nullptr; mycutneighsq = nullptr; molecular = atom->molecular; copymode = 0; diff --git a/src/region_cone.cpp b/src/region_cone.cpp index ad0fe5a46dd..6deabc9a8f5 100644 --- a/src/region_cone.cpp +++ b/src/region_cone.cpp @@ -39,6 +39,11 @@ RegCone::RegCone(LAMMPS *lmp, int narg, char **arg) : { options(narg - 9, &arg[9]); + // defaults, overwritten during parsing below + + radiuslo = radiushi = 0.0; + rlostyle = rhistyle = CONSTANT; + // check open face settings if (openflag) From 2bcd8ef584c9ad2a3eeb18b644e8fe2778b1e4e2 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 4 Jul 2026 04:21:29 -0400 Subject: [PATCH 048/116] More input validation and robustness guards from the Coverity rescan - modify.cpp: validate the size fields of fix info read from a restart file before passing them to new[] (CIDs 1661593, 1663498, 1661079) - universe.cpp: error out when a -reorder file is not a permutation of all ranks instead of using an unset MPI_Comm_split key (CID 1661135) - LEPTON styles: also cap the expression count read from a restart file, not just each expression length (CIDs 1661596/1661659/1662805/ 1662556) - SMTBQ: give the tail-cutting coefficients safe defaults so a table point beyond the (not yet triggered) cutting radius cannot use uninitialized coefficients (CIDs 1663439, 1663462) - APIP: split pairs_index[n_pairs++] = n_pairs into two statements for clarity; the C++17 result was correct but hard to read (CID 1662008) - fix granular/mdr: do not dereference a failed dynamic_cast when scanning wall/gran/region fixes (CID 1662526) - fix reaxff/species: repeated 'position' keyword leaked the previous filename buffer and file handle (CIDs 1663440, 1663450) Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01EQzrZAwqmkabYN65PkjAkX --- src/APIP/fix_lambda_la_csp_apip.cpp | 3 ++- src/GRANULAR/fix_granular_mdr.cpp | 2 +- src/LEPTON/angle_lepton.cpp | 2 +- src/LEPTON/bond_lepton.cpp | 2 +- src/LEPTON/dihedral_lepton.cpp | 2 +- src/LEPTON/pair_lepton.cpp | 2 +- src/REAXFF/fix_reaxff_species.cpp | 2 ++ src/SMTBQ/pair_smtbq.cpp | 6 +++--- src/modify.cpp | 5 +++++ src/universe.cpp | 3 ++- 10 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/APIP/fix_lambda_la_csp_apip.cpp b/src/APIP/fix_lambda_la_csp_apip.cpp index 132f3b3bc97..c2d4ce59dd9 100644 --- a/src/APIP/fix_lambda_la_csp_apip.cpp +++ b/src/APIP/fix_lambda_la_csp_apip.cpp @@ -457,7 +457,8 @@ void FixLambdaLACSPAPIP::pre_force_dyn_pairs() pairs_value[n_pairs] = delx * delx + dely * dely + delz * delz; pairs_j[n_pairs] = jj; pairs_k[n_pairs] = kk; - pairs_index[n_pairs++] = n_pairs; + pairs_index[n_pairs] = n_pairs; + n_pairs++; } } diff --git a/src/GRANULAR/fix_granular_mdr.cpp b/src/GRANULAR/fix_granular_mdr.cpp index 91a1bdba92b..7bc24252b06 100644 --- a/src/GRANULAR/fix_granular_mdr.cpp +++ b/src/GRANULAR/fix_granular_mdr.cpp @@ -152,7 +152,7 @@ void FixGranularMDR::setup_pre_force(int /*vflag*/) error->all(FLERR, Error::NOLASTLINE, "Fix wall/gran/region must use an MDR normal model when using an MDR pair model"); - norm_model2 = dynamic_cast(fix->model->normal_model); + norm_model2 = fix ? dynamic_cast(fix->model->normal_model) : nullptr; if (norm_model && norm_model2 && fabs(norm_model->get_emod() - norm_model2->get_emod()) > EPSILON) error->all( diff --git a/src/LEPTON/angle_lepton.cpp b/src/LEPTON/angle_lepton.cpp index f45982c4645..99071076570 100644 --- a/src/LEPTON/angle_lepton.cpp +++ b/src/LEPTON/angle_lepton.cpp @@ -358,7 +358,7 @@ void AngleLepton::read_restart(FILE *fp) } MPI_Bcast(&num, 1, MPI_INT, 0, world); MPI_Bcast(&maxlen, 1, MPI_INT, 0, world); - if ((num < 0) || (maxlen < 0) || (maxlen > 65536)) + if ((num < 0) || (num > 65536) || (maxlen < 0) || (maxlen > 65536)) error->all(FLERR, "Invalid expression data in restart file"); char *buf = new char[maxlen]; diff --git a/src/LEPTON/bond_lepton.cpp b/src/LEPTON/bond_lepton.cpp index 356d8003bd9..4c8b5599671 100644 --- a/src/LEPTON/bond_lepton.cpp +++ b/src/LEPTON/bond_lepton.cpp @@ -309,7 +309,7 @@ void BondLepton::read_restart(FILE *fp) } MPI_Bcast(&num, 1, MPI_INT, 0, world); MPI_Bcast(&maxlen, 1, MPI_INT, 0, world); - if ((num < 0) || (maxlen < 0) || (maxlen > 65536)) + if ((num < 0) || (num > 65536) || (maxlen < 0) || (maxlen > 65536)) error->all(FLERR, "Invalid expression data in restart file"); char *buf = new char[maxlen]; diff --git a/src/LEPTON/dihedral_lepton.cpp b/src/LEPTON/dihedral_lepton.cpp index f97cb3cd19a..cc74bf49c7f 100644 --- a/src/LEPTON/dihedral_lepton.cpp +++ b/src/LEPTON/dihedral_lepton.cpp @@ -452,7 +452,7 @@ void DihedralLepton::read_restart(FILE *fp) } MPI_Bcast(&num, 1, MPI_INT, 0, world); MPI_Bcast(&maxlen, 1, MPI_INT, 0, world); - if ((num < 0) || (maxlen < 0) || (maxlen > 65536)) + if ((num < 0) || (num > 65536) || (maxlen < 0) || (maxlen > 65536)) error->all(FLERR, "Invalid expression data in restart file"); char *buf = new char[maxlen]; diff --git a/src/LEPTON/pair_lepton.cpp b/src/LEPTON/pair_lepton.cpp index cefb8ba06a7..fa59dd4ecea 100644 --- a/src/LEPTON/pair_lepton.cpp +++ b/src/LEPTON/pair_lepton.cpp @@ -370,7 +370,7 @@ void PairLepton::read_restart(FILE *fp) } MPI_Bcast(&num, 1, MPI_INT, 0, world); MPI_Bcast(&maxlen, 1, MPI_INT, 0, world); - if ((num < 0) || (maxlen < 0) || (maxlen > 65536)) + if ((num < 0) || (num > 65536) || (maxlen < 0) || (maxlen > 65536)) error->all(FLERR, "Invalid expression data in restart file"); char *buf = new char[maxlen]; diff --git a/src/REAXFF/fix_reaxff_species.cpp b/src/REAXFF/fix_reaxff_species.cpp index d48c0cdcf15..7c0610048f3 100644 --- a/src/REAXFF/fix_reaxff_species.cpp +++ b/src/REAXFF/fix_reaxff_species.cpp @@ -294,12 +294,14 @@ FixReaxFFSpecies::FixReaxFFSpecies(LAMMPS *lmp, int narg, char **arg) : error->all(FLERR, iarg + 1, "Incompatible fix reaxff/species position frequency {}", posfreq); + delete[] filepos; filepos = new char[255]; strcpy(filepos, arg[iarg + 2]); if (strchr(filepos, '*')) { multipos = 1; } else { if (comm->me == 0) { + if (pos) fclose(pos); pos = fopen(filepos, "w"); if (pos == nullptr) error->one(FLERR, iarg + 2, "Cannot open fix reaxff/species position file: {}", diff --git a/src/SMTBQ/pair_smtbq.cpp b/src/SMTBQ/pair_smtbq.cpp index 8b8b8b07f04..3e0c84132a0 100644 --- a/src/SMTBQ/pair_smtbq.cpp +++ b/src/SMTBQ/pair_smtbq.cpp @@ -1381,7 +1381,7 @@ void PairSMTBQ::tabqeq() ra = params[i].R; rb = params[j].R; - ii = 0 ; nang =cang= 5.0 ; + ii = 0 ; nang =cang= 5.0 ; aCoeff = bCoeff = 0.0 ; // -------------------------- for (k = 0; k < kmax+5; k++) // -------------------------- @@ -1436,7 +1436,7 @@ void PairSMTBQ::tabqeq() rb = ROxSurf; zb = (2.0*params[j].ne + 1.0)/(4.0*rb); } - ii = 0 ; nang =cang= 5.0 ; + ii = 0 ; nang =cang= 5.0 ; aCoeff = bCoeff = 0.0 ; // -------------------------- for (k = 0; k < kmax+5; k++) // -------------------------- @@ -1502,7 +1502,7 @@ void PairSMTBQ::tabqeq() zb = (2.0*params[j].ne + 1.0)/(4.0*rb); } - ii = 0 ; nang =cang= 5.0 ; + ii = 0 ; nang =cang= 5.0 ; aCoeff = bCoeff = 0.0 ; // -------------------------- for (k = 0; k < kmax+5; k++) // -------------------------- diff --git a/src/modify.cpp b/src/modify.cpp index 4767f3c8aba..d0672415ce5 100644 --- a/src/modify.cpp +++ b/src/modify.cpp @@ -1562,18 +1562,21 @@ int Modify::read_restart(FILE *fp) for (int i = 0; i < nfix_restart_global; i++) { if (me == 0) utils::sfread(FLERR, &n, sizeof(int), 1, fp, nullptr, error); MPI_Bcast(&n, 1, MPI_INT, 0, world); + if ((n < 1) || (n > 65536)) error->all(FLERR, "Invalid fix info size in restart file"); id_restart_global[i] = new char[n]; if (me == 0) utils::sfread(FLERR, id_restart_global[i], sizeof(char), n, fp, nullptr, error); MPI_Bcast(id_restart_global[i], n, MPI_CHAR, 0, world); if (me == 0) utils::sfread(FLERR, &n, sizeof(int), 1, fp, nullptr, error); MPI_Bcast(&n, 1, MPI_INT, 0, world); + if ((n < 1) || (n > 65536)) error->all(FLERR, "Invalid fix info size in restart file"); style_restart_global[i] = new char[n]; if (me == 0) utils::sfread(FLERR, style_restart_global[i], sizeof(char), n, fp, nullptr, error); MPI_Bcast(style_restart_global[i], n, MPI_CHAR, 0, world); if (me == 0) utils::sfread(FLERR, &n, sizeof(int), 1, fp, nullptr, error); MPI_Bcast(&n, 1, MPI_INT, 0, world); + if ((n < 1) || (n > (1 << 30))) error->all(FLERR, "Invalid fix data size in restart file"); state_restart_global[i] = new char[n]; if (me == 0) utils::sfread(FLERR, state_restart_global[i], sizeof(char), n, fp, nullptr, error); MPI_Bcast(state_restart_global[i], n, MPI_CHAR, 0, world); @@ -1606,12 +1609,14 @@ int Modify::read_restart(FILE *fp) for (int i = 0; i < nfix_restart_peratom; i++) { if (me == 0) utils::sfread(FLERR, &n, sizeof(int), 1, fp, nullptr, error); MPI_Bcast(&n, 1, MPI_INT, 0, world); + if ((n < 1) || (n > 65536)) error->all(FLERR, "Invalid fix info size in restart file"); id_restart_peratom[i] = new char[n]; if (me == 0) utils::sfread(FLERR, id_restart_peratom[i], sizeof(char), n, fp, nullptr, error); MPI_Bcast(id_restart_peratom[i], n, MPI_CHAR, 0, world); if (me == 0) utils::sfread(FLERR, &n, sizeof(int), 1, fp, nullptr, error); MPI_Bcast(&n, 1, MPI_INT, 0, world); + if ((n < 1) || (n > 65536)) error->all(FLERR, "Invalid fix info size in restart file"); style_restart_peratom[i] = new char[n]; if (me == 0) utils::sfread(FLERR, style_restart_peratom[i], sizeof(char), n, fp, nullptr, error); diff --git a/src/universe.cpp b/src/universe.cpp index 951410e7d15..fe53b0d5002 100644 --- a/src/universe.cpp +++ b/src/universe.cpp @@ -140,10 +140,11 @@ void Universe::reorder(char *style, char *arg) // create new uworld communicator - int ome,key; + int ome,key = -1; MPI_Comm_rank(uorig,&ome); for (int i = 0; i < nprocs; i++) if (uni2orig[i] == ome) key = i; + if (key < 0) error->universe_one(FLERR,"Invalid -reorder file: not a permutation of all ranks"); MPI_Comm_split(uorig,0,key,&uworld); MPI_Comm_rank(uworld,&me); From 40f7ec60dda69fd5bbc9212c99377dca91a371b5 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 4 Jul 2026 04:33:43 -0400 Subject: [PATCH 049/116] Correct member names for the qeq/reaxff sparse matrix init Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01EQzrZAwqmkabYN65PkjAkX --- src/REAXFF/fix_qeq_reaxff.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/REAXFF/fix_qeq_reaxff.cpp b/src/REAXFF/fix_qeq_reaxff.cpp index 1aa4a9ea9c4..fef3c342f6c 100644 --- a/src/REAXFF/fix_qeq_reaxff.cpp +++ b/src/REAXFF/fix_qeq_reaxff.cpp @@ -151,9 +151,9 @@ FixQEqReaxFF::FixQEqReaxFF(LAMMPS *lmp, int narg, char **arg) : reaxff = dynamic_cast(force->pair_match("^reaxff",0)); s_hist = t_hist = nullptr; - H.cap = H.n = H.m = 0; - H.start = H.end = nullptr; - H.entries = nullptr; + H.n = H.m = 0; + H.firstnbr = H.numnbrs = H.jlist = nullptr; + H.val = nullptr; atom->add_callback(Atom::GROW); } From 489a19acaa8714a16a1325ff5c290ee10c38059a Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 4 Jul 2026 04:49:07 -0400 Subject: [PATCH 050/116] Final hardening pass for the remaining Coverity rescan findings - fix imd: validate the forces message length from the network header before allocating and reading; a hostile or buggy IMD client could send a negative or oversized count (CID 1661876, both protocol paths) - fix bond/react: initialize the map file section counts and validate them against the template atom count after parsing (a map file with a missing or corrupt header line used uninitialized loop bounds, CID 1661056); zero-initialize the chirality coordinate buffers (CID 1661815); reject inconsistent rate-limit data in a restart instead of reading an unallocated buffer (CID 1662736) - compute gaussian/grid/local: require Gaussian widths > 0; a zero width divided by zero when computing prefactors (CID 1663435) - pair lj/long/dipole/long: initialize muj so torque accumulation for non-dipole neighbors cannot multiply zero with indeterminate garbage (NaN pattern) before the first dipole pair is processed (CID 1661933) The other 'remaining' items from the rescan worklist turned out to be already hardened in earlier commits, just in a different file than the defect (MEAM rho0 at library read, fix ipi atom count, TGA dimension cap, RHEO rho0/cv validation); those become fix-present dismissals. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01EQzrZAwqmkabYN65PkjAkX --- src/DIPOLE/pair_lj_long_dipole_long.cpp | 2 +- src/MISC/fix_imd.cpp | 4 ++++ src/ML-SNAP/compute_gaussian_grid_local.cpp | 5 ++++- src/REACTION/fix_bond_react.cpp | 24 +++++++++++++++++---- 4 files changed, 29 insertions(+), 6 deletions(-) diff --git a/src/DIPOLE/pair_lj_long_dipole_long.cpp b/src/DIPOLE/pair_lj_long_dipole_long.cpp index 7799f3d5121..86094209a0d 100644 --- a/src/DIPOLE/pair_lj_long_dipole_long.cpp +++ b/src/DIPOLE/pair_lj_long_dipole_long.cpp @@ -427,7 +427,7 @@ void PairLJLongDipoleLong::compute(int eflag, int vflag) double rsq, r2inv, force_coul, force_lj; double g2 = g_ewald*g_ewald, g6 = g2*g2*g2, g8 = g6*g2; double B0, B1, B2, B3, G0, G1, G2, mudi, mudj, muij; - double mui[3], muj[3], xi[3], d[3]; + double mui[3], muj[3] = {0.0, 0.0, 0.0}, xi[3], d[3]; double C1 = 2.0 * g_ewald / MY_PIS; double C2 = 2.0 * g2 * C1; diff --git a/src/MISC/fix_imd.cpp b/src/MISC/fix_imd.cpp index bf6eb7af7ac..4c0b56484c3 100644 --- a/src/MISC/fix_imd.cpp +++ b/src/MISC/fix_imd.cpp @@ -1146,6 +1146,8 @@ void FixIMD::handle_step_v2() { break; case IMD_MDCOMM: { + if ((length < 0) || (length > num_coords)) + error->one(FLERR, "Invalid IMD forces message length: {}", length); auto *imd_tags = new int32[length]; auto *imd_fdat = new float[3*length]; imd_recv_mdcomm(clientsock, length, imd_tags, imd_fdat); @@ -1472,6 +1474,8 @@ void FixIMD::handle_client_input_v3() { break; case IMD_MDCOMM: { + if ((length < 0) || (length > num_coords)) + error->one(FLERR, "Invalid IMD forces message length: {}", length); auto *imd_tags = new int32[length]; auto *imd_fdat = new float[3*length]; imd_recv_mdcomm(clientsock, length, imd_tags, imd_fdat); diff --git a/src/ML-SNAP/compute_gaussian_grid_local.cpp b/src/ML-SNAP/compute_gaussian_grid_local.cpp index e9683bf531f..420dd4897f7 100644 --- a/src/ML-SNAP/compute_gaussian_grid_local.cpp +++ b/src/ML-SNAP/compute_gaussian_grid_local.cpp @@ -57,8 +57,11 @@ ComputeGaussianGridLocal::ComputeGaussianGridLocal(LAMMPS *lmp, int narg, char * rcutfac = utils::numeric(FLERR, arg[3], false, lmp); for (int i = 0; i < ntypes; i++) radelem[i + 1] = utils::numeric(FLERR, arg[4 + i], false, lmp); - for (int i = 0; i < ntypes; i++) + for (int i = 0; i < ntypes; i++) { sigmaelem[i + 1] = utils::numeric(FLERR, arg[ntypes + 4 + i], false, lmp); + if (sigmaelem[i + 1] <= 0.0) + error->all(FLERR, ntypes + 4 + i, "Gaussian width for type {} must be > 0", i + 1); + } // construct cutsq double cut; diff --git a/src/REACTION/fix_bond_react.cpp b/src/REACTION/fix_bond_react.cpp index 3213ca51ffa..010446ae9d1 100644 --- a/src/REACTION/fix_bond_react.cpp +++ b/src/REACTION/fix_bond_react.cpp @@ -2104,7 +2104,7 @@ int FixBondReact::check_constraints(Reaction &rxn, std::vector &glove) // let's also check chirality within 'check_constraint' for (int i = 0; i < rxn.reactant->natoms; i++) { if (rxn.atoms[i].chiral[0] == 1) { - double my4coords[12]; + double my4coords[12] = {0.0}; // already ensured, by transitive property, that chiral simulation atom has four neighs for (int j = 0; j < 4; j++) { atom1 = atom->map(glove[i]); @@ -4286,7 +4286,8 @@ read map file void FixBondReact::read_map_file(Reaction &rxn) { - int rv, nedge, nequivalent, nchiral, nwild, ndelete, ncreate = 0; + int rv, nedge, nequivalent, nchiral, nwild, ndelete, ncreate; + nedge = nchiral = nwild = ndelete = ncreate = 0; char line[MAXLINE] = {'\0'}; char keyword[MAXLINE] = {'\0'}; char *eof,*ptr; @@ -4309,7 +4310,12 @@ void FixBondReact::read_map_file(Reaction &rxn) if ((ptr = strchr(line,'#'))) *ptr = '\0'; if (strspn(line," \t\n\r") == strlen(line)) continue; - if (strstr(line,"edgeIDs")) sscanf(line,"%d",&nedge); + if (strstr(line,"edgeIDs")) { + rv = sscanf(line,"%d",&nedge); + if (rv != 1) error->one(FLERR, "Map file header is incorrectly formatted"); + if ((nedge < 0) || (nedge > rxn.reactant->natoms)) + error->one(FLERR,"Fix bond/react: Invalid number of edgeIDs in map file"); + } else if (strstr(line,"equivalences")) { rv = sscanf(line,"%d",&nequivalent); if (rv != 1) error->one(FLERR, "Map file header is incorrectly formatted"); @@ -4320,15 +4326,23 @@ void FixBondReact::read_map_file(Reaction &rxn) else if (strstr(line,"deleteIDs")) { rv = sscanf(line,"%d",&ndelete); if (rv != 1) error->one(FLERR, "Map file header is incorrectly formatted"); + if ((ndelete < 0) || (ndelete > rxn.reactant->natoms)) + error->one(FLERR,"Fix bond/react: Invalid number of deleteIDs in map file"); } else if (strstr(line,"createIDs")) { rv = sscanf(line,"%d",&ncreate); if (rv != 1) error->one(FLERR, "Map file header is incorrectly formatted"); + if (ncreate < 0) + error->one(FLERR,"Fix bond/react: Invalid number of createIDs in map file"); } else if (strstr(line,"chiralIDs")) { rv = sscanf(line,"%d",&nchiral); if (rv != 1) error->one(FLERR, "Map file header is incorrectly formatted"); + if ((nchiral < 0) || (nchiral > rxn.reactant->natoms)) + error->one(FLERR,"Fix bond/react: Invalid number of chiralIDs in map file"); } else if (strstr(line,"wildcards")) { rv = sscanf(line,"%d",&nwild); if (rv != 1) error->one(FLERR, "Map file header is incorrectly formatted"); + if ((nwild < 0) || (nwild > rxn.reactant->natoms)) + error->one(FLERR,"Fix bond/react: Invalid number of wildcards in map file"); } else if (strstr(line,"constraints")) { int nconstraints; rv = sscanf(line,"%d",&nconstraints); @@ -4510,7 +4524,7 @@ void FixBondReact::ChiralCenters(char *line, Reaction &rxn, int nchiral) } } // record order of atom types, and coords - double my4coords[12]; + double my4coords[12] = {0.0}; for (int j = 0; j < 4; j++) { rxn.atoms[tmp-1].chiral[j+2] = rxn.reactant->type[rxn.reactant->special[tmp-1][j]-1]; for (int k = 0; k < 3; k++) { @@ -4955,6 +4969,8 @@ void FixBondReact::restart(char *buf) memory->create(ibuf,ibufcount,"bond/react:ibuf"); memcpy(&ibuf[0],&buf[iptr],sizeof(int)*ibufcount); } + if ((r_nratelimits > 0) && (ibufcount <= 0)) + error->all(FLERR,"Inconsistent rate limit data in restart file"); int ii = 0; for (int i = 0; i < r_nratelimits; i++) { struct RateLimit r_rlm; From 0d8be04e1f3f15d764828eab8b175e53a769293e Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 4 Jul 2026 04:51:48 -0400 Subject: [PATCH 051/116] coverity: align modeling file with the simplified bigint typedef Keep the plain 'long int' typedef (the scan runs on 64-bit Linux) that preview already carries, so the branches do not conflict on merge. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01EQzrZAwqmkabYN65PkjAkX --- tools/coverity/coverity_model.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tools/coverity/coverity_model.cpp b/tools/coverity/coverity_model.cpp index 53143a66a35..652e9fcd684 100644 --- a/tools/coverity/coverity_model.cpp +++ b/tools/coverity/coverity_model.cpp @@ -25,14 +25,12 @@ goes inert. ------------------------------------------------------------------------- */ -#include - namespace LAMMPS_NS { // Must match the typedef in src/lmptype.h for the analyzed build. // The Coverity Scan build uses -D LAMMPS_SIZES=SMALLBIG (see // .github/workflows/coverity.yml), where bigint == int64_t. -typedef int64_t bigint; +typedef long int bigint; /* ---------------------------------------------------------------------- Custom memory allocator -- src/memory.h From aad01a4a0884e33a2888352fcf8fed71cc289a93 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 4 Jul 2026 06:02:21 -0400 Subject: [PATCH 052/116] Do not reject zero-size global fix state when reading a restart file The size guard added in 2bcd8ef584 required n >= 1 for the global state chunk of a fix in a restart file. FixNeighHistory and BPM's FixUpdateSpecialBonds set restart_global = 1 only as a hook to run pre_exchange() at restart-write time and legitimately write a zero-size chunk, so any restart file written with granular pair styles using history (or BPM systems) could no longer be read. Allow n == 0 again; negative and oversized values are still rejected before being passed to new[]. Caught by the RestartSettings granular round-trip unit test. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01EjV3TNphDvqgt2WwrHH8wV --- src/modify.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modify.cpp b/src/modify.cpp index d0672415ce5..e66bb73cec8 100644 --- a/src/modify.cpp +++ b/src/modify.cpp @@ -1576,7 +1576,7 @@ int Modify::read_restart(FILE *fp) if (me == 0) utils::sfread(FLERR, &n, sizeof(int), 1, fp, nullptr, error); MPI_Bcast(&n, 1, MPI_INT, 0, world); - if ((n < 1) || (n > (1 << 30))) error->all(FLERR, "Invalid fix data size in restart file"); + if ((n < 0) || (n > (1 << 30))) error->all(FLERR, "Invalid fix data size in restart file"); state_restart_global[i] = new char[n]; if (me == 0) utils::sfread(FLERR, state_restart_global[i], sizeof(char), n, fp, nullptr, error); MPI_Bcast(state_restart_global[i], n, MPI_CHAR, 0, world); From aab82b8a98a104e9c825b87ba6ee8db9c60c2964 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 5 Jul 2026 10:23:51 -0400 Subject: [PATCH 053/116] fall back to Plumed-2.9.5 as 2.10.x has trouble building for Windows --- cmake/Modules/Packages/PLUMED.cmake | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/cmake/Modules/Packages/PLUMED.cmake b/cmake/Modules/Packages/PLUMED.cmake index d921a3a01d9..311ea1da1d3 100644 --- a/cmake/Modules/Packages/PLUMED.cmake +++ b/cmake/Modules/Packages/PLUMED.cmake @@ -32,9 +32,8 @@ endif() # Note: must also adjust check for supported API versions in # fix_plumed.cpp when version changes from v2.n.x to v2.n+1.y -set(PLUMED_URL "https://github.com/plumed/plumed2/releases/download/v2.10.1/plumed-src-2.10.1.tgz" - CACHE STRING "URL for PLUMED tarball") -set(PLUMED_SHA256 "3679652608cac7da083cfe3a5b164122d6869ac4fbd0e8983a1501b815b25fdf" CACHE STRING "SHA256 checksum of PLUMED tarball") +set(PLUMED_URL "https://github.com/plumed/plumed2/releases/download/v2.9.5/plumed-src-2.9.5.tgz" CACHE STRING "URL for PLUMED tarball") +set(PLUMED_SHA256 "d2fe917ec594d0c036eded0a94ebca90d76f56efa1764fa6c79e76b3167ce2c9" CACHE STRING "SHA256 checksum of PLUMED tarball") mark_as_advanced(PLUMED_URL) mark_as_advanced(PLUMED_SHA256) From 58e401c7512797ee1206f38629066b815b27eaea Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 5 Jul 2026 10:24:53 -0400 Subject: [PATCH 054/116] add utility to rebalance reStructuredText tables --- doc/utils/fixup_table.py | 66 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100755 doc/utils/fixup_table.py diff --git a/doc/utils/fixup_table.py b/doc/utils/fixup_table.py new file mode 100755 index 00000000000..e27f6b9eaee --- /dev/null +++ b/doc/utils/fixup_table.py @@ -0,0 +1,66 @@ +#!/usr/bin/env python3 +""" +Reformat reStructuredText tables to ensure consistent column widths and correct syntax. +""" + +import sys +import argparse + +def reformat_rst_table(file_path): + with open(file_path, "r") as f: + lines = f.readlines() + + new_lines = [] + i = 0 + while i < len(lines): + line = lines[i] + if line.strip().startswith("+--"): + # Start of a table, collect all table lines + table_lines = [] + while i < len(lines) and (lines[i].strip().startswith("+--") or "|" in lines[i]): + table_lines.append(lines[i]) + i += 1 + + # Process table + rows = [] + for t_line in table_lines: + if "|" in t_line: + cells = [cell.strip() for cell in t_line.split("|") if cell.strip()] + if cells: + rows.append(cells) + + if not rows: + new_lines.extend(table_lines) + continue + + num_cols = max(len(row) for row in rows) + col_widths = [0] * num_cols + for row in rows: + for j, cell in enumerate(row): + if j < num_cols: + col_widths[j] = max(col_widths[j], len(cell)) + + separator = "+" + "+".join(["-" * (w + 2) for w in col_widths]) + "+" + new_lines.append(separator + "\n") + for row in rows: + row_str = "|" + "|".join([f" {cell:<{col_widths[j]}} " for j, cell in enumerate(row)]) + "|" + new_lines.append(row_str + "\n") + new_lines.append(separator + "\n") + else: + new_lines.append(line) + i += 1 + + with open(file_path, "w") as f: + f.writelines(new_lines) + +def main(): + parser = argparse.ArgumentParser(description="Reformat RST tables.") + parser.add_argument("files", nargs="+", help="RST files to reformat") + args = parser.parse_args() + + for file_path in args.files: + print(f"Reformatting table in {file_path}...") + reformat_rst_table(file_path) + +if __name__ == "__main__": + main() From c32b937152b0d5d06ac7a2eefc56b2fe4406c754 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 5 Jul 2026 12:32:10 -0400 Subject: [PATCH 055/116] ignore Claude related paths --- .gitignore | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.gitignore b/.gitignore index 412adaa302c..bc44d8e5ae5 100644 --- a/.gitignore +++ b/.gitignore @@ -64,3 +64,7 @@ src/Makefile.package.settings-e /test /dev .Rhistory + +# Claude code generated/maintained files +/CLAUDE.md +/plans From aee472de5a21f39adbc0330d6c0e3da14cb9edce Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 5 Jul 2026 13:16:34 -0400 Subject: [PATCH 056/116] add much improve diagram for hydrogen bond setup --- doc/src/JPG/hbond-diagram.png | Bin 31689 -> 184417 bytes doc/src/SVG/hbond-diagram.svg | 34 ++++++++++++++++++++++++++++++++ doc/src/compute_hbond_local.rst | 14 ++++++------- 3 files changed, 41 insertions(+), 7 deletions(-) create mode 100644 doc/src/SVG/hbond-diagram.svg diff --git a/doc/src/JPG/hbond-diagram.png b/doc/src/JPG/hbond-diagram.png index 91774b9b0e13ad15e2ada6c5b26da0ec29b19b03..2a43b12f77293c2c21175ea7abf4e24f07f32dfe 100644 GIT binary patch literal 184417 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

^$EM&K}uEEJNLJPcfHWb3Y*iblj1 z2n{Muwu~4u`uxN-Om0)|cm+tD>_Wn3nyy_HFBuP~TWtu2A?piYuT(EHIwOiviWd7)cYz+9iuDeA56fGQUf4Gt zs_o!@!~JIC9p@6H6x?I7X$wM1#7PCA+z~zX3gKNq*ht=3`JS3h3kB&2pJFdk^O}a zyuESexvf#*F4rP*0iLNT>g(~e&+=Q~v)qy%e~@i2Vlw_63D~}f8GtoAlp>AOsZ3{v zJ(?ZvN-ZjE(TPRvPaSNs$e_A7*&kww06M{&S#f|KXSx#M-gvl7?zFsinosbs^203b zuukmhgy;ND@{mPBe>YCzu$P>U^GD zSuHyHfcER#x4_K}0;`W=V(5+F7UQ*xtn7ow=9N2ipMrc^OGhsVk55Qu)+i;lElr^^ zdAA@9_APWbEbp_#q&z;qhhKm~d@0-_bwO059Q5o;BY~eBJNy*j9>su*2*HC+!I{v6 zDC;|02I}6}F7oPKbO4pG-;Vjf?)UyD?15Xi?OW3l-w6}LjV~Exu+!INTI}LWv00Iv z8tg&rfKs$MV`RNN;GBB(9D4huh$eD2xYpvuelw|rQJ`fW8$fEje+q+O8cTPya7c;j z-LeThkhJG+C)@!_9%)R)8K*Jvp!N9o;DPJDFW(RK{Ob5!cRwFS1a=R4Iu^HXq!jHv ze>jhM#(HOY-m!&q|16pf;6T!Htb0NZB}9fCV28NVRjS2za1&CH*JYvq>5pCXBEv|= z-FF7!cEI z$o6OHG~8PIl?R)bFv{L|JiF@&2{YLD$*B!kUW+}QgJyS;m){q59zJ_4y|@nx&PT~gy*7&0~CcPgI*pKVd(q&nHXd?m1nQ_>nK&Kr-0M!1 z_Pn<6=kolW=gQ86R%ay+i*fq#jZcMhzX5leAB<_7x;fiRh*I|Tg6+#6K z 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 z

~;mzlkragJalec+%QBxH{P4`uCL@yz_BHOyT(+qWyJXu z|I9g~NV{Qa!hL^wEDTnGBw=BS{8!wuIK&aEfs~-`opbM_YkMH`(wTKwuL$hZAud`4 z*oKyk&qL`v?a{6+arlV-iAs^bP(0*W=hvgez4>l2Lwcu?4K^?l6OddC^6(;wbLpb~ z`aHG<`U3K}2&g$$u-tFD0!7ZjFHhT0_T5N6-2iFCdELYNH!v-0((hzle=d zN=lby_^W}`J8J}hnwIPY=7vkhKE&}dlLD>>s;!F>uO?V>EgLt|aFdYW!vKH}s2HhWZN}GGhs_VGY%uQ^w>gKPD7@pu_MLH#uK;j`XlYw}Fe7bH<3 z>#K~1aFF8pW&xeW=OnrJj}DQQ{@*K}gDXk~B#j|2Z6uzn$_o2&F2Ga4Tz-@yKIr@) zBM*+OODdnC15d(70ip3<+rTd_qpQ!D9R?c1#|!XCE#}z(Tb@NuE+NmIK1_Y(_f$F$ z29u-ne*x#QJ79Xb-6KjZnQ(N@dIT`y%#s461=-@&QPtLCAZZQmH^7xbi3|I$0eEgP zgA6eS^xg4#4ZGa1y)b6IGtl@#1G$OFiNXW2woPhO9(zpm&%6KEF4NzrGSoq>Y?|#D z;fTx z%|}CJ{?|~=5@(l5FX(|XdcuEzcdHUAXksM9nqc}oW?Bq1{+ruBkN#h0V;RjVo=DSs zjKbofSA`RT+p5g*CKck3?WO;3d;7m{wa4}moZ3}azreQ4#%mnbT+w!Amsl?a7Q6H_ zVpy4e#tE^x8$PVp7&HTrlUtcyA!H>*U5M&7LK@aeNL!k!!$9^<;k>{*m z^NDsJS3vkE1w+ur|J^4@euj;3@c*{NcZO{Qo}#@*+tR{2j?2UcLbLf3Nu0 xhFFRJ+T-5^^c4T;&A+aj{{HWL{C|Gw>H(`{Z$x~c*bf4JUcFS7DUmV^_&+SVTwVYG literal 31689 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 VibtwF@ diff --git a/doc/src/SVG/hbond-diagram.svg b/doc/src/SVG/hbond-diagram.svg new file mode 100644 index 00000000000..1b6fe255a8d --- /dev/null +++ b/doc/src/SVG/hbond-diagram.svg @@ -0,0 +1,34 @@ + + + + +acut +max H-donor-acceptor angle + + +rcut +max donor-acceptor distance + + + + + + + + + + +H +D +A +dist +hdist +angle +D= DonorH= HydrogenA= Acceptor + diff --git a/doc/src/compute_hbond_local.rst b/doc/src/compute_hbond_local.rst index 9bf4cbe6aa4..5eee1f8bfb3 100644 --- a/doc/src/compute_hbond_local.rst +++ b/doc/src/compute_hbond_local.rst @@ -52,19 +52,19 @@ Define a computation that determines the number of hydrogen bonds and computes some related properties according to the provided parameters. To be counted as a hydrogen bond the following conditions have to be met -- the donor atom has to be in the group *dgroup-ID* -- the acceptor atom has to be in the group *agroup-ID* -- the hydrogen atom has to be in the group *hgroup-ID* +- the donor atom (D) has to be in the group *dgroup-ID* +- the acceptor atom (A) has to be in the group *agroup-ID* +- the hydrogen atom (H) has to be in the group *hgroup-ID* - all three atoms have to be in the compute group - the hydrogen atom has to be connected to the donor with a bond - the donor - acceptor distance has to be less than *rcut* - the hydrogen - donor - acceptor angle has to be less than *acut* -.. figure:: JPG/hbond-diagram.png - :figclass: align-center - :figwidth: 33% +Please see the following diagram for a visualization of the +different assignments and parameters. - Diagram of the hydrogen bond definition for compute hbond/local +.. image:: JPG/hbond-diagram.png + :width: 75% The following values can be computed and output. From 0280d41c1f3249fb4fb2e63bc711b55f9248d1d8 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 5 Jul 2026 13:16:42 -0400 Subject: [PATCH 057/116] spelling --- src/library.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/library.cpp b/src/library.cpp index 3a555ad2a3a..4021fd701aa 100644 --- a/src/library.cpp +++ b/src/library.cpp @@ -2596,7 +2596,7 @@ A table with supported keywords is included in the documentation of the .. versionchanged:: 4Jul2026 -When using the KOKKOS package with a device backend, per-atom data is now +When using the KOKKOS package with a device back end, per-atom data is now synchronized from the device to the host before the pointer is returned. Previously the host copy could be out-of-date for calls not aligned with an output or end-of-run step. From a53bca476b814192362398b27967ee812b7fc86f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 5 Jul 2026 13:28:18 -0400 Subject: [PATCH 058/116] revise figures for transparent background --- doc/src/JPG/hbond-diagram.png | Bin 184417 -> 200077 bytes doc/src/SVG/hbond-diagram.svg | 10 +++++----- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/doc/src/JPG/hbond-diagram.png b/doc/src/JPG/hbond-diagram.png index 2a43b12f77293c2c21175ea7abf4e24f07f32dfe..10cb63ee3b675b7ede3888d437014e739aeb5ac3 100644 GIT binary patch literal 200077 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 literal 184417 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

^$EM&K}uEEJNLJPcfHWb3Y*iblj1 z2n{Muwu~4u`uxN-Om0)|cm+tD>_Wn3nyy_HFBuP~TWtu2A?piYuT(EHIwOiviWd7)cYz+9iuDeA56fGQUf4Gt zs_o!@!~JIC9p@6H6x?I7X$wM1#7PCA+z~zX3gKNq*ht=3`JS3h3kB&2pJFdk^O}a zyuESexvf#*F4rP*0iLNT>g(~e&+=Q~v)qy%e~@i2Vlw_63D~}f8GtoAlp>AOsZ3{v zJ(?ZvN-ZjE(TPRvPaSNs$e_A7*&kww06M{&S#f|KXSx#M-gvl7?zFsinosbs^203b zuukmhgy;ND@{mPBe>YCzu$P>U^GD zSuHyHfcER#x4_K}0;`W=V(5+F7UQ*xtn7ow=9N2ipMrc^OGhsVk55Qu)+i;lElr^^ zdAA@9_APWbEbp_#q&z;qhhKm~d@0-_bwO059Q5o;BY~eBJNy*j9>su*2*HC+!I{v6 zDC;|02I}6}F7oPKbO4pG-;Vjf?)UyD?15Xi?OW3l-w6}LjV~Exu+!INTI}LWv00Iv z8tg&rfKs$MV`RNN;GBB(9D4huh$eD2xYpvuelw|rQJ`fW8$fEje+q+O8cTPya7c;j z-LeThkhJG+C)@!_9%)R)8K*Jvp!N9o;DPJDFW(RK{Ob5!cRwFS1a=R4Iu^HXq!jHv ze>jhM#(HOY-m!&q|16pf;6T!Htb0NZB}9fCV28NVRjS2za1&CH*JYvq>5pCXBEv|= z-FF7!cEI z$o6OHG~8PIl?R)bFv{L|JiF@&2{YLD$*B!kUW+}QgJyS;m){q59zJ_4y|@nx&PT~gy*7&0~CcPgI*pKVd(q&nHXd?m1nQ_>nK&Kr-0M!1 z_Pn<6=kolW=gQ86R%ay+i*fq#jZcMhzX5leAB<_7x;fiRh*I|Tg6+#6K z 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 z

~;mzlkragJalec+%QBxH{P4`uCL@yz_BHOyT(+qWyJXu z|I9g~NV{Qa!hL^wEDTnGBw=BS{8!wuIK&aEfs~-`opbM_YkMH`(wTKwuL$hZAud`4 z*oKyk&qL`v?a{6+arlV-iAs^bP(0*W=hvgez4>l2Lwcu?4K^?l6OddC^6(;wbLpb~ z`aHG<`U3K}2&g$$u-tFD0!7ZjFHhT0_T5N6-2iFCdELYNH!v-0((hzle=d zN=lby_^W}`J8J}hnwIPY=7vkhKE&}dlLD>>s;!F>uO?V>EgLt|aFdYW!vKH}s2HhWZN}GGhs_VGY%uQ^w>gKPD7@pu_MLH#uK;j`XlYw}Fe7bH<3 z>#K~1aFF8pW&xeW=OnrJj}DQQ{@*K}gDXk~B#j|2Z6uzn$_o2&F2Ga4Tz-@yKIr@) zBM*+OODdnC15d(70ip3<+rTd_qpQ!D9R?c1#|!XCE#}z(Tb@NuE+NmIK1_Y(_f$F$ z29u-ne*x#QJ79Xb-6KjZnQ(N@dIT`y%#s461=-@&QPtLCAZZQmH^7xbi3|I$0eEgP zgA6eS^xg4#4ZGa1y)b6IGtl@#1G$OFiNXW2woPhO9(zpm&%6KEF4NzrGSoq>Y?|#D z;fTx z%|}CJ{?|~=5@(l5FX(|XdcuEzcdHUAXksM9nqc}oW?Bq1{+ruBkN#h0V;RjVo=DSs zjKbofSA`RT+p5g*CKck3?WO;3d;7m{wa4}moZ3}azreQ4#%mnbT+w!Amsl?a7Q6H_ zVpy4e#tE^x8$PVp7&HTrlUtcyA!H>*U5M&7LK@aeNL!k!!$9^<;k>{*m z^NDsJS3vkE1w+ur|J^4@euj;3@c*{NcZO{Qo}#@*+tR{2j?2UcLbLf3Nu0 xhFFRJ+T-5^^c4T;&A+aj{{HWL{C|Gw>H(`{Z$x~c*bf4JUcFS7DUmV^_&+SVTwVYG diff --git a/doc/src/SVG/hbond-diagram.svg b/doc/src/SVG/hbond-diagram.svg index 1b6fe255a8d..46206e943c8 100644 --- a/doc/src/SVG/hbond-diagram.svg +++ b/doc/src/SVG/hbond-diagram.svg @@ -1,10 +1,10 @@ - From 1cd10a2b3ea4d586bcb9a7673b6026de822eef37 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 5 Jul 2026 21:25:52 -0400 Subject: [PATCH 059/116] do not embed a static LAMMPS library into the in-tree example plugins When the in-tree plugin examples are built as part of a LAMMPS build with BUILD_SHARED_LIBS=off, linking the lammps target archived a complete copy of LAMMPS into every plugin shared object. On ELF platforms the dynamic linker binds the plugin's references to global variables to the copies exported by the loading executable (lmp is built with ENABLE_EXPORTS for plugin support), so the plugin's static constructor and destructor passes run a second time on the executable's global objects. Any "plugin load" then aborts at program exit with "double free or corruption" when e.g. the GPU package's LAMMPS_AL::global_device is destroyed twice. Link the plugins through the $ generator expression instead (in-tree static non-Windows builds only): the plugins inherit all compile-time settings but leave the LAMMPS symbols undefined so they are resolved from the loading binary, exactly like a standalone plugin build. The test executable gets ENABLE_EXPORTS so the loaded plugins can resolve its symbols. Windows keeps linking the full library: PE has no symbol interposition, so each image uses its own globals and the crash cannot happen there. $ requires CMake 3.27. With an older CMake and a static library the plugin tests are skipped with a warning; this fallback can be removed once the minimum required CMake version is raised to 3.27. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01EjV3TNphDvqgt2WwrHH8wV --- examples/plugins/CMakeLists.txt | 37 ++++++++++++++++++++++++++------ unittest/commands/CMakeLists.txt | 23 ++++++++++++++++---- 2 files changed, 50 insertions(+), 10 deletions(-) diff --git a/examples/plugins/CMakeLists.txt b/examples/plugins/CMakeLists.txt index dc1cedc46d4..3ebb9f09d01 100644 --- a/examples/plugins/CMakeLists.txt +++ b/examples/plugins/CMakeLists.txt @@ -78,25 +78,50 @@ endif() ########################## # building the plugins +# When this folder is included in a LAMMPS build with a STATIC LAMMPS library, +# linking that library into a plugin embeds a complete copy of LAMMPS into the +# plugin .so file. On ELF platforms (Linux, BSDs) the dynamic linker then +# binds the plugin's references to global variables to the copies exported by +# the loading executable, so the plugin's constructor and destructor passes +# run a second time on the executable's global objects: their memory is freed +# twice at program exit and the process aborts. Linking through the +# COMPILE_ONLY generator expression (requires CMake 3.27) imports only the +# compile-time settings of the LAMMPS target and leaves the LAMMPS symbols in +# the plugin undefined, so they are resolved from the loading binary when the +# plugin is loaded, exactly as in a standalone plugin build. This does not +# apply to Windows: a .dll cannot have undefined symbols and there is no +# symbol interposition, so the full library must be (and safely can be) +# linked in. +if(LAMMPS_DIR AND (NOT BUILD_SHARED_LIBS) AND (NOT (CMAKE_SYSTEM_NAME STREQUAL "Windows"))) + if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.27) + set(LAMMPS_LINK_TARGET "$") + else() + message(FATAL_ERROR "Building plugins inside a static LAMMPS library build " + "requires CMake 3.27 or later or setting BUILD_SHARED_LIBS=on") + endif() +else() + set(LAMMPS_LINK_TARGET lammps) +endif() + add_library(morse2plugin MODULE morse2plugin.cpp pair_morse2.cpp pair_morse2_omp.cpp) target_include_directories(morse2plugin PRIVATE "${LAMMPS_HEADER_DIR}/OPENMP") -target_link_libraries(morse2plugin PRIVATE lammps) +target_link_libraries(morse2plugin PRIVATE ${LAMMPS_LINK_TARGET}) add_library(nve2plugin MODULE nve2plugin.cpp fix_nve2.cpp) -target_link_libraries(nve2plugin PRIVATE lammps) +target_link_libraries(nve2plugin PRIVATE ${LAMMPS_LINK_TARGET}) add_library(helloplugin MODULE helloplugin.cpp) -target_link_libraries(helloplugin PRIVATE lammps) +target_link_libraries(helloplugin PRIVATE ${LAMMPS_LINK_TARGET}) add_library(zero2plugin MODULE zero2plugin.cpp pair_zero2.cpp bond_zero2.cpp angle_zero2.cpp dihedral_zero2.cpp improper_zero2.cpp) -target_link_libraries(zero2plugin PRIVATE lammps) +target_link_libraries(zero2plugin PRIVATE ${LAMMPS_LINK_TARGET}) add_library(kspaceplugin MODULE kspaceplugin.cpp kspace_zero2.cpp) -target_link_libraries(kspaceplugin PRIVATE lammps) +target_link_libraries(kspaceplugin PRIVATE ${LAMMPS_LINK_TARGET}) add_library(runminplugin MODULE runminplugin.cpp min_cg2.cpp verlet2.cpp) -target_link_libraries(runminplugin PRIVATE lammps) +target_link_libraries(runminplugin PRIVATE ${LAMMPS_LINK_TARGET}) set_target_properties(morse2plugin nve2plugin helloplugin zero2plugin kspaceplugin runminplugin PROPERTIES PREFIX "" SUFFIX ".so") diff --git a/unittest/commands/CMakeLists.txt b/unittest/commands/CMakeLists.txt index 8386d3cb24a..5307509d319 100644 --- a/unittest/commands/CMakeLists.txt +++ b/unittest/commands/CMakeLists.txt @@ -4,11 +4,26 @@ add_executable(test_simple_commands test_simple_commands.cpp) add_library(noplugin MODULE noplugin.cpp) set_target_properties(noplugin PROPERTIES PREFIX "" SUFFIX ".so") -# tests for the plugin command require the PLUGIN package +# tests for the plugin command require the PLUGIN package. +# With a STATIC LAMMPS library the plugins must be built without embedding a +# full copy of LAMMPS (loading such a plugin corrupts memory and aborts at +# program exit, see the comment in examples/plugins/CMakeLists.txt), which +# requires the COMPILE_ONLY generator expression from CMake 3.27; the test +# executable must then export its symbols so the loaded plugins can resolve +# them. Windows is not affected and keeps linking the full library. if(PKG_PLUGIN) - add_subdirectory(${LAMMPS_DIR}/examples/plugins ${CMAKE_BINARY_DIR}/build-plugins) - add_dependencies(test_simple_commands plugins noplugin) - target_compile_definitions(test_simple_commands PRIVATE -DLMP_PLUGIN) + if(BUILD_SHARED_LIBS OR (CMAKE_VERSION VERSION_GREATER_EQUAL 3.27) + OR (CMAKE_SYSTEM_NAME STREQUAL "Windows")) + add_subdirectory(${LAMMPS_DIR}/examples/plugins ${CMAKE_BINARY_DIR}/build-plugins) + add_dependencies(test_simple_commands plugins noplugin) + target_compile_definitions(test_simple_commands PRIVATE -DLMP_PLUGIN) + if((NOT BUILD_SHARED_LIBS) AND (NOT (CMAKE_SYSTEM_NAME STREQUAL "Windows"))) + set_target_properties(test_simple_commands PROPERTIES ENABLE_EXPORTS TRUE) + endif() + else() + message(WARNING "Skipping tests for the plugin command: they require " + "CMake 3.27 or later or setting BUILD_SHARED_LIBS=on") + endif() endif() target_link_libraries(test_simple_commands PRIVATE lammps GTest::GMock) From 65eab594b8572a576f5a9ad877d07c4c100f45b6 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 6 Jul 2026 10:11:19 -0400 Subject: [PATCH 060/116] use qualified auto and apply clang-format --- src/GRANSURF/fix_surface_local.cpp | 31 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/src/GRANSURF/fix_surface_local.cpp b/src/GRANSURF/fix_surface_local.cpp index 7b14d5a7723..65213cb5484 100644 --- a/src/GRANSURF/fix_surface_local.cpp +++ b/src/GRANSURF/fix_surface_local.cpp @@ -156,7 +156,7 @@ FixSurfaceLocal::FixSurfaceLocal(LAMMPS *lmp, int narg, char **arg) : // initializations atom2connect = nullptr; - grow_arrays(atom->nmax); + FixSurfaceLocal::grow_arrays(atom->nmax); atom->add_callback(0); atom->add_callback(2); @@ -1875,7 +1875,7 @@ void FixSurfaceLocal::connectivity2d_local() char *buf; int nreturn = comm->rendezvous(RVOUS, ncount, (char *) inbuf, sizeof(InRvous), 0, proclist, point_match, 0, buf, sizeof(OutRvous), (void *) this); - auto outbuf = (OutRvous *) buf; + auto *outbuf = (OutRvous *) buf; memory->destroy(proclist); memory->sfree(inbuf); @@ -2174,7 +2174,7 @@ void FixSurfaceLocal::connectivity3d_local() char *buf; int nreturn = comm->rendezvous(RVOUS, ncount, (char *) inbuf, sizeof(InRvous), 0, proclist, point_match, 0, buf, sizeof(OutRvous), (void *) this); - auto outbuf = (OutRvous *) buf; + auto *outbuf = (OutRvous *) buf; memory->destroy(proclist); memory->sfree(inbuf); @@ -2570,7 +2570,7 @@ int FixSurfaceLocal::point_match(int n, char *inbuf, int &rflag, int *&proclist, { // access class data for epssq and bin count - auto fslptr = (FixSurfaceLocal *) ptr; + auto *fslptr = (FixSurfaceLocal *) ptr; Memory *memory = fslptr->memory; Comm *comm = fslptr->comm; @@ -2595,7 +2595,7 @@ int FixSurfaceLocal::point_match(int n, char *inbuf, int &rflag, int *&proclist, for (int i = 0; i < nmine; i++) num[i] = 0; for (int i = 0; i < nmine; i++) first[i] = -1; - auto in = (InRvous *) inbuf; + auto *in = (InRvous *) inbuf; int ibin, whichbin; @@ -3599,10 +3599,9 @@ void FixSurfaceLocal::connectivity3d_complete() jpsecond = 3; MathExtra::sub3(cpts[iconnect][1], cpts[iconnect][0], iedge); - edge_connection3d(normals[iconnect], normals[jconnect], iedge, jpfirst, jpsecond, - flatthresh, connect3d[iconnect].fflag_e1[m], - connect3d[iconnect].ewhich_e1[m], connect3d[iconnect].nside_e1[m], - connect3d[iconnect].aflag_e1[m]); + edge_connection3d(normals[iconnect], normals[jconnect], iedge, jpfirst, jpsecond, flatthresh, + connect3d[iconnect].fflag_e1[m], connect3d[iconnect].ewhich_e1[m], + connect3d[iconnect].nside_e1[m], connect3d[iconnect].aflag_e1[m]); } for (int m = 0; m < connect3d[iconnect].ne2; m++) { @@ -3627,10 +3626,9 @@ void FixSurfaceLocal::connectivity3d_complete() jpsecond = 3; MathExtra::sub3(cpts[iconnect][2], cpts[iconnect][1], iedge); - edge_connection3d(normals[iconnect], normals[jconnect], iedge, jpfirst, jpsecond, - flatthresh, connect3d[iconnect].fflag_e2[m], - connect3d[iconnect].ewhich_e2[m], connect3d[iconnect].nside_e2[m], - connect3d[iconnect].aflag_e2[m]); + edge_connection3d(normals[iconnect], normals[jconnect], iedge, jpfirst, jpsecond, flatthresh, + connect3d[iconnect].fflag_e2[m], connect3d[iconnect].ewhich_e2[m], + connect3d[iconnect].nside_e2[m], connect3d[iconnect].aflag_e2[m]); } for (int m = 0; m < connect3d[iconnect].ne3; m++) { @@ -3655,10 +3653,9 @@ void FixSurfaceLocal::connectivity3d_complete() jpsecond = 3; MathExtra::sub3(cpts[iconnect][0], cpts[iconnect][2], iedge); - edge_connection3d(normals[iconnect], normals[jconnect], iedge, jpfirst, jpsecond, - flatthresh, connect3d[iconnect].fflag_e3[m], - connect3d[iconnect].ewhich_e3[m], connect3d[iconnect].nside_e3[m], - connect3d[iconnect].aflag_e3[m]); + edge_connection3d(normals[iconnect], normals[jconnect], iedge, jpfirst, jpsecond, flatthresh, + connect3d[iconnect].fflag_e3[m], connect3d[iconnect].ewhich_e3[m], + connect3d[iconnect].nside_e3[m], connect3d[iconnect].aflag_e3[m]); } } From 9e9d8202cb56efbad51104bd8b81b486c4ec30b1 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 6 Jul 2026 10:11:57 -0400 Subject: [PATCH 061/116] use std::vector<>.data() instead of applying addressof to the first element --- src/ML-RUNNER/pair_runner.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ML-RUNNER/pair_runner.cpp b/src/ML-RUNNER/pair_runner.cpp index 6a516c01f07..872e49084a0 100644 --- a/src/ML-RUNNER/pair_runner.cpp +++ b/src/ML-RUNNER/pair_runner.cpp @@ -424,7 +424,7 @@ void PairRuNNer::compute(int eflag, int vflag) // It is completely reallocated if the global // number of atoms changed. Otherwise, only the ordering // of atoms is updated. - runner_interface_reinitialize_electrostatics(&natoms, &xyz_global[0], z_global.data()); + runner_interface_reinitialize_electrostatics(&natoms, xyz_global.data(), z_global.data()); } if (nnp_generation == 3) { @@ -448,7 +448,7 @@ void PairRuNNer::compute(int eflag, int vflag) if (rank == 0) { // Calculate long-range electrostatics on root using the global structure. runner_interface_evaluate_electrostatics_3g_part_1( - &natoms, &xyz_global[0], &total_charge, lattice, &lperiodic, &q_global[0], + &natoms, xyz_global.data(), &total_charge, lattice, &lperiodic, q_global.data(), &runner_elec_energy, elec_force_global.data(), de_dq_global.data(), runner_elec_d_energy_d_strain); } From e3fbed2df8394cb50c6553aa62082dcb96f3f50b Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 6 Jul 2026 10:12:24 -0400 Subject: [PATCH 062/116] use uppercase float qualifier --- src/MOLFILE/dump_molfile.cpp | 2 +- src/MOLFILE/molfile_interface.cpp | 76 +++++++++++++++---------------- src/MOLFILE/reader_molfile.cpp | 4 +- 3 files changed, 41 insertions(+), 41 deletions(-) diff --git a/src/MOLFILE/dump_molfile.cpp b/src/MOLFILE/dump_molfile.cpp index 9b3d0f78b09..7d7fd12eca6 100644 --- a/src/MOLFILE/dump_molfile.cpp +++ b/src/MOLFILE/dump_molfile.cpp @@ -182,7 +182,7 @@ void DumpMolfile::write() cell[0] = domain->xprd; cell[1] = domain->yprd; cell[2] = domain->zprd; - cell[3] = cell[4] = cell[5] = 90.0f; + cell[3] = cell[4] = cell[5] = 90.0F; } // nme = # of dump lines this proc will contribute to dump diff --git a/src/MOLFILE/molfile_interface.cpp b/src/MOLFILE/molfile_interface.cpp index ea6d2f4cec2..c5fd6b80c43 100644 --- a/src/MOLFILE/molfile_interface.cpp +++ b/src/MOLFILE/molfile_interface.cpp @@ -76,25 +76,25 @@ extern "C" { /* corresponding table of masses. */ static const float pte_mass[] = { - /* X */ 0.00000f, 1.00794f, 4.00260f, 6.941f, 9.012182f, 10.811f, - /* C */ 12.0107f, 14.0067f, 15.9994f, 18.9984032f, 20.1797f, - /* Na */ 22.989770f, 24.3050f, 26.981538f, 28.0855f, 30.973761f, - /* S */ 32.065f, 35.453f, 39.948f, 39.0983f, 40.078f, 44.955910f, - /* Ti */ 47.867f, 50.9415f, 51.9961f, 54.938049f, 55.845f, 58.9332f, - /* Ni */ 58.6934f, 63.546f, 65.409f, 69.723f, 72.64f, 74.92160f, - /* Se */ 78.96f, 79.904f, 83.798f, 85.4678f, 87.62f, 88.90585f, - /* Zr */ 91.224f, 92.90638f, 95.94f, 98.0f, 101.07f, 102.90550f, - /* Pd */ 106.42f, 107.8682f, 112.411f, 114.818f, 118.710f, 121.760f, - /* Te */ 127.60f, 126.90447f, 131.293f, 132.90545f, 137.327f, - /* La */ 138.9055f, 140.116f, 140.90765f, 144.24f, 145.0f, 150.36f, - /* Eu */ 151.964f, 157.25f, 158.92534f, 162.500f, 164.93032f, - /* Er */ 167.259f, 168.93421f, 173.04f, 174.967f, 178.49f, 180.9479f, - /* W */ 183.84f, 186.207f, 190.23f, 192.217f, 195.078f, 196.96655f, - /* Hg */ 200.59f, 204.3833f, 207.2f, 208.98038f, 209.0f, 210.0f, 222.0f, - /* Fr */ 223.0f, 226.0f, 227.0f, 232.0381f, 231.03588f, 238.02891f, - /* Np */ 237.0f, 244.0f, 243.0f, 247.0f, 247.0f, 251.0f, 252.0f, 257.0f, - /* Md */ 258.0f, 259.0f, 262.0f, 261.0f, 262.0f, 266.0f, 264.0f, 269.0f, - /* Mt */ 268.0f, 271.0f, 272.0f + /* X */ 0.00000F, 1.00794F, 4.00260F, 6.941F, 9.012182F, 10.811F, + /* C */ 12.0107F, 14.0067F, 15.9994F, 18.9984032F, 20.1797F, + /* Na */ 22.989770F, 24.3050F, 26.981538F, 28.0855F, 30.973761F, + /* S */ 32.065F, 35.453F, 39.948F, 39.0983F, 40.078F, 44.955910F, + /* Ti */ 47.867F, 50.9415F, 51.9961F, 54.938049F, 55.845F, 58.9332F, + /* Ni */ 58.6934F, 63.546F, 65.409F, 69.723F, 72.64F, 74.92160F, + /* Se */ 78.96F, 79.904F, 83.798F, 85.4678F, 87.62F, 88.90585F, + /* Zr */ 91.224F, 92.90638F, 95.94F, 98.0F, 101.07F, 102.90550F, + /* Pd */ 106.42F, 107.8682F, 112.411F, 114.818F, 118.710F, 121.760F, + /* Te */ 127.60F, 126.90447F, 131.293F, 132.90545F, 137.327F, + /* La */ 138.9055F, 140.116F, 140.90765F, 144.24F, 145.0F, 150.36F, + /* Eu */ 151.964F, 157.25F, 158.92534F, 162.500F, 164.93032F, + /* Er */ 167.259F, 168.93421F, 173.04F, 174.967F, 178.49F, 180.9479F, + /* W */ 183.84F, 186.207F, 190.23F, 192.217F, 195.078F, 196.96655F, + /* Hg */ 200.59F, 204.3833F, 207.2F, 208.98038F, 209.0F, 210.0F, 222.0F, + /* Fr */ 223.0F, 226.0F, 227.0F, 232.0381F, 231.03588F, 238.02891F, + /* Np */ 237.0F, 244.0F, 243.0F, 247.0F, 247.0F, 251.0F, 252.0F, 257.0F, + /* Md */ 258.0F, 259.0F, 262.0F, 261.0F, 262.0F, 266.0F, 264.0F, 269.0F, + /* Mt */ 268.0F, 271.0F, 272.0f }; /* @@ -108,25 +108,25 @@ extern "C" { * Rmin/2 parameters for (SOD, POT, CLA, CAL, MG, CES) by default. */ static const float pte_vdw_radius[] = { - /* X */ 1.5f, 1.2f, 1.4f, 1.82f, 2.0f, 2.0f, - /* C */ 1.7f, 1.55f, 1.52f, 1.47f, 1.54f, - /* Na */ 1.36f, 1.18f, 2.0f, 2.1f, 1.8f, - /* S */ 1.8f, 2.27f, 1.88f, 1.76f, 1.37f, 2.0f, - /* Ti */ 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, - /* Ni */ 1.63f, 1.4f, 1.39f, 1.07f, 2.0f, 1.85f, - /* Se */ 1.9f, 1.85f, 2.02f, 2.0f, 2.0f, 2.0f, - /* Zr */ 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, - /* Pd */ 1.63f, 1.72f, 1.58f, 1.93f, 2.17f, 2.0f, - /* Te */ 2.06f, 1.98f, 2.16f, 2.1f, 2.0f, - /* La */ 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, - /* Eu */ 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, - /* Er */ 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, - /* W */ 2.0f, 2.0f, 2.0f, 2.0f, 1.72f, 1.66f, - /* Hg */ 1.55f, 1.96f, 2.02f, 2.0f, 2.0f, 2.0f, 2.0f, - /* Fr */ 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 1.86f, - /* Np */ 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, - /* Md */ 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, - /* Mt */ 2.0f, 2.0f, 2.0f + /* X */ 1.5F, 1.2F, 1.4F, 1.82F, 2.0F, 2.0F, + /* C */ 1.7F, 1.55F, 1.52F, 1.47F, 1.54F, + /* Na */ 1.36F, 1.18F, 2.0F, 2.1F, 1.8F, + /* S */ 1.8F, 2.27F, 1.88F, 1.76F, 1.37F, 2.0F, + /* Ti */ 2.0F, 2.0F, 2.0F, 2.0F, 2.0F, 2.0F, + /* Ni */ 1.63F, 1.4F, 1.39F, 1.07F, 2.0F, 1.85F, + /* Se */ 1.9F, 1.85F, 2.02F, 2.0F, 2.0F, 2.0F, + /* Zr */ 2.0F, 2.0F, 2.0F, 2.0F, 2.0F, 2.0F, + /* Pd */ 1.63F, 1.72F, 1.58F, 1.93F, 2.17F, 2.0F, + /* Te */ 2.06F, 1.98F, 2.16F, 2.1F, 2.0F, + /* La */ 2.0F, 2.0F, 2.0F, 2.0F, 2.0F, 2.0F, + /* Eu */ 2.0F, 2.0F, 2.0F, 2.0F, 2.0F, + /* Er */ 2.0F, 2.0F, 2.0F, 2.0F, 2.0F, 2.0F, + /* W */ 2.0F, 2.0F, 2.0F, 2.0F, 1.72F, 1.66F, + /* Hg */ 1.55F, 1.96F, 2.02F, 2.0F, 2.0F, 2.0F, 2.0F, + /* Fr */ 2.0F, 2.0F, 2.0F, 2.0F, 2.0F, 1.86F, + /* Np */ 2.0F, 2.0F, 2.0F, 2.0F, 2.0F, 2.0F, 2.0F, 2.0F, + /* Md */ 2.0F, 2.0F, 2.0F, 2.0F, 2.0F, 2.0F, 2.0F, 2.0F, + /* Mt */ 2.0F, 2.0F, 2.0f }; /* lookup functions */ diff --git a/src/MOLFILE/reader_molfile.cpp b/src/MOLFILE/reader_molfile.cpp index 81f2fa3d105..ae3f1b9695c 100644 --- a/src/MOLFILE/reader_molfile.cpp +++ b/src/MOLFILE/reader_molfile.cpp @@ -196,8 +196,8 @@ bigint ReaderMolfile::read_header(double box[3][3], int &boxinfo, int &triclinic if (!is_smalldiff(cell[0]*cell[1]*cell[2], 0.0f)) { boxinfo = 1; - if (is_smalldiff(cell[3],90.0f) && is_smalldiff(cell[4],90.0f) && - is_smalldiff(cell[5],90.0f)) { + if (is_smalldiff(cell[3],90.0F) && is_smalldiff(cell[4],90.0F) && + is_smalldiff(cell[5],90.0F)) { triclinic = 0; From ab077bde11a7cc5ebaec0d2a880ed4014fd03f66 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 6 Jul 2026 12:02:24 -0400 Subject: [PATCH 063/116] exclude VMD plugin headers from static code analysis --- lib/molfile/molfile_plugin.h | 4 ++++ lib/molfile/vmdplugin.h | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/lib/molfile/molfile_plugin.h b/lib/molfile/molfile_plugin.h index a417b82e96e..e49c2a1f788 100644 --- a/lib/molfile/molfile_plugin.h +++ b/lib/molfile/molfile_plugin.h @@ -15,6 +15,8 @@ * ***************************************************************************/ +// NOLINTBEGIN + /** @file * API for C extensions to define a way to load structure, coordinate, * trajectory, and volumetric data files @@ -987,3 +989,5 @@ typedef struct { } molfile_plugin_t; #endif + +// NOLINTEND diff --git a/lib/molfile/vmdplugin.h b/lib/molfile/vmdplugin.h index 9336d3e24fc..acf0a0404f6 100644 --- a/lib/molfile/vmdplugin.h +++ b/lib/molfile/vmdplugin.h @@ -15,6 +15,8 @@ * ***************************************************************************/ +// NOLINTBEGIN + /** @file * This header must be included by every VMD plugin library. It defines the * API for every plugin so that VMD can organize the plugins it finds. @@ -189,3 +191,5 @@ VMDPLUGIN_EXTERN int VMDPLUGIN_register_tcl(void *, void *tcl_interp, VMDPLUGIN_EXTERN int VMDPLUGIN_fini(void); #endif /* VMD_PLUGIN_H */ + +// NOLINTEND From 98cd29027436b785eb37ee84799f8476c3b10eb9 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 6 Jul 2026 12:10:25 -0400 Subject: [PATCH 064/116] correct link --- doc/src/Howto_granular_surfaces.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/Howto_granular_surfaces.rst b/doc/src/Howto_granular_surfaces.rst index c5b516c520f..6374c19d73e 100644 --- a/doc/src/Howto_granular_surfaces.rst +++ b/doc/src/Howto_granular_surfaces.rst @@ -419,7 +419,7 @@ unchecked surface with the largest overlap and repeats the process. .. figure:: img/gransurf_consistent_side.png :figwidth: 33% :align: right - :target: _images/consistent_side.png + :target: _images/gransurf_consistent_side.png Next, LAMMPS clusters all contacted and connected lines/triangles into distinct composite sets each consisting of mutually flat line/triangle From 5b18e3c38628eca5c7b7be52b0ffbaa5be151fad Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 6 Jul 2026 13:52:21 -0400 Subject: [PATCH 065/116] convert a few more qualifier suffixes to upper case for consistency --- src/MOLFILE/molfile_interface.cpp | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/MOLFILE/molfile_interface.cpp b/src/MOLFILE/molfile_interface.cpp index c5fd6b80c43..59df145719b 100644 --- a/src/MOLFILE/molfile_interface.cpp +++ b/src/MOLFILE/molfile_interface.cpp @@ -94,7 +94,7 @@ extern "C" { /* Fr */ 223.0F, 226.0F, 227.0F, 232.0381F, 231.03588F, 238.02891F, /* Np */ 237.0F, 244.0F, 243.0F, 247.0F, 247.0F, 251.0F, 252.0F, 257.0F, /* Md */ 258.0F, 259.0F, 262.0F, 261.0F, 262.0F, 266.0F, 264.0F, 269.0F, - /* Mt */ 268.0F, 271.0F, 272.0f + /* Mt */ 268.0F, 271.0F, 272.0F }; /* @@ -126,7 +126,7 @@ extern "C" { /* Fr */ 2.0F, 2.0F, 2.0F, 2.0F, 2.0F, 1.86F, /* Np */ 2.0F, 2.0F, 2.0F, 2.0F, 2.0F, 2.0F, 2.0F, 2.0F, /* Md */ 2.0F, 2.0F, 2.0F, 2.0F, 2.0F, 2.0F, 2.0F, 2.0F, - /* Mt */ 2.0F, 2.0F, 2.0f + /* Mt */ 2.0F, 2.0F, 2.0F }; /* lookup functions */ @@ -508,12 +508,12 @@ int MolfileInterface::timestep(float *coords, float *vels, t->beta = cell[4]; t->gamma = cell[5]; } else { - t->A = 0.0f; - t->B = 0.0f; - t->C = 0.0f; - t->alpha = 90.0f; - t->beta = 90.0f; - t->gamma = 90.0f; + t->A = 0.0F; + t->B = 0.0F; + t->C = 0.0F; + t->alpha = 90.0F; + t->beta = 90.0F; + t->gamma = 90.0F; } if (simtime) @@ -530,12 +530,12 @@ int MolfileInterface::timestep(float *coords, float *vels, } else { t->coords = coords; t->velocities = vels; - t->A = 0.0f; - t->B = 0.0f; - t->C = 0.0f; - t->alpha = 90.0f; - t->beta = 90.0f; - t->gamma = 90.0f; + t->A = 0.0F; + t->B = 0.0F; + t->C = 0.0F; + t->alpha = 90.0F; + t->beta = 90.0F; + t->gamma = 90.0F; t->physical_time = 0.0; rv = p->read_next_timestep(_ptr, _natoms, t); if (cell != nullptr) { @@ -571,7 +571,7 @@ int MolfileInterface::timestep(float *coords, float *vels, // single precision floating point props static float read_float_property(molfile_atom_t &a, const int propid) { - float prop = 0.0f; + float prop = 0.0F; int iprop = 0; PROPUPDATE(MolfileInterface::P_OCCP,occupancy,prop); PROPUPDATE(MolfileInterface::P_BFAC,bfactor,prop); From fd74722ba689ad05ff3933c9c501f02f19a25367 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 6 Jul 2026 14:04:42 -0400 Subject: [PATCH 066/116] apply RAII and pass reference instead of pointer --- src/GRANSURF/fix_surface.cpp | 52 ++++++++++++++--------------- src/GRANSURF/fix_surface.h | 4 +-- src/GRANSURF/fix_surface_global.cpp | 10 +++--- src/GRANSURF/fix_surface_local.cpp | 6 ++-- 4 files changed, 35 insertions(+), 37 deletions(-) diff --git a/src/GRANSURF/fix_surface.cpp b/src/GRANSURF/fix_surface.cpp index da13844968e..83e2046f6a1 100644 --- a/src/GRANSURF/fix_surface.cpp +++ b/src/GRANSURF/fix_surface.cpp @@ -181,7 +181,7 @@ void FixSurface::corner_connection3d(const double *inorm, const double *jnorm, i ------------------------------------------------------------------------- */ void FixSurface::extract_from_molecule(char *molID, - std::map, int> *hash, + std::map, int> &hash, int &npoints, int &maxpoints, Point *&points, int &nlines, Line *&lines, int &ntris, Tri *&tris) { @@ -227,36 +227,36 @@ void FixSurface::extract_from_molecule(char *molID, // only lines in the same molecule are connected auto key = std::make_tuple(epts[i][0], epts[i][1], 0.0, molline[i]); - if (hash->find(key) == hash->end()) { + if (hash.find(key) == hash.end()) { if (npoints == maxpoints) { maxpoints += DELTA; points = (Point *) memory->srealloc(points, maxpoints * sizeof(Point), "surface:points"); } - (*hash)[key] = npoints; + hash[key] = npoints; points[npoints].x[0] = epts[i][0]; points[npoints].x[1] = epts[i][1]; points[npoints].x[2] = 0.0; lines[iline].p1 = npoints; npoints++; } else - lines[iline].p1 = (*hash)[key]; + lines[iline].p1 = hash[key]; key = std::make_tuple(epts[i][2], epts[i][3], 0.0, molline[i]); - if (hash->find(key) == hash->end()) { + if (hash.find(key) == hash.end()) { if (npoints == maxpoints) { maxpoints += DELTA; points = (Point *) memory->srealloc(points, maxpoints * sizeof(Point), "surface:points"); } - (*hash)[key] = npoints; + hash[key] = npoints; points[npoints].x[0] = epts[i][2]; points[npoints].x[1] = epts[i][3]; points[npoints].x[2] = 0.0; lines[iline].p2 = npoints; npoints++; } else - lines[iline].p2 = (*hash)[key]; + lines[iline].p2 = hash[key]; iline++; } @@ -274,52 +274,52 @@ void FixSurface::extract_from_molecule(char *molID, // only tris in the same molecule are connected auto key = std::make_tuple(cpts[i][0], cpts[i][1], cpts[i][2], moltri[i]); - if (hash->find(key) == hash->end()) { + if (hash.find(key) == hash.end()) { if (npoints == maxpoints) { maxpoints += DELTA; points = (Point *) memory->srealloc(points, maxpoints * sizeof(Point), "surface:points"); } - (*hash)[key] = npoints; + hash[key] = npoints; points[npoints].x[0] = cpts[i][0]; points[npoints].x[1] = cpts[i][1]; points[npoints].x[2] = cpts[i][2]; tris[itri].p1 = npoints; npoints++; } else - tris[itri].p1 = (*hash)[key]; + tris[itri].p1 = hash[key]; key = std::make_tuple(cpts[i][3], cpts[i][4], cpts[i][5], moltri[i]); - if (hash->find(key) == hash->end()) { + if (hash.find(key) == hash.end()) { if (npoints == maxpoints) { maxpoints += DELTA; points = (Point *) memory->srealloc(points, maxpoints * sizeof(Point), "surface:points"); } - (*hash)[key] = npoints; + hash[key] = npoints; points[npoints].x[0] = cpts[i][3]; points[npoints].x[1] = cpts[i][4]; points[npoints].x[2] = cpts[i][5]; tris[itri].p2 = npoints; npoints++; } else - tris[itri].p2 = (*hash)[key]; + tris[itri].p2 = hash[key]; key = std::make_tuple(cpts[i][6], cpts[i][7], cpts[i][8], moltri[i]); - if (hash->find(key) == hash->end()) { + if (hash.find(key) == hash.end()) { if (npoints == maxpoints) { maxpoints += DELTA; points = (Point *) memory->srealloc(points, maxpoints * sizeof(Point), "surface:points"); } - (*hash)[key] = npoints; + hash[key] = npoints; points[npoints].x[0] = cpts[i][6]; points[npoints].x[1] = cpts[i][7]; points[npoints].x[2] = cpts[i][8]; tris[itri].p3 = npoints; npoints++; } else - tris[itri].p3 = (*hash)[key]; + tris[itri].p3 = hash[key]; itri++; } @@ -334,7 +334,7 @@ void FixSurface::extract_from_molecule(char *molID, ------------------------------------------------------------------------- */ void FixSurface::extract_from_stlfile(char *filename, int stype, int smol, - std::map, int> *hash, + std::map, int> &hash, int &npoints, int &maxpoints, Point *&points, int &ntris, Tri *&tris) { @@ -367,49 +367,49 @@ void FixSurface::extract_from_stlfile(char *filename, int stype, int smol, // only tris in the same molecule are connected auto key = std::make_tuple(stltris[itri_new][0], stltris[itri_new][1], stltris[itri_new][2], smol); - if (hash->find(key) == hash->end()) { + if (hash.find(key) == hash.end()) { if (npoints == maxpoints) { maxpoints += DELTA; points = (Point *) memory->srealloc(points, maxpoints * sizeof(Point), "surface:points"); } - (*hash)[key] = npoints; + hash[key] = npoints; points[npoints].x[0] = stltris[itri_new][0]; points[npoints].x[1] = stltris[itri_new][1]; points[npoints].x[2] = stltris[itri_new][2]; tris[itri].p1 = npoints; npoints++; } else - tris[itri].p1 = (*hash)[key]; + tris[itri].p1 = hash[key]; key = std::make_tuple(stltris[itri_new][3], stltris[itri_new][4], stltris[itri_new][5], smol); - if (hash->find(key) == hash->end()) { + if (hash.find(key) == hash.end()) { if (npoints == maxpoints) { maxpoints += DELTA; points = (Point *) memory->srealloc(points, maxpoints * sizeof(Point), "surface:points"); } - (*hash)[key] = npoints; + hash[key] = npoints; points[npoints].x[0] = stltris[itri_new][3]; points[npoints].x[1] = stltris[itri_new][4]; points[npoints].x[2] = stltris[itri_new][5]; tris[itri].p2 = npoints; npoints++; } else - tris[itri].p2 = (*hash)[key]; + tris[itri].p2 = hash[key]; key = std::make_tuple(stltris[itri_new][6], stltris[itri_new][7], stltris[itri_new][8], smol); - if (hash->find(key) == hash->end()) { + if (hash.find(key) == hash.end()) { if (npoints == maxpoints) { maxpoints += DELTA; points = (Point *) memory->srealloc(points, maxpoints * sizeof(Point), "surface:points"); } - (*hash)[key] = npoints; + hash[key] = npoints; points[npoints].x[0] = stltris[itri_new][6]; points[npoints].x[1] = stltris[itri_new][7]; points[npoints].x[2] = stltris[itri_new][8]; tris[itri].p3 = npoints; npoints++; } else - tris[itri].p3 = (*hash)[key]; + tris[itri].p3 = hash[key]; } } diff --git a/src/GRANSURF/fix_surface.h b/src/GRANSURF/fix_surface.h index d5393d3e8e0..770768c974e 100644 --- a/src/GRANSURF/fix_surface.h +++ b/src/GRANSURF/fix_surface.h @@ -154,10 +154,10 @@ class FixSurface : public Fix { // methods common to both global and local surfs - void extract_from_molecule(char *, std::map, int> *, + void extract_from_molecule(char *, std::map, int> &, int &, int &, Point *&, int &, Line *&, int &, Tri *&); void extract_from_stlfile(char *, int, int, - std::map, int> *, int &, int &, + std::map, int> &, int &, int &, Point *&, int &, Tri *&); void connectivity2d_global(int, int, Line *, Connect2d *&, int **&, int **&); diff --git a/src/GRANSURF/fix_surface_global.cpp b/src/GRANSURF/fix_surface_global.cpp index 232350e7801..b538b394c3b 100644 --- a/src/GRANSURF/fix_surface_global.cpp +++ b/src/GRANSURF/fix_surface_global.cpp @@ -110,19 +110,19 @@ FixSurfaceGlobal::FixSurfaceGlobal(LAMMPS *lmp, int narg, char **arg) : if (iarg+2 > narg) utils::missing_cmd_args(FLERR, "fix surface/global input", error); if (strcmp(arg[iarg+1],"mol") == 0) { if (iarg+3 > narg) utils::missing_cmd_args(FLERR, "fix surface/global input mol", error); - extract_from_molecule(arg[iarg+2],&hash,npoints,maxpoints,points,nlines,lines,ntris,tris); + extract_from_molecule(arg[iarg+2],hash,npoints,maxpoints,points,nlines,lines,ntris,tris); iarg += 3; } else if (strcmp(arg[iarg+1],"stl") == 0) { if (iarg+5 > narg) utils::missing_cmd_args(FLERR, "fix surface/global input stl", error); int stype = utils::inumeric(FLERR,arg[iarg+2],false,lmp); int smol = utils::inumeric(FLERR,arg[iarg+3],false,lmp); - extract_from_stlfile(arg[iarg+4],stype,(tagint) smol,&hash,npoints,maxpoints,points,ntris,tris); + extract_from_stlfile(arg[iarg+4],stype,(tagint) smol,hash,npoints,maxpoints,points,ntris,tris); iarg += 5; } else error->all(FLERR, iarg+1, "Unknown fix surface/global input keyword: {}", arg[iarg+1]); } else break; - ninput++; } + hash.clear(); // free memory if (ninput == 0) error->all(FLERR, 2, "Fix surface/global command requires using the input keyword"); @@ -1187,7 +1187,7 @@ void FixSurfaceGlobal::post_force(int /*vflag*/) int itype, jtype, external_flag, priority; double xtmp, ytmp, ztmp, radi, delx, dely, delz, meff; int *ilist, *jlist, *numneigh, **firstneigh; - int *touch, **firstflag, touch_flag; + int *touch, **firstflag; double rsq, rsq_com, rmag, radsum, max_overlap, dot; double x_min_image[3], norm[3], dr[3], contact[3], ds[3], xc[3], vc[3], omegac[3]; double *forces, *torquesi, *history, *allhistory, **firsthistory; @@ -1497,7 +1497,7 @@ void FixSurfaceGlobal::post_force(int /*vflag*/) } // guaranteed in contact, but need to calculate intermediate variables - touch_flag = model->check_contact(); + model->check_contact(); if (use_history) { // Check if another flat contact has a stored history diff --git a/src/GRANSURF/fix_surface_local.cpp b/src/GRANSURF/fix_surface_local.cpp index 65213cb5484..058ecdc0f1c 100644 --- a/src/GRANSURF/fix_surface_local.cpp +++ b/src/GRANSURF/fix_surface_local.cpp @@ -300,8 +300,7 @@ void FixSurfaceLocal::post_constructor() lines = nullptr; tris = nullptr; - std::map, int> *hash = - new std::map, int>(); + std::map, int> hash; for (int i = 0; i < ninput; i++) { int mode = input_modes[i]; @@ -325,8 +324,7 @@ void FixSurfaceLocal::post_constructor() extract_from_stlfile(sourceID, stype, smol, hash, npoints, maxpoints, points, ntris, tris); } } - - delete hash; + hash.clear(); // free memory memory->sfree(input_modes); for (int i = 0; i < ninput; i++) delete[] input_sources[i]; From 623982a5779c23b008b1d2ecc1f81860d65e4568 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 6 Jul 2026 14:10:01 -0400 Subject: [PATCH 067/116] cleaner for static code analysis --- src/GRANSURF/pair_surf_granular.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/GRANSURF/pair_surf_granular.cpp b/src/GRANSURF/pair_surf_granular.cpp index bf3a467bfc0..82270ec7098 100644 --- a/src/GRANSURF/pair_surf_granular.cpp +++ b/src/GRANSURF/pair_surf_granular.cpp @@ -131,7 +131,7 @@ void PairSurfGranular::compute(int eflag, int vflag) if (fix_rigid) { int tmp; int *body = (int *) fix_rigid->extract("body", tmp); - double *mass_body = (double *) fix_rigid->extract("masstotal", tmp); + auto *mass_body = (double *) fix_rigid->extract("masstotal", tmp); if (atom->nmax > nmax) { memory->destroy(mass_rigid); nmax = atom->nmax; @@ -259,7 +259,7 @@ void PairSurfGranular::compute(int eflag, int vflag) corner = corners[tri[j]]; jflag = SurfExtra::overlap_sphere_tri(x[i], radi, &corner[0], &corner[3], &corner[6], &corner[9], contact, dr, rsq); - } + } else jflag = 0; // should not happen but set to make static code analysis happy // unset non-touching neighbors From 7b3a8f1186129edc473733253107f08ccf64155c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 6 Jul 2026 14:10:09 -0400 Subject: [PATCH 068/116] modernize --- src/ML-RUNNER/pair_runner.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ML-RUNNER/pair_runner.cpp b/src/ML-RUNNER/pair_runner.cpp index 872e49084a0..035c36bdb16 100644 --- a/src/ML-RUNNER/pair_runner.cpp +++ b/src/ML-RUNNER/pair_runner.cpp @@ -712,7 +712,7 @@ void PairRuNNer::compute(int eflag, int vflag) for (i = 0; i < num_committee_members; i++) pvector[i] = committee_energy[i] / cfenergy; // Charges if charge atom style is used - if (q != NULL) { + if (q != nullptr) { // The q array does not seem to get reset to zero every timestep by LAMMPS memset(q, 0, nmax * (sizeof *q)); for (ii = 0; ii < nall; ii++) { From c1fc66f17b7174e90300f2e3d59d30639f3ed017 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 6 Jul 2026 14:14:18 -0400 Subject: [PATCH 069/116] modernize and skip linting on imported legacy code --- src/MOLFILE/dump_molfile.cpp | 2 +- src/MOLFILE/dump_molfile.h | 2 +- src/MOLFILE/molfile_interface.cpp | 2 ++ src/MOLFILE/reader_molfile.cpp | 2 +- 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/MOLFILE/dump_molfile.cpp b/src/MOLFILE/dump_molfile.cpp index 7d7fd12eca6..94874d019ae 100644 --- a/src/MOLFILE/dump_molfile.cpp +++ b/src/MOLFILE/dump_molfile.cpp @@ -32,7 +32,7 @@ #include "molfile_interface.h" using namespace LAMMPS_NS; -typedef MolfileInterface MFI; +using MFI = MolfileInterface; // syntax: // dump molfile [] diff --git a/src/MOLFILE/dump_molfile.h b/src/MOLFILE/dump_molfile.h index c52b51753a9..80560e6a158 100644 --- a/src/MOLFILE/dump_molfile.h +++ b/src/MOLFILE/dump_molfile.h @@ -31,6 +31,7 @@ class DumpMolfile : public Dump { DumpMolfile(LAMMPS *, int, char **); ~DumpMolfile() override; void write() override; + double memory_usage() override; protected: class MolfileInterface *mf; //< handles low-level I/O @@ -51,7 +52,6 @@ class DumpMolfile : public Dump { void write_header(bigint) override {}; void pack(tagint *) override; void write_data(int, double *) override; - double memory_usage() override; void openfile() override; }; diff --git a/src/MOLFILE/molfile_interface.cpp b/src/MOLFILE/molfile_interface.cpp index 59df145719b..00ca6bca785 100644 --- a/src/MOLFILE/molfile_interface.cpp +++ b/src/MOLFILE/molfile_interface.cpp @@ -36,6 +36,7 @@ #define DEBUG 0 extern "C" { + // NOLINTBEGIN typedef int (*initfunc)(); typedef int (*regfunc)(void *, vmdplugin_register_cb); typedef int (*finifunc)(); @@ -57,6 +58,7 @@ extern "C" { } return 0; } + // NOLINTEND /* periodic table of elements for translation of ordinal to atom type */ static const char *pte_label[] = { diff --git a/src/MOLFILE/reader_molfile.cpp b/src/MOLFILE/reader_molfile.cpp index ae3f1b9695c..d891940a341 100644 --- a/src/MOLFILE/reader_molfile.cpp +++ b/src/MOLFILE/reader_molfile.cpp @@ -26,8 +26,8 @@ #include using namespace LAMMPS_NS; -typedef MolfileInterface MFI; using namespace MathConst; +using MFI = MolfileInterface; static constexpr double SMALL = 1.0e-6; From d1fb14f0ccf37bd5274d47aaa453d1291d89f83f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 6 Jul 2026 14:15:37 -0400 Subject: [PATCH 070/116] make one more attribute suffix uppercase --- src/MOLFILE/reader_molfile.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/MOLFILE/reader_molfile.cpp b/src/MOLFILE/reader_molfile.cpp index d891940a341..d374daae59f 100644 --- a/src/MOLFILE/reader_molfile.cpp +++ b/src/MOLFILE/reader_molfile.cpp @@ -194,7 +194,7 @@ bigint ReaderMolfile::read_header(double box[3][3], int &boxinfo, int &triclinic // heuristics to determine if we have boxinfo (first if) // and whether we have an orthogonal box (second if) - if (!is_smalldiff(cell[0]*cell[1]*cell[2], 0.0f)) { + if (!is_smalldiff(cell[0]*cell[1]*cell[2], 0.0F)) { boxinfo = 1; if (is_smalldiff(cell[3],90.0F) && is_smalldiff(cell[4],90.0F) && is_smalldiff(cell[5],90.0F)) { From 39f69d8a853cb289fa768844cb9aabc4d246fdb5 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 7 Jul 2026 03:28:43 -0400 Subject: [PATCH 071/116] fix granular/mdr: get the granular neighbor history fix from the pair style Pair style granular registers its neighbor history fix under an id with the pair style instance number appended (since the addition of pair style surf/granular in c18c911ea7), so the hardcoded lookup of "NEIGH_HISTORY_GRANULAR" in FixGranularMDR::setup_pre_force() always failed and any input using fix granular/mdr aborted at setup with "Cannot find fix storing granular history". Take the fix pointer from the pair style through a new get_fix_history() accessor instead, following the existing get_size_history() idiom. Verified with a shortened version of examples/granular/in.tableting.200. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01EjV3TNphDvqgt2WwrHH8wV --- src/GRANULAR/fix_granular_mdr.cpp | 4 +++- src/GRANULAR/pair_granular.h | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/GRANULAR/fix_granular_mdr.cpp b/src/GRANULAR/fix_granular_mdr.cpp index 7bc24252b06..8590ea0b279 100644 --- a/src/GRANULAR/fix_granular_mdr.cpp +++ b/src/GRANULAR/fix_granular_mdr.cpp @@ -181,7 +181,9 @@ void FixGranularMDR::setup_pre_force(int /*vflag*/) norm_model->get_damp(), norm_model2->get_damp()); } - fix_history = dynamic_cast(modify->get_fix_by_id("NEIGH_HISTORY_GRANULAR")); + // take the neighbor history fix directly from the pair style; it registers + // the fix under an id with an instance number appended + fix_history = pair->get_fix_history(); if (!fix_history) error->all(FLERR, Error::NOLASTLINE, "Cannot find fix storing granular history"); pre_force(0); diff --git a/src/GRANULAR/pair_granular.h b/src/GRANULAR/pair_granular.h index 65ed6603d2f..84a231a8377 100644 --- a/src/GRANULAR/pair_granular.h +++ b/src/GRANULAR/pair_granular.h @@ -46,6 +46,7 @@ class PairGranular : public Pair { double memory_usage() override; void transfer_history(double *, double *, int, int) override; [[nodiscard]] int get_size_history() const { return size_history; } + [[nodiscard]] class FixNeighHistory *get_fix_history() const { return fix_history; } // granular models class Granular_NS::GranularModel** models_list; From e2aeedee5749d9b89b064ea1e77c184e2cb67248 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 7 Jul 2026 03:29:06 -0400 Subject: [PATCH 072/116] Coverity followup: consistent MDR wall guard, MDI plugin leak, single() history init - fix granular/mdr: the guard added in 2bcd8ef584 against a failed dynamic_cast of a wall/gran/region fix only protected the first parameter comparison; the remaining four dereferenced the possibly null model pointer. Make the null check terminal so all comparisons are provably safe (CID 1663557, supersedes the partial fix for CID 1662526). Verified against examples/granular/in.tableting.200 plus a negative test with a hertz wall model. - mdi plugin: a repeated 'extra' or 'command' keyword leaked the substituted copy of the previous value (CID 1663474); also correct a copy-pasted allocation label. - pair granular: initialize the history pointers in single() so an uninitialized pointer cannot be copied into the contact model when the pair style does not use history (CID 1662858). Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01EjV3TNphDvqgt2WwrHH8wV --- src/GRANULAR/fix_granular_mdr.cpp | 7 +++---- src/GRANULAR/pair_granular.cpp | 2 +- src/MDI/mdi_plugin.cpp | 4 +++- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/GRANULAR/fix_granular_mdr.cpp b/src/GRANULAR/fix_granular_mdr.cpp index 8590ea0b279..248eb102fff 100644 --- a/src/GRANULAR/fix_granular_mdr.cpp +++ b/src/GRANULAR/fix_granular_mdr.cpp @@ -148,13 +148,12 @@ void FixGranularMDR::setup_pre_force(int /*vflag*/) "MDR model currently only supports fix wall/gran/region, not fix wall/gran"); fix = dynamic_cast(ifix); - if (fix && fix->model->normal_model->name != "mdr") + norm_model2 = fix ? dynamic_cast(fix->model->normal_model) : nullptr; + if (!norm_model2) error->all(FLERR, Error::NOLASTLINE, "Fix wall/gran/region must use an MDR normal model when using an MDR pair model"); - norm_model2 = fix ? dynamic_cast(fix->model->normal_model) : nullptr; - - if (norm_model && norm_model2 && fabs(norm_model->get_emod() - norm_model2->get_emod()) > EPSILON) + if (fabs(norm_model->get_emod() - norm_model2->get_emod()) > EPSILON) error->all( FLERR, Error::NOLASTLINE, "Young's modulus in pair style, {}, does not agree with value {} in fix gran/wall/region", diff --git a/src/GRANULAR/pair_granular.cpp b/src/GRANULAR/pair_granular.cpp index 4da1377614a..46634544e12 100644 --- a/src/GRANULAR/pair_granular.cpp +++ b/src/GRANULAR/pair_granular.cpp @@ -750,7 +750,7 @@ double PairGranular::single(int i, int j, int itype, int jtype, model->history_update = 0; // Don't update history // If history is needed - double *history,*allhistory; + double *history = nullptr, *allhistory = nullptr; int jnum = list->numneigh[i]; int *jlist = list->firstneigh[i]; if (use_history) { diff --git a/src/MDI/mdi_plugin.cpp b/src/MDI/mdi_plugin.cpp index 45de50d967b..309431963ea 100644 --- a/src/MDI/mdi_plugin.cpp +++ b/src/MDI/mdi_plugin.cpp @@ -61,6 +61,7 @@ MDIPlugin::MDIPlugin(LAMMPS *_lmp, int narg, char **arg) : Pointers(_lmp) iarg += 2; } else if (strcmp(arg[iarg], "extra") == 0) { if (iarg + 2 > narg) error->all(FLERR, "Illegal mdi plugin command"); + memory->sfree(extra_arg); extra_arg = arg[iarg + 1]; // do variable substitution in multiple word extra_arg @@ -77,12 +78,13 @@ MDIPlugin::MDIPlugin(LAMMPS *_lmp, int narg, char **arg) : Pointers(_lmp) iarg += 2; } else if (strcmp(arg[iarg], "command") == 0) { if (iarg + 2 > narg) error->all(FLERR, "Illegal mdi plugin command"); + memory->sfree(lammps_command); lammps_command = arg[iarg + 1]; // do variable substitution in multiple word lammps_command int ncopy = strlen(lammps_command) + 1; - char *copy = (char *) memory->smalloc(ncopy,"mdi_plugin:work"); + char *copy = (char *) memory->smalloc(ncopy,"mdi_plugin:copy"); strncpy(copy, lammps_command, ncopy); char *work = (char *) memory->smalloc(ncopy,"mdi_plugin:work"); int nwork = ncopy; From 9d7085c3e5d2fdaa523df56a6a9394daaacea18e Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 7 Jul 2026 04:01:24 -0400 Subject: [PATCH 073/116] Initialize the remaining constructor members flagged by the Coverity rescan The uninitialized-constructor-member checker reports one member per class and scan; fixing that member re-attaches the same CID to the next uninitialized member of the class. This batch initializes the remaining members of the classes already treated in earlier passes so the CIDs can retire: thr_data eatom_* (1661005), ave/sphere/atom cutsq (1661101), qeq/qtpie cached neighbor-list pointers and qtpie H.n/H.m (1661900, 1661288), comm_tiled maxoverlap/maxsend/maxrecv via init_pointers() (1661621, 1662871), npair flag_half_multi (1661856), grid2d/grid3d adjacent in both constructors (1662305, 1662554, 1661906, 1662232), pair granular freeze_group_bit (1662461), compute pressure/bocs dimension (1662610), pair runner nnp_generation (1662613), pair eam/apip tabulation scalars (1662812), and phonon tool Green ndim/dw (1662139). Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01EjV3TNphDvqgt2WwrHH8wV --- src/APIP/pair_eam_apip.cpp | 2 ++ src/BOCS/compute_pressure_bocs.cpp | 1 + src/EXTRA-COMPUTE/compute_ave_sphere_atom.cpp | 1 + src/GRANULAR/pair_granular.cpp | 1 + src/ML-RUNNER/pair_runner.cpp | 1 + src/OPENMP/thr_data.cpp | 3 ++- src/REAXFF/fix_qeq_reaxff.cpp | 2 ++ src/REAXFF/fix_qtpie_reaxff.cpp | 3 +++ src/comm_tiled.cpp | 3 +++ src/grid2d.cpp | 2 ++ src/grid3d.cpp | 2 ++ src/npair.cpp | 1 + tools/phonon/green.cpp | 1 + 13 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/APIP/pair_eam_apip.cpp b/src/APIP/pair_eam_apip.cpp index 9fbdbb91316..f59fc9574cf 100644 --- a/src/APIP/pair_eam_apip.cpp +++ b/src/APIP/pair_eam_apip.cpp @@ -61,6 +61,8 @@ PairEAMAPIP::PairEAMAPIP(LAMMPS *lmp) : Pair(lmp) z2r = nullptr; scale = nullptr; + nrho = nr = nfrho = nrhor = nz2r = 0; + dr = rdr = drho = rdrho = 0.0; rhomax = rhomin = 0.0; frho_spline = nullptr; diff --git a/src/BOCS/compute_pressure_bocs.cpp b/src/BOCS/compute_pressure_bocs.cpp index cc146c9fbdc..958f757b848 100644 --- a/src/BOCS/compute_pressure_bocs.cpp +++ b/src/BOCS/compute_pressure_bocs.cpp @@ -116,6 +116,7 @@ ComputePressureBocs::ComputePressureBocs(LAMMPS *lmp, int narg, char **arg) : "Compute pressure/bocs requires temperature ID to include kinetic energy"); vector = new double[size_vector]; + dimension = domain->dimension; nvirial = 0; vptr = nullptr; diff --git a/src/EXTRA-COMPUTE/compute_ave_sphere_atom.cpp b/src/EXTRA-COMPUTE/compute_ave_sphere_atom.cpp index 183b84b0e90..b3b6bd97ff2 100644 --- a/src/EXTRA-COMPUTE/compute_ave_sphere_atom.cpp +++ b/src/EXTRA-COMPUTE/compute_ave_sphere_atom.cpp @@ -62,6 +62,7 @@ ComputeAveSphereAtom::ComputeAveSphereAtom(LAMMPS *lmp, int narg, char **arg) : comm_forward = 3; nmax = 0; + cutsq = 0.0; volume = 0.0; } diff --git a/src/GRANULAR/pair_granular.cpp b/src/GRANULAR/pair_granular.cpp index 46634544e12..10d969db422 100644 --- a/src/GRANULAR/pair_granular.cpp +++ b/src/GRANULAR/pair_granular.cpp @@ -56,6 +56,7 @@ PairGranular::PairGranular(LAMMPS *lmp) : Pair(lmp), fix_rigid(nullptr) svector = new double[single_extra]; neighprev = 0; + freeze_group_bit = 0; nmax = 0; mass_rigid = nullptr; diff --git a/src/ML-RUNNER/pair_runner.cpp b/src/ML-RUNNER/pair_runner.cpp index c7262ba2856..f2b63cf153b 100644 --- a/src/ML-RUNNER/pair_runner.cpp +++ b/src/ML-RUNNER/pair_runner.cpp @@ -167,6 +167,7 @@ PairRuNNer::PairRuNNer(LAMMPS *lmp) : // variable for output using pair compute nextra = 0; pvector = nullptr; + nnp_generation = 0; num_committee_members = 0; if (atom->natoms > MAXSMALLINT / 4) error->all(FLERR, "Too many total atoms"); diff --git a/src/OPENMP/thr_data.cpp b/src/OPENMP/thr_data.cpp index ecc6442e5c4..7d970478e33 100644 --- a/src/OPENMP/thr_data.cpp +++ b/src/OPENMP/thr_data.cpp @@ -29,7 +29,8 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ ThrData::ThrData(int tid, Timer *t) : - vatom_pair(nullptr), vatom_bond(nullptr), vatom_angle(nullptr), vatom_dihed(nullptr), + eatom_pair(nullptr), eatom_bond(nullptr), eatom_angle(nullptr), eatom_dihed(nullptr), + eatom_imprp(nullptr), eatom_kspce(nullptr), vatom_pair(nullptr), vatom_bond(nullptr), vatom_angle(nullptr), vatom_dihed(nullptr), vatom_imprp(nullptr), vatom_kspce(nullptr), cvatom_pair(nullptr), cvatom_angle(nullptr), cvatom_dihed(nullptr), cvatom_imprp(nullptr), _f(nullptr), _torque(nullptr), _erforce(nullptr), _de(nullptr), _drho(nullptr), _mu(nullptr), _lambda(nullptr), _rhoB(nullptr), _D_values(nullptr), _rho(nullptr), _fp(nullptr), diff --git a/src/REAXFF/fix_qeq_reaxff.cpp b/src/REAXFF/fix_qeq_reaxff.cpp index fef3c342f6c..1fc69bc7512 100644 --- a/src/REAXFF/fix_qeq_reaxff.cpp +++ b/src/REAXFF/fix_qeq_reaxff.cpp @@ -151,6 +151,8 @@ FixQEqReaxFF::FixQEqReaxFF(LAMMPS *lmp, int narg, char **arg) : reaxff = dynamic_cast(force->pair_match("^reaxff",0)); s_hist = t_hist = nullptr; + ilist = jlist = numneigh = nullptr; + firstneigh = nullptr; H.n = H.m = 0; H.firstnbr = H.numnbrs = H.jlist = nullptr; H.val = nullptr; diff --git a/src/REAXFF/fix_qtpie_reaxff.cpp b/src/REAXFF/fix_qtpie_reaxff.cpp index 356b331cfda..c194a0a3601 100644 --- a/src/REAXFF/fix_qtpie_reaxff.cpp +++ b/src/REAXFF/fix_qtpie_reaxff.cpp @@ -141,6 +141,9 @@ FixQtpieReaxFF::FixQtpieReaxFF(LAMMPS *lmp, int narg, char **arg) : // H matrix + ilist = jlist = numneigh = nullptr; + firstneigh = nullptr; + H.n = H.m = 0; H.firstnbr = nullptr; H.numnbrs = nullptr; H.jlist = nullptr; diff --git a/src/comm_tiled.cpp b/src/comm_tiled.cpp index ad5ac6b7cf1..8fd4faa5864 100644 --- a/src/comm_tiled.cpp +++ b/src/comm_tiled.cpp @@ -139,6 +139,9 @@ void CommTiled::init_pointers() box_other = nullptr; box_touch = nullptr; point_drop = nullptr; + + maxsend = maxrecv = 0; + maxoverlap = 0; } /* ---------------------------------------------------------------------- diff --git a/src/grid2d.cpp b/src/grid2d.cpp index 3561dca7e77..218ab9ddb11 100644 --- a/src/grid2d.cpp +++ b/src/grid2d.cpp @@ -88,6 +88,7 @@ Grid2d::Grid2d(LAMMPS *lmp, MPI_Comm gcomm, int gnx, int gny) : copy_remap.npack = copy_remap.nunpack = 0; copy_remap.packlist = copy_remap.unpacklist = nullptr; + adjacent = 1; layout_grid = comm->layout; } @@ -135,6 +136,7 @@ Grid2d::Grid2d(LAMMPS *lmp, MPI_Comm gcomm, int gnx, int gny, int ixlo, int ixhi // layout_grid = how this grid instance is distributed across procs // depends on comm->layout at time this Grid2d instance is created + adjacent = 1; layout_grid = comm->layout; // additional intialization diff --git a/src/grid3d.cpp b/src/grid3d.cpp index 1e9e787500b..5ff7a1073f8 100644 --- a/src/grid3d.cpp +++ b/src/grid3d.cpp @@ -90,6 +90,7 @@ Grid3d::Grid3d(LAMMPS *lmp, MPI_Comm gcomm, int gnx, int gny, int gnz) : copy_remap.npack = copy_remap.nunpack = 0; copy_remap.packlist = copy_remap.unpacklist = nullptr; + adjacent = 1; layout_grid = comm->layout; } @@ -144,6 +145,7 @@ Grid3d::Grid3d(LAMMPS *lmp, MPI_Comm gcomm, int gnx, int gny, int gnz, // layout_grid = how this grid instance is distributed across procs // depends on comm->layout at time this Grid3d instance is created + adjacent = 1; layout_grid = comm->layout; // additional intialization diff --git a/src/npair.cpp b/src/npair.cpp index cb63a5dba33..334b69dacda 100644 --- a/src/npair.cpp +++ b/src/npair.cpp @@ -36,6 +36,7 @@ NPair::NPair(LAMMPS *lmp) : { last_build = -1; flag_same_multi = nullptr; + flag_half_multi = nullptr; mycutneighsq = nullptr; molecular = atom->molecular; copymode = 0; diff --git a/tools/phonon/green.cpp b/tools/phonon/green.cpp index 903abe86bac..36fe51b8eb3 100644 --- a/tools/phonon/green.cpp +++ b/tools/phonon/green.cpp @@ -46,6 +46,7 @@ Green::Green(const int ntm, const int sdim, const int niter, const double min, c memory = new Memory(); alpha = beta = NULL; + ndim = 0; dw = 0.; if (natom < 1 || iatom < 0 || iatom >= natom){ printf("\nError: Wrong number of total atoms or wrong index of interested atom!\n"); return; From d13a4554987e98e174cd44f065d8eb29da5f02c0 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 7 Jul 2026 04:01:41 -0400 Subject: [PATCH 074/116] Fix three defects the Coverity rescan re-reported under existing CIDs - fix bond/react: the createIDs count was the only map-file section count without an upper bound; reject counts beyond the product template size like the other sections (CID 1661056) - third_order: the extended neighbor list built by getNeighbortags() (the per-atom tag block, its pointer array, and ijnum) was never released after the calculation; for large systems this leaked the largest allocation of the command (CID 1663463) - binary2txt: a dump file whose first chunk has zero entries left the chunk buffer unallocated and passed NULL to fread; also allocate when the buffer is still empty (CID 1662796) Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01EjV3TNphDvqgt2WwrHH8wV --- src/PHONON/third_order.cpp | 7 +++++++ src/REACTION/fix_bond_react.cpp | 2 +- tools/binary2txt.cpp | 6 +++--- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/PHONON/third_order.cpp b/src/PHONON/third_order.cpp index 6843883e165..52479b730c9 100644 --- a/src/PHONON/third_order.cpp +++ b/src/PHONON/third_order.cpp @@ -415,6 +415,13 @@ void ThirdOrder::calculateMatrix() delete [] dynmat; delete [] fdynmat; + if (neighbortags) { + memory->sfree(neighbortags[0]); + memory->sfree(neighbortags); + neighbortags = nullptr; + } + memory->destroy(ijnum); + if (screen && me == 0) fprintf(screen,"Finished Calculating Third Order Tensor\n"); } diff --git a/src/REACTION/fix_bond_react.cpp b/src/REACTION/fix_bond_react.cpp index 010446ae9d1..f9aa48d9e55 100644 --- a/src/REACTION/fix_bond_react.cpp +++ b/src/REACTION/fix_bond_react.cpp @@ -4331,7 +4331,7 @@ void FixBondReact::read_map_file(Reaction &rxn) } else if (strstr(line,"createIDs")) { rv = sscanf(line,"%d",&ncreate); if (rv != 1) error->one(FLERR, "Map file header is incorrectly formatted"); - if (ncreate < 0) + if ((ncreate < 0) || (ncreate > rxn.product->natoms)) error->one(FLERR,"Fix bond/react: Invalid number of createIDs in map file"); } else if (strstr(line,"chiralIDs")) { rv = sscanf(line,"%d",&nchiral); diff --git a/tools/binary2txt.cpp b/tools/binary2txt.cpp index e9b7308cbcf..4db5d2ed9dc 100644 --- a/tools/binary2txt.cpp +++ b/tools/binary2txt.cpp @@ -255,10 +255,10 @@ int main(int narg, char **arg) // extend buffer to fit chunk size - if (n > maxbuf) { + if ((n > maxbuf) || !buf) { delete[] buf; - buf = new double[n]; - maxbuf = n; + maxbuf = (n > 0) ? n : 1; + buf = new double[maxbuf]; } // read chunk and write as size_one values per line From 3c6d6502ad8e3396357f7a5c7f42b952e4024f06 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 7 Jul 2026 08:14:49 -0400 Subject: [PATCH 075/116] Initialize all remaining uninitialized constructor members, own ragged arrays via Memory The Coverity UNINIT_CTOR checker merges all uninitialized members of one constructor into a single CID and re-attaches that CID to the next member as long as any remain. Previous rounds fixed only the members named in the main defect event; this round initializes every member listed in the event traces so the 14 affected CIDs can retire: - ThrData: eng_vdwl/coul/bond/angle/dihed/imprp/kspce - FixQEqReaxFF, FixQtpieReaxFF: reaxflag, nlevels_respa - CommTiled (both ctors, via init_pointers): nswap, noverlap, smaxone/rmaxone/smaxall/rmaxall, maxrequest - NPair: all neighbor/bin/stencil settings copied in by copy_*_info() - Grid2d/Grid3d (both ctors): owned/ghost bounds assigned by setup_grid() and ghost_grid(); setup_grid()-only defaults in the caller-bounds ctor - ComputePressureBocs: boltz, nktv2p, inv_volume - PairRuNNer: settings() defaults mirrored in the constructor - PairEAMAPIP: cutmax - PairGranular: models_list, nmodels, maxmodels third_order.cpp (CID 1663463): the extended neighbor list block was allocated into a local pointer whose only surviving reference was neighbortags[0], which calculateMatrix() freed -- correct but fragile ownership that the RESOURCE_LEAK checker (and human readers) cannot follow. Use Memory::create_ragged()/destroy() so the member owns the storage directly, drop the now-unneeded size recompute loop, and pair the remaining smalloc'd arrays with sfree instead of bare free(). third_order output verified bit-identical to the previous binary on the silicon example (eskm and regular variants). Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01EjV3TNphDvqgt2WwrHH8wV --- src/APIP/pair_eam_apip.cpp | 1 + src/BOCS/compute_pressure_bocs.cpp | 3 +++ src/GRANULAR/pair_granular.cpp | 2 ++ src/ML-RUNNER/pair_runner.cpp | 15 +++++++++++++ src/OPENMP/thr_data.cpp | 2 ++ src/PHONON/third_order.cpp | 29 +++++------------------- src/REAXFF/fix_qeq_reaxff.cpp | 2 ++ src/REAXFF/fix_qtpie_reaxff.cpp | 2 ++ src/comm_tiled.cpp | 5 +++++ src/grid2d.cpp | 25 +++++++++++++++++++++ src/grid3d.cpp | 25 +++++++++++++++++++++ src/npair.cpp | 36 ++++++++++++++++++++++++++++++ 12 files changed, 124 insertions(+), 23 deletions(-) diff --git a/src/APIP/pair_eam_apip.cpp b/src/APIP/pair_eam_apip.cpp index f59fc9574cf..ccf2dd71ac5 100644 --- a/src/APIP/pair_eam_apip.cpp +++ b/src/APIP/pair_eam_apip.cpp @@ -76,6 +76,7 @@ PairEAMAPIP::PairEAMAPIP(LAMMPS *lmp) : Pair(lmp) lambda_thermostat = true; lambda_la = true; cutforcesq = 0.0; + cutmax = 0.0; } /* ---------------------------------------------------------------------- diff --git a/src/BOCS/compute_pressure_bocs.cpp b/src/BOCS/compute_pressure_bocs.cpp index 958f757b848..e95b222a067 100644 --- a/src/BOCS/compute_pressure_bocs.cpp +++ b/src/BOCS/compute_pressure_bocs.cpp @@ -117,6 +117,9 @@ ComputePressureBocs::ComputePressureBocs(LAMMPS *lmp, int narg, char **arg) : vector = new double[size_vector]; dimension = domain->dimension; + boltz = force->boltz; + nktv2p = force->nktv2p; + inv_volume = 0.0; nvirial = 0; vptr = nullptr; diff --git a/src/GRANULAR/pair_granular.cpp b/src/GRANULAR/pair_granular.cpp index 10d969db422..32e13cad3f6 100644 --- a/src/GRANULAR/pair_granular.cpp +++ b/src/GRANULAR/pair_granular.cpp @@ -86,6 +86,8 @@ id_history = utils::strdup(std::string("NEIGH_HISTORY_GRANULAR") + std::to_strin cutoff_global = -1.0; fix_history = nullptr; + models_list = nullptr; + nmodels = maxmodels = 0; fix_dummy = dynamic_cast(modify->add_fix(fmt::format("{} all DUMMY", id_dummy))); } diff --git a/src/ML-RUNNER/pair_runner.cpp b/src/ML-RUNNER/pair_runner.cpp index f2b63cf153b..3fe062fe65c 100644 --- a/src/ML-RUNNER/pair_runner.cpp +++ b/src/ML-RUNNER/pair_runner.cpp @@ -170,6 +170,21 @@ PairRuNNer::PairRuNNer(LAMMPS *lmp) : nnp_generation = 0; num_committee_members = 0; + // settings() and the RuNNer potential files assign these before use; + // mirror the settings() defaults so they never carry indeterminate values + + cflength = cfenergy = 1.0; + luse_prev_q = false; + lwrite_f_comm = lwrite_q_comm = false; + lcheck_extrap = false; + max_extrap = 0; + lshow_ew = false; + sum_ew_freq = reset_ew_freq = 0; + cutoff = 0.0; + total_charge = 0.0; + lhirshfeld_vdw = false; + ltwo_body = false; + if (atom->natoms > MAXSMALLINT / 4) error->all(FLERR, "Too many total atoms"); } diff --git a/src/OPENMP/thr_data.cpp b/src/OPENMP/thr_data.cpp index 7d970478e33..3e540b79d46 100644 --- a/src/OPENMP/thr_data.cpp +++ b/src/OPENMP/thr_data.cpp @@ -29,6 +29,8 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ ThrData::ThrData(int tid, Timer *t) : + eng_vdwl(0.0), eng_coul(0.0), eng_bond(0.0), eng_angle(0.0), eng_dihed(0.0), + eng_imprp(0.0), eng_kspce(0.0), eatom_pair(nullptr), eatom_bond(nullptr), eatom_angle(nullptr), eatom_dihed(nullptr), eatom_imprp(nullptr), eatom_kspce(nullptr), vatom_pair(nullptr), vatom_bond(nullptr), vatom_angle(nullptr), vatom_dihed(nullptr), vatom_imprp(nullptr), vatom_kspce(nullptr), cvatom_pair(nullptr), cvatom_angle(nullptr), cvatom_dihed(nullptr), cvatom_imprp(nullptr), diff --git a/src/PHONON/third_order.cpp b/src/PHONON/third_order.cpp index 52479b730c9..ca0c3e83f4c 100644 --- a/src/PHONON/third_order.cpp +++ b/src/PHONON/third_order.cpp @@ -415,11 +415,7 @@ void ThirdOrder::calculateMatrix() delete [] dynmat; delete [] fdynmat; - if (neighbortags) { - memory->sfree(neighbortags[0]); - memory->sfree(neighbortags); - neighbortags = nullptr; - } + memory->destroy(neighbortags); memory->destroy(ijnum); if (screen && me == 0) @@ -779,24 +775,11 @@ void ThirdOrder::getNeighbortags() { ijnum[i] = sum; } - sum = 0; - for (bigint i=0; i<=natoms-1; i++) { - sum += ijnum[i]; - } - - free (neighbortags); + memory->sfree(neighbortags); memory->sfree(datarecv); - nbytes = ((bigint) sizeof(bigint)) * sum; - datarecv = (bigint *) memory->smalloc(nbytes, "thirdorder:firsttags"); - nbytes = ((bigint) sizeof(bigint *)) * natoms; - neighbortags = (bigint **) memory->smalloc(nbytes, "thirdorder:neighbortags"); - memset(&datarecv[0],0,sum*sizeof(bigint)); - - n = 0; - for (bigint i = 0; i < natoms; i++) { - neighbortags[i] = &datarecv[n]; - n += ijnum[i]; - } + memory->create_ragged(neighbortags, natoms, ijnum, "thirdorder:neighbortags"); + for (bigint i = 0; i < natoms; i++) + memset(neighbortags[i], 0, ijnum[i]*sizeof(bigint)); for (bigint i = 0; i < natoms; i++) { int m = 0; @@ -821,7 +804,7 @@ void ThirdOrder::getNeighbortags() { } memory->sfree(data); - free (firsttags); + memory->sfree(firsttags); free (ijnumproc); free (temptags); } diff --git a/src/REAXFF/fix_qeq_reaxff.cpp b/src/REAXFF/fix_qeq_reaxff.cpp index 1fc69bc7512..43e9cf6f70c 100644 --- a/src/REAXFF/fix_qeq_reaxff.cpp +++ b/src/REAXFF/fix_qeq_reaxff.cpp @@ -149,6 +149,8 @@ FixQEqReaxFF::FixQEqReaxFF(LAMMPS *lmp, int narg, char **arg) : // register with Atom class reaxff = dynamic_cast(force->pair_match("^reaxff",0)); + reaxflag = 0; + nlevels_respa = 1; s_hist = t_hist = nullptr; ilist = jlist = numneigh = nullptr; diff --git a/src/REAXFF/fix_qtpie_reaxff.cpp b/src/REAXFF/fix_qtpie_reaxff.cpp index c194a0a3601..caacd4a297e 100644 --- a/src/REAXFF/fix_qtpie_reaxff.cpp +++ b/src/REAXFF/fix_qtpie_reaxff.cpp @@ -155,6 +155,8 @@ FixQtpieReaxFF::FixQtpieReaxFF(LAMMPS *lmp, int narg, char **arg) : // register with Atom class reaxff = dynamic_cast(force->pair_match("^reaxff",0)); + reaxflag = 0; + nlevels_respa = 1; s_hist = t_hist = nullptr; dist_cutoff_sq = 0.0; diff --git a/src/comm_tiled.cpp b/src/comm_tiled.cpp index 8fd4faa5864..21d1143a7bb 100644 --- a/src/comm_tiled.cpp +++ b/src/comm_tiled.cpp @@ -142,6 +142,11 @@ void CommTiled::init_pointers() maxsend = maxrecv = 0; maxoverlap = 0; + nswap = 0; + noverlap = 0; + smaxone = rmaxone = 0; + smaxall = rmaxall = 0; + maxrequest = 0; } /* ---------------------------------------------------------------------- diff --git a/src/grid2d.cpp b/src/grid2d.cpp index 218ab9ddb11..315e70212a6 100644 --- a/src/grid2d.cpp +++ b/src/grid2d.cpp @@ -65,6 +65,15 @@ Grid2d::Grid2d(LAMMPS *lmp, MPI_Comm gcomm, int gnx, int gny) : noverlap_list = maxoverlap_list = 0; + // owned/ghost cell bounds are assigned in setup_grid() and ghost_grid(); + // zero them so the instance never carries indeterminate values + + inxlo = inxhi = inylo = inyhi = 0; + outxlo = outxhi = outylo = outyhi = 0; + fullxlo = fullxhi = fullylo = fullyhi = 0; + procxlo = procxhi = procylo = procyhi = 0; + ghostxlo = ghostxhi = ghostylo = ghostyhi = 0; + // default settings, can be overridden by set() methods // these affect assignment of owned and ghost cells @@ -133,6 +142,22 @@ Grid2d::Grid2d(LAMMPS *lmp, MPI_Comm gcomm, int gnx, int gny, int ixlo, int ixhi outylo = oylo; outyhi = oyhi; + // these settings are only used by setup_grid(), which must not be + // called with this constructor; assign the same defaults as above + + maxdist = 0.0; + stencil_grid_lo = stencil_grid_hi = 0; + stencil_atom_lo = stencil_atom_hi = 0; + shift_grid = 0.5; + shift_atom_lo = shift_atom_hi = 0.0; + yextra = 0; + yfactor = 1.0; + + // ghost plane counts are only assigned in ghost_grid(), which this + // constructor does not invoke + + ghostxlo = ghostxhi = ghostylo = ghostyhi = 0; + // layout_grid = how this grid instance is distributed across procs // depends on comm->layout at time this Grid2d instance is created diff --git a/src/grid3d.cpp b/src/grid3d.cpp index 5ff7a1073f8..9087be8047b 100644 --- a/src/grid3d.cpp +++ b/src/grid3d.cpp @@ -67,6 +67,15 @@ Grid3d::Grid3d(LAMMPS *lmp, MPI_Comm gcomm, int gnx, int gny, int gnz) : noverlap_list = maxoverlap_list = 0; + // owned/ghost cell bounds are assigned in setup_grid() and ghost_grid(); + // zero them so the instance never carries indeterminate values + + inxlo = inxhi = inylo = inyhi = inzlo = inzhi = 0; + outxlo = outxhi = outylo = outyhi = outzlo = outzhi = 0; + fullxlo = fullxhi = fullylo = fullyhi = fullzlo = fullzhi = 0; + procxlo = procxhi = procylo = procyhi = proczlo = proczhi = 0; + ghostxlo = ghostxhi = ghostylo = ghostyhi = ghostzlo = ghostzhi = 0; + // default settings, can be overridden by set() methods // these affect assignment of owned and ghost cells @@ -142,6 +151,22 @@ Grid3d::Grid3d(LAMMPS *lmp, MPI_Comm gcomm, int gnx, int gny, int gnz, outzlo = ozlo; outzhi = ozhi; + // these settings are only used by setup_grid(), which must not be + // called with this constructor; assign the same defaults as above + + maxdist = 0.0; + stencil_grid_lo = stencil_grid_hi = 0; + stencil_atom_lo = stencil_atom_hi = 0; + shift_grid = 0.5; + shift_atom_lo = shift_atom_hi = 0.0; + zextra = 0; + zfactor = 1.0; + + // ghost plane counts are only assigned in ghost_grid(), which this + // constructor does not invoke + + ghostxlo = ghostxhi = ghostylo = ghostyhi = ghostzlo = ghostzhi = 0; + // layout_grid = how this grid instance is distributed across procs // depends on comm->layout at time this Grid3d instance is created diff --git a/src/npair.cpp b/src/npair.cpp index 334b69dacda..49402f9b188 100644 --- a/src/npair.cpp +++ b/src/npair.cpp @@ -42,6 +42,42 @@ NPair::NPair(LAMMPS *lmp) : copymode = 0; cutoff_custom = 0.0; execution_space = Host; + + // the members below hold copies of neighbor/bin/stencil settings that + // copy_neighbor_info(), copy_bin_info(), and copy_stencil_info() fill in + // before each build; zero them so instances never carry indeterminate values + + istyle = 0; + includegroup = exclude = 0; + skin = 0.0; + cutneighsq = cutneighghostsq = nullptr; + cut_inner_sq = cut_middle_sq = cut_middle_inside_sq = 0.0; + bboxlo = bboxhi = nullptr; + ncollections = 0; + cutcollectionsq = nullptr; + nex_type = nex_group = nex_mol = 0; + ex1_type = ex2_type = nullptr; + ex_type = nullptr; + ex1_group = ex2_group = nullptr; + ex1_bit = ex2_bit = nullptr; + ex_mol_bit = ex_mol_group = ex_mol_intra = nullptr; + special_flag = nullptr; + + nbinx = nbiny = nbinz = 0; + mbins = mbinx = mbiny = mbinz = 0; + mbinxlo = mbinylo = mbinzlo = 0; + bininvx = bininvy = bininvz = 0.0; + binhead = nullptr; + bin_hash = 0; + nbinx_multi = nbiny_multi = nbinz_multi = nullptr; + mbins_multi = nullptr; + mbinx_multi = mbiny_multi = mbinz_multi = nullptr; + mbinxlo_multi = mbinylo_multi = mbinzlo_multi = nullptr; + bininvx_multi = bininvy_multi = bininvz_multi = nullptr; + binhead_multi = nullptr; + + nstencil = 0; + stencilxyz = nullptr; } /* ---------------------------------------------------------------------- */ From 2613b0afe9fc03e366f070d4a61c04b8be77a4d8 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 7 Jul 2026 08:22:58 -0400 Subject: [PATCH 076/116] some more programming style and initialization hardening changes --- src/GRANSURF/fix_surface_global.cpp | 34 ++++++++------- src/GRANSURF/fix_surface_local.cpp | 4 +- src/GRANSURF/pair_surf_granular.cpp | 68 +++++++++++++++-------------- src/compute_pressure.cpp | 1 + 4 files changed, 57 insertions(+), 50 deletions(-) diff --git a/src/GRANSURF/fix_surface_global.cpp b/src/GRANSURF/fix_surface_global.cpp index 12163862e31..ea83120918d 100644 --- a/src/GRANSURF/fix_surface_global.cpp +++ b/src/GRANSURF/fix_surface_global.cpp @@ -63,7 +63,8 @@ enum{LINEAR,WIGGLE,ROTATE,TRANSROT,VARIABLE}; enum{INTERNAL = 0,EXTERNAL,UNCONNECTED}; enum{NSQ, BIN}; -static constexpr double FLATTHRESH = 0.00015230484360876085; // = 1.0-cos(MY_PI/180.0); = 1 degree +// = 1.0-cos(MY_PI/180.0); = 1 degree +static constexpr double FLATTHRESH = 0.00015230484360876085; static constexpr int DELTAMODEL = 4; static constexpr int DELTAMOTION = 4; static constexpr int MAXSURFTYPE = 1024; // limit for # of surf types @@ -273,6 +274,7 @@ FixSurfaceGlobal::FixSurfaceGlobal(LAMMPS *lmp, int narg, char **arg) : iarg += 2; } else if (strcmp(arg[iarg],"temperature") == 0) { if (iarg+2 > narg) utils::missing_cmd_args(FLERR, "fix surface/global temperature", error); + delete[] tstr; if (utils::strmatch(arg[iarg+1], "^v_")) { tstr = utils::strdup(arg[iarg+1] + 2); } else { @@ -433,8 +435,8 @@ FixSurfaceGlobal::~FixSurfaceGlobal() for (int i = 0; i < nmodel; i++) delete models[i]; memory->sfree(models); - for (int i = 1; i <= atom->ntypes; i++) delete [] types2model[i]; - delete [] types2model; + for (int i = 1; i <= atom->ntypes; i++) delete[] types2model[i]; + delete[] types2model; memory->destroy(neigh_p1); memory->destroy(neigh_p2); @@ -486,22 +488,22 @@ FixSurfaceGlobal::~FixSurfaceGlobal() for (int i = 0; i < nmotion; i++) { if (motions[i].mstyle == VARIABLE) { - delete [] motions[i].xvarstr; - delete [] motions[i].yvarstr; - delete [] motions[i].zvarstr; - delete [] motions[i].vxvarstr; - delete [] motions[i].vyvarstr; - delete [] motions[i].vzvarstr; + delete[] motions[i].xvarstr; + delete[] motions[i].yvarstr; + delete[] motions[i].zvarstr; + delete[] motions[i].vxvarstr; + delete[] motions[i].vyvarstr; + delete[] motions[i].vzvarstr; } } memory->sfree(motions); - delete [] mol2motion; + delete[] mol2motion; - delete list; - delete listhistory; - delete [] zeroes; - delete [] tstr; + deletelist; + deletelisthistory; + delete[] zeroes; + delete[] tstr; delete nb; delete ns; @@ -1643,7 +1645,7 @@ int FixSurfaceGlobal::modify_param(int narg, char **arg) next_reneighbor = -1; } - delete [] smols; + delete[] smols; return 3; } @@ -1747,7 +1749,7 @@ int FixSurfaceGlobal::modify_param(int narg, char **arg) utils::logmesg(lmp,"Fix_modify move:\n"); utils::logmesg(lmp," turned on motion for {} surfs\n", count); - delete [] smols; + delete[] smols; return 2 + styleargs; } diff --git a/src/GRANSURF/fix_surface_local.cpp b/src/GRANSURF/fix_surface_local.cpp index 44e88880363..9eda98b9fcd 100644 --- a/src/GRANSURF/fix_surface_local.cpp +++ b/src/GRANSURF/fix_surface_local.cpp @@ -49,8 +49,8 @@ static constexpr int DELTA_RVOUS = 1024; // must be >= 8 enum { INTERNAL = 0, EXTERNAL, UNCONNECTED }; -static constexpr double FLATTHRESH = - 0.00015230484360876085; // = 1.0-cos(MY_PI/180.0); = 1 degree +// = 1.0-cos(MY_PI/180.0); = 1 degree +static constexpr double FLATTHRESH = 0.00015230484360876085; static constexpr int RVOUS = 1; // 0 for irregular, 1 for all2all enum { MOLTEMPLATE, STLFILE }; diff --git a/src/GRANSURF/pair_surf_granular.cpp b/src/GRANSURF/pair_surf_granular.cpp index 091165f4441..c26d9925dc1 100644 --- a/src/GRANSURF/pair_surf_granular.cpp +++ b/src/GRANSURF/pair_surf_granular.cpp @@ -51,9 +51,6 @@ using namespace MathExtra; using namespace SurfExtra; enum { NONE, LINE, TRI }; -enum { NONFLAT, FLAT }; -enum { CONCAVE, CONVEX }; -enum { SAME_SIDE, OPPOSITE_SIDE }; enum { INTERNAL = 0, EXTERNAL, UNCONNECTED }; static constexpr double EPSILON = 1e-12; @@ -61,10 +58,10 @@ static constexpr double BIG = 1.0e20; static inline int FLIPSIDE(int nside) { - if (nside == OPPOSITE_SIDE) - return SAME_SIDE; + if (nside == FixSurface::OPPOSITE_SIDE) + return FixSurface::SAME_SIDE; else - return OPPOSITE_SIDE; + return FixSurface::OPPOSITE_SIDE; } /* ---------------------------------------------------------------------- */ @@ -131,7 +128,7 @@ void PairSurfGranular::compute(int eflag, int vflag) if (fix_rigid) { int tmp; int *body = (int *) fix_rigid->extract("body", tmp); - double *mass_body = (double *) fix_rigid->extract("masstotal", tmp); + auto *mass_body = (double *) fix_rigid->extract("masstotal", tmp); if (atom->nmax > nmax) { memory->destroy(mass_rigid); nmax = atom->nmax; @@ -259,7 +256,8 @@ void PairSurfGranular::compute(int eflag, int vflag) corner = corners[tri[j]]; jflag = SurfExtra::overlap_sphere_tri(x[i], radi, &corner[0], &corner[3], &corner[6], &corner[9], contact, dr, rsq); - } + } else + jflag = 0; // should not happen but set to make static code analysis happy // unset non-touching neighbors @@ -293,9 +291,9 @@ void PairSurfGranular::compute(int eflag, int vflag) // Store which side is in contact relative to normal vector if (dot >= 0) - nsidej = SAME_SIDE; + nsidej = FixSurface::SAME_SIDE; else - nsidej = OPPOSITE_SIDE; + nsidej = FixSurface::OPPOSITE_SIDE; rmag = sqrt(rsq); MathExtra::scale3(1.0 / rmag, dr, dr); @@ -314,6 +312,10 @@ void PairSurfGranular::compute(int eflag, int vflag) mycontact.overlap = radi - rmag; mycontact.weight_contribution = 1.0; mycontact.convex_index = -1; + mycontact.ck1 = -1; + mycontact.ck2 = -1; + mycontact.caflag1 = -1; + mycontact.caflag2 = -1; mycontact.rsq_com = rsq_com; mycontact.priority = priority; @@ -863,7 +865,7 @@ void PairSurfGranular::prewalk_connections2d() n = contacts_map[j]; - if (nsidej == OPPOSITE_SIDE) MathExtra::negate3(contact_surfs[n].surf_norm); + if (nsidej == FixSurface::OPPOSITE_SIDE) MathExtra::negate3(contact_surfs[n].surf_norm); for (int nconnect = 0; nconnect < (connect2d[jconnect].np1 + connect2d[jconnect].np2); nconnect++) { @@ -885,7 +887,7 @@ void PairSurfGranular::prewalk_connections2d() if (walked.find(k) == walked.end() && to_walk.find(k) == to_walk.end()) { // which side is associated with the initial closest surf m = contacts_map[k]; - if (nsidej == OPPOSITE_SIDE) nsidek = FLIPSIDE(nsidek); + if (nsidej == FixSurface::OPPOSITE_SIDE) nsidek = FLIPSIDE(nsidek); contact_surfs[m].nside = nsidek; to_walk[k] = nsidek; @@ -926,7 +928,7 @@ void PairSurfGranular::prewalk_connections3d() n = contacts_map[j]; - if (nsidej == OPPOSITE_SIDE) MathExtra::negate3(contact_surfs[n].surf_norm); + if (nsidej == FixSurface::OPPOSITE_SIDE) MathExtra::negate3(contact_surfs[n].surf_norm); // Loop through edge-connected surfs ntotal = connect3d[jconnect].ne1 + connect3d[jconnect].ne2 + connect3d[jconnect].ne3; @@ -955,7 +957,7 @@ void PairSurfGranular::prewalk_connections3d() if (walked.find(k) == walked.end() && to_walk.find(k) == to_walk.end()) { // which side is associated with the initial closest surf m = contacts_map[k]; - if (nsidej == OPPOSITE_SIDE) nsidek = FLIPSIDE(nsidek); + if (nsidej == FixSurface::OPPOSITE_SIDE) nsidek = FLIPSIDE(nsidek); contact_surfs[m].nside = nsidek; to_walk[k] = nsidek; } @@ -989,7 +991,7 @@ void PairSurfGranular::prewalk_connections3d() if (walked.find(k) == walked.end() && to_walk.find(k) == to_walk.end()) { // which side is associated with the initial closest surf m = contacts_map[k]; - if (nsidej == OPPOSITE_SIDE) nsidek = FLIPSIDE(nsidek); + if (nsidej == FixSurface::OPPOSITE_SIDE) nsidek = FLIPSIDE(nsidek); contact_surfs[m].nside = nsidek; to_walk[k] = nsidek; } @@ -1061,19 +1063,19 @@ void PairSurfGranular::walk_connections2d(std::vector &composite_surfs, m = contacts_map[k]; - if (contact_surfs[n].nside == OPPOSITE_SIDE) { - if (aflag == CONVEX) - aflag = CONCAVE; + if (contact_surfs[n].nside == FixSurface::OPPOSITE_SIDE) { + if (aflag == FixSurface::CONVEX) + aflag = FixSurface::CONCAVE; else - aflag = CONVEX; + aflag = FixSurface::CONVEX; } - if (fflag == FLAT) { + if (fflag == FixSurface::FLAT) { // flat, same-type: walk if (contact_surfs[n].type == contact_surfs[m].type && processed_contacts.find(k) == processed_contacts.end()) to_add.insert(k); - } else if (aflag == CONVEX) { + } else if (aflag == FixSurface::CONVEX) { // must overlap w/in epsilon or higher priority to hide (can't walk around a composite surf to hide) if (contact_surfs[n].overlap > contact_surfs[m].overlap - EPSILON) contact_surfs[m].convex_index = j; @@ -1164,19 +1166,19 @@ void PairSurfGranular::walk_connections3d(std::vector &composite_surfs, int m = contacts_map[k]; - if (contact_surfs[n].nside == OPPOSITE_SIDE) { - if (aflag == CONVEX) - aflag = CONCAVE; + if (contact_surfs[n].nside == FixSurface::OPPOSITE_SIDE) { + if (aflag == FixSurface::CONVEX) + aflag = FixSurface::CONCAVE; else - aflag = CONVEX; + aflag = FixSurface::CONVEX; } - if (fflag == FLAT) { + if (fflag == FixSurface::FLAT) { // flat, same-type: walk if (contact_surfs[n].type == contact_surfs[m].type && processed_contacts.find(k) == processed_contacts.end()) to_add.insert(k); - } else if (aflag == CONVEX) { + } else if (aflag == FixSurface::CONVEX) { // must overlap w/in epsilon or higher priority to hide (can't walk around a composite surf to hide) if (contact_surfs[n].overlap > contact_surfs[m].overlap - EPSILON) contact_surfs[m].convex_index = j; @@ -1216,7 +1218,7 @@ void PairSurfGranular::walk_connections3d(std::vector &composite_surfs, m = contacts_map[k]; - if (fflag == FLAT) { + if (fflag == FixSurface::FLAT) { // flat, same-type: walk if (contact_surfs[n].type == contact_surfs[m].type && processed_contacts.find(k) == processed_contacts.end()) @@ -1322,7 +1324,7 @@ double PairSurfGranular::calculate_2d_forces(std::vector &composite_surfs) } if (ck != -1) { - if (caflag == CONCAVE) { + if (caflag == FixSurface::CONCAVE) { MathExtra::copy3(jnorm, contact_surfs[n].dr_force); } else { // See if dr has component pointing into other (k) line @@ -1697,7 +1699,8 @@ double PairSurfGranular::calculate_3d_forces(std::vector &composite_surfs) MathExtra::copy3(contact_surfs[m].surf_norm, knorm); calculate_3d_edge_force(contact_surfs[n].caflag1, jnorm, knorm, dr1, fn1); - if (contact_surfs[n].caflag1 != CONCAVE && contact_surfs[m].convex_index != -1) { + if (contact_surfs[n].caflag1 != FixSurface::CONCAVE && + contact_surfs[m].convex_index != -1) { MathExtra::add3(jnorm, knorm, normave); MathExtra::norm3(normave); dot1xp = MathExtra::dot3(dr1, normave); @@ -1721,7 +1724,8 @@ double PairSurfGranular::calculate_3d_forces(std::vector &composite_surfs) MathExtra::copy3(contact_surfs[m].surf_norm, knorm); calculate_3d_edge_force(contact_surfs[n].caflag2, jnorm, knorm, dr2, fn2); - if (contact_surfs[n].caflag2 != CONCAVE && contact_surfs[m].convex_index != -1) { + if (contact_surfs[n].caflag2 != FixSurface::CONCAVE && + contact_surfs[m].convex_index != -1) { MathExtra::add3(jnorm, knorm, normave); MathExtra::norm3(normave); dot2xp = MathExtra::dot3(dr2, normave); @@ -1808,7 +1812,7 @@ double PairSurfGranular::calculate_3d_forces(std::vector &composite_surfs) void PairSurfGranular::calculate_3d_edge_force(int aflag, double jnorm[3], double knorm[3], double drperp[3], double fn[3]) { - if (aflag == CONCAVE) { + if (aflag == FixSurface::CONCAVE) { MathExtra::copy3(jnorm, fn); } else { // cannot point beyond knorm diff --git a/src/compute_pressure.cpp b/src/compute_pressure.cpp index 2a5536c676b..0dcd0cf3772 100644 --- a/src/compute_pressure.cpp +++ b/src/compute_pressure.cpp @@ -81,6 +81,7 @@ ComputePressure::ComputePressure(LAMMPS *lmp, int narg, char **arg) : while (iarg < narg) { if (strcmp(arg[iarg],"ke") == 0) keflag = 1; else if (strcmp(arg[iarg],"pair/hybrid") == 0) { + delete[] pstyle; if (lmp->suffix) pstyle = utils::strdup(fmt::format("{}/{}",arg[++iarg],lmp->suffix)); else From 02906a284dc445d6db207ae82df4675b4edfd18b Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 7 Jul 2026 08:33:41 -0400 Subject: [PATCH 077/116] fix typos --- src/GRANSURF/fix_surface_global.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/GRANSURF/fix_surface_global.cpp b/src/GRANSURF/fix_surface_global.cpp index ea83120918d..1c2904fda16 100644 --- a/src/GRANSURF/fix_surface_global.cpp +++ b/src/GRANSURF/fix_surface_global.cpp @@ -500,8 +500,8 @@ FixSurfaceGlobal::~FixSurfaceGlobal() memory->sfree(motions); delete[] mol2motion; - deletelist; - deletelisthistory; + delete list; + delete listhistory; delete[] zeroes; delete[] tstr; From 80a3bb167b8463e9365cc90f7ebcf893643d38b3 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 7 Jul 2026 11:28:09 -0400 Subject: [PATCH 078/116] fix slab correction energy accumulation in pppm/tip4p PPPMTIP4P::slabcorr() added the slab correction energy to the energy_1 accumulator, which is only ever read by the pppm/disp styles (apparent copy-paste from pppm_disp_tip4p.cpp). As a consequence the slab correction was silently missing from the reported long-range energy when using kspace_modify slab with pppm/tip4p (forces were unaffected). Accumulate into 'energy' as PPPM::slabcorr() does. This also fixes pppm/tip4p/omp, which inherits this method. --- src/KSPACE/pppm_tip4p.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/KSPACE/pppm_tip4p.cpp b/src/KSPACE/pppm_tip4p.cpp index fff4abc2226..2f57f3017e1 100644 --- a/src/KSPACE/pppm_tip4p.cpp +++ b/src/KSPACE/pppm_tip4p.cpp @@ -529,7 +529,7 @@ void PPPMTIP4P::slabcorr() qsum*dipole_r2 - qsum*qsum*zprd_slab*zprd_slab/12.0)/volume; const double qscale = force->qqrd2e * scale; - if (eflag_global) energy_1 += qscale * e_slabcorr; + if (eflag_global) energy += qscale * e_slabcorr; // per-atom energy From 2a05ce799625cc304ce0ae0438dc23c74feb2fcf Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 7 Jul 2026 12:04:20 -0400 Subject: [PATCH 079/116] evaluate all TIP4P slab correction terms at the virtual charge site PPPMTIP4P::slabcorr() and PPPMDispTIP4P::slabcorr() computed the global dipole moment from the M (virtual charge) site position of the O atom charge, but used the raw O atom coordinate in the dipole_r2 sum, the per-atom energy loop, and the force prefactor. As a consequence the sum of the per-atom energies differed from the global slab correction energy by a constant offset, and for non-neutral systems the dipole_r2 and force terms were inconsistent with the global dipole. Now all terms are evaluated at the M site and the per-atom energy of the M site charge is redistributed (1-alpha, alpha/2, alpha/2) onto O, H1, H2 following the convention of fieldforce_peratom(). For neutral systems forces and global energies are unchanged; only the per-atom energy decomposition changes and its sum now matches the global slab correction energy. --- src/KSPACE/pppm_disp_tip4p.cpp | 36 +++++++++++++++++++++++++--------- src/KSPACE/pppm_tip4p.cpp | 36 +++++++++++++++++++++++++--------- 2 files changed, 54 insertions(+), 18 deletions(-) diff --git a/src/KSPACE/pppm_disp_tip4p.cpp b/src/KSPACE/pppm_disp_tip4p.cpp index 0541669bbc5..f1f21946105 100644 --- a/src/KSPACE/pppm_disp_tip4p.cpp +++ b/src/KSPACE/pppm_disp_tip4p.cpp @@ -525,8 +525,13 @@ void PPPMDispTIP4P::slabcorr(int /*eflag*/) double dipole_r2 = 0.0; if (eflag_atom || fabs(qsum) > SMALL) { - for (int i = 0; i < nlocal; i++) - dipole_r2 += q[i]*x[i][2]*x[i][2]; + for (int i = 0; i < nlocal; i++) { + if (type[i] == typeO) { + find_M(i,iH1,iH2,xM); + xi = xM; + } else xi = x[i]; + dipole_r2 += q[i]*xi[2]*xi[2]; + } // sum local contributions @@ -543,29 +548,42 @@ void PPPMDispTIP4P::slabcorr(int /*eflag*/) if (eflag_global) energy_1 += qscale * e_slabcorr; - // per-atom energy + // per-atom energy. for O atoms evaluate at the M site and redistribute + // (1-alpha) : alpha/2 : alpha/2 onto O, H1, H2 like fieldforce_c_peratom() if (eflag_atom) { double efact = qscale * MY_2PI/volume; - for (int i = 0; i < nlocal; i++) - eatom[i] += efact * q[i]*(x[i][2]*dipole_all - 0.5*(dipole_r2 + - qsum*x[i][2]*x[i][2]) - qsum*zprd_slab*zprd_slab/12.0); + for (int i = 0; i < nlocal; i++) { + if (type[i] == typeO) { + find_M(i,iH1,iH2,xM); + const double e_pa = efact * q[i]*(xM[2]*dipole_all - 0.5*(dipole_r2 + + qsum*xM[2]*xM[2]) - qsum*zprd_slab*zprd_slab/12.0); + eatom[i] += e_pa*(1 - alpha); + eatom[iH1] += e_pa*alpha*0.5; + eatom[iH2] += e_pa*alpha*0.5; + } else { + eatom[i] += efact * q[i]*(x[i][2]*dipole_all - 0.5*(dipole_r2 + + qsum*x[i][2]*x[i][2]) - qsum*zprd_slab*zprd_slab/12.0); + } + } } - // add on force corrections + // add on force corrections. the force on the M site charge is + // evaluated at the M site and redistributed onto O, H1, H2 double ffact = qscale * (-4.0*MY_PI/volume); double **f = atom->f; for (int i = 0; i < nlocal; i++) { - double fzi_corr = ffact * q[i]*(dipole_all - qsum*x[i][2]); if (type[i] == typeO) { find_M(i,iH1,iH2,xM); + const double fzi_corr = ffact * q[i]*(dipole_all - qsum*xM[2]); f[i][2] += fzi_corr*(1 - alpha); f[iH1][2] += 0.5*alpha*fzi_corr; f[iH2][2] += 0.5*alpha*fzi_corr; + } else { + f[i][2] += ffact * q[i]*(dipole_all - qsum*x[i][2]); } - else f[i][2] += fzi_corr; } } diff --git a/src/KSPACE/pppm_tip4p.cpp b/src/KSPACE/pppm_tip4p.cpp index 2f57f3017e1..5777658b403 100644 --- a/src/KSPACE/pppm_tip4p.cpp +++ b/src/KSPACE/pppm_tip4p.cpp @@ -513,8 +513,13 @@ void PPPMTIP4P::slabcorr() double dipole_r2 = 0.0; if (eflag_atom || fabs(qsum) > SMALL) { - for (int i = 0; i < nlocal; i++) - dipole_r2 += q[i]*x[i][2]*x[i][2]; + for (int i = 0; i < nlocal; i++) { + if (type[i] == typeO) { + find_M(i,iH1,iH2,xM); + xi = xM; + } else xi = x[i]; + dipole_r2 += q[i]*xi[2]*xi[2]; + } // sum local contributions @@ -531,29 +536,42 @@ void PPPMTIP4P::slabcorr() if (eflag_global) energy += qscale * e_slabcorr; - // per-atom energy + // per-atom energy. for O atoms evaluate at the M site and redistribute + // (1-alpha) : alpha/2 : alpha/2 onto O, H1, H2 like fieldforce_peratom() if (eflag_atom) { double efact = qscale * MY_2PI/volume; - for (int i = 0; i < nlocal; i++) - eatom[i] += efact * q[i]*(x[i][2]*dipole_all - 0.5*(dipole_r2 + - qsum*x[i][2]*x[i][2]) - qsum*zprd_slab*zprd_slab/12.0); + for (int i = 0; i < nlocal; i++) { + if (type[i] == typeO) { + find_M(i,iH1,iH2,xM); + const double e_pa = efact * q[i]*(xM[2]*dipole_all - 0.5*(dipole_r2 + + qsum*xM[2]*xM[2]) - qsum*zprd_slab*zprd_slab/12.0); + eatom[i] += e_pa*(1 - alpha); + eatom[iH1] += e_pa*alpha*0.5; + eatom[iH2] += e_pa*alpha*0.5; + } else { + eatom[i] += efact * q[i]*(x[i][2]*dipole_all - 0.5*(dipole_r2 + + qsum*x[i][2]*x[i][2]) - qsum*zprd_slab*zprd_slab/12.0); + } + } } - // add on force corrections + // add on force corrections. the force on the M site charge is + // evaluated at the M site and redistributed onto O, H1, H2 double ffact = qscale * (-4.0*MY_PI/volume); double **f = atom->f; for (int i = 0; i < nlocal; i++) { - double fzi_corr = ffact * q[i]*(dipole_all - qsum*x[i][2]); if (type[i] == typeO) { find_M(i,iH1,iH2,xM); + const double fzi_corr = ffact * q[i]*(dipole_all - qsum*xM[2]); f[i][2] += fzi_corr*(1 - alpha); f[iH1][2] += 0.5*alpha*fzi_corr; f[iH2][2] += 0.5*alpha*fzi_corr; + } else { + f[i][2] += ffact * q[i]*(dipole_all - qsum*x[i][2]); } - else f[i][2] += fzi_corr; } } From 1beca8e369444bd5c2ad42bb83752055d6bf9625 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 7 Jul 2026 23:07:06 -0400 Subject: [PATCH 080/116] small edits to hbond/local figure --- doc/src/JPG/hbond-diagram.png | Bin 169323 -> 96815 bytes doc/src/SVG/hbond-diagram.svg | 681 ++++++++++++++++++++++++++++++++-- 2 files changed, 656 insertions(+), 25 deletions(-) diff --git a/doc/src/JPG/hbond-diagram.png b/doc/src/JPG/hbond-diagram.png index 5c0a29feb1b31ce6e370245b87e58379400644c2..d610eb26184444d1f1873c1a8a31a5b836b362fd 100644 GIT binary patch literal 96815 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

ZIH%bI|+CX|9} z39JX!8QD;-+*JnTt|&kz^FGfbHQJI&$qk8wOvmHjcp3O(OCUXO$@0FjSnRh%xF}cy znQs`3AriJ>JK$)vYVkdu3y4&bfJ{EZBmR5I7h_GGHMNQ9YWR!AVNU1tF> zE2KZjRHjBU<&iX7D7u&-lVq3@$zWFU^Ma`P*yObg`J-50IfkA8OKdVYV`2Iai|{|K0sL!?1qFxf=@-$b4kd4p|7>Hi(c# z7^PJ0K3bEF5_t=4he*?fMk(z>?+x{xM_uAFsg~MR{V9Q zI~1}?{7;#YEcCq)N!e-vhzJr*_@q$PMG9)VxyZ9$kwaJmck0W>uDtx0mQimO{U)h@*E72=!mP#%}Jtmgr&@-9kUZ5tL~tY~cf+|;V7 zj*T@nU;MYqzKA^D>V@3-KVDNFNe7X232s^0Qyd@j51MF(l=3zx`EezbboF;dB3UGp zZD|iuh)^QC4<+)D%HVLxV;n12uH`FNu5AE#V+*$eGTVMFUnUa4+DM>f8Eb2ZWT79F z1h7X+xqsEhZM^{AgY*0yP2#O_YX!i@0g)~xB`-#z(cw1?8xksyWa=ZmNUj2F($76$R=Xi@ZywoWh3^`a zSEnY99NxqJ_i2zjcD_cb)Wrm8V)K^I%I>{>+}!KGf60Wa2XwCZl0j6Z zoyXkbrL=8BNNMyyDgET~ixYLJOB-~DgU20X`XV}b^zM272*_`Vu=fX5C>Q&ygXP0Hm)_gc>)aiTC zve}MRSyJ*RtE6Q3O~ZzSN;Q#$Muk^q%ywofSKixN&V+ofvi+8E9ntSZJD06 zF*kIuS7ckc3l5o8^TGosq@n!$(KOVq5)R+PU2Y2!Afmh^l86wA*eV+dKyVQxB}gQat;5kgw^7XyC#jl^!az!-t>R(t*$wd-h<(|o4H}W%t5P#BiEc#H$l@NfCaPA z24e}Cw+)GZ(LJsBt7tQ^EGTWAT2*zgkx1N_O(c;`B>kXgFk2a@m-O3NQDMtMUqPd@ zk{+?-8doIKc;G2&bW4z|xL*dV$Zv5K2zcujAzr{!a!oExWU`ZOQPLE6-T}bK^77E~ z+S;q8R#iRpLQTz`IrlE2b^XIX7B+b>cz8sjNG6M;I8KtxWLpSja}g~Hkh&aVX~|4o zrN=;c3$>v6$Yv8cYio&PyAa9X7&WT85x}bVwr=fcyVO4|s00P2ugd?`G);taNoCAb zuC{sWDLtYB+l-lmSFBpseb?5S53aguTzx*rRt?S%Sc$}CH=Z%bDvd+|4}iUlWROVu z#s*40M2uxXIoQK1pLWROIWk{XQb0-r1T~)x(z;HiNt8G9;FHTH5#K!7$vhDbYK43# zpLV;WZDTON)&W2MV*i2RtM2*XRD-dz9PWYy`9w08P+FFWl4ux)VKm7)rX2?jjmg$z zBjtgHzzd6)@y+6F9Hwd+`ouC_cg6hnjPhv zS&l;@E6`k&xfVxp-~??Af>x5Ke8j7z3}9e-LnFemsal@|O?yle;aFH@F!eIxoO1Ue1xl-W zRt$f2!IB|g{_>aYTq1c*W##uMk@)P?;lr$ol8DYkdL+`bR?jAqC25g3s$3_A=K3W1px$S{0ql7B47J^Db)5T@IKFa)gE zgZAsHRR{qfQ$JdT?`Y79W~vC(rSy$N*!~Ycn6_*Ava=l5h3h(g8yl`4UDt&W0+DbC z9ZDj)Hj;yL7ea8ju8Z2k^{B0@hvPWSw);q?)4N{V@Zp_bdwI?e^ASmZRQLG1|2)xn z4H^z-vBfKg4D4B5R(flfPUWmfB-@!(nkITzSD7Yb!=_z6=B5+zJ@h#?SaQOTv9HWu zM8IG2tU4$SJkZ>0U%!0PMSyr65;tgP$DF*vcZFm z-W|&jbZu=yB>fT%BV)#+u>yu}_2FX`HN`4J;g^q9k!-ADb{Nc7Sf%y{9bENVgk&0W z_^m}eeDd0bWMNaVrBwi{yhq*oqm?d)d2xyWl-V{;k3>u(7Q5#v;4^vJtQ6{y^|7@K zVd3<_obXIBGg%zPagx(P@+rHFHvIOh}&g}Y3-;S-(D8GGT*pZxFL zJJ+vYPg8*FjAZf~Q-%#@-AZE$(9jf|bBQFp9$O$4=_L)IUj1Y+oWTgpG_@4gPz95I z{fbn9Uu9(n$pwVV0qH_G9Kv-WoHQi4@T>O{|X4VN>EnV@Cjh;%znwE34vRY>eo_U^?oh*b^O)=+4 za0*c68T|pa5%}db@%Z`|Gd&GOo*GKDu4L&b-pnQ|4!K4!UP{HxWN{S7Np8T?oaUa| zfn3T0U?f|SJ#CImqM6>2?M@_-C4C*`0NAv8^}ao6H1vmX%L{F*T7`J6M8bhONlt2B z_1J{#5lK#*D`{{d(Z~enR8dym=lef=pxeS<{*?B;_ugX{^y@`^I#y(|eZls|1;II! zodkKnOg^C`Mk@Pfc$1-)G0*l@p8}E~Ays=1DIhrq(}a>t2h8CR%mim?2uedb>8zwX zA-4vF1BGfQ!M(DUg7Tr}K$u$4`w)PBmWBFM8gm}JA6NYFC!kOW#25_2Kxs)7cGw1_ z1Q(gTNGVYtZ$#R03bqS@FMZ~l7ks$u{%6;2Zksb?dD;Krz=5FvAP?8wjDTf#MYLpi zEE+aj`r9Ycc=ff{@!a(MXT;OmD6g(X zX$i;&$4anb#}2G`?rEHP<1L7UZIpH>foU*s&LO2#q>%{8WD@bl#w_>Ne56hS?(TTQ zKYz7k)gKO|(vJG<+b{+Wor5#C6D>>Sf&9f!7d!ozv7?!-`;nke2&sV*tBVQkFVcX338Y2cxc+DBD5Zr@gYpb2gyv6fn!Ik4j8-gyAOs1J+GseuEzw!h#*(ubniUDBNvDjlJ(P)>82lO>ax7El} z(17_^rCy<>tp=I|J$*F|Gr>%aRUrdpgfdv=XDxN`lj+!J9;}j_LpUzTa6pa;A_JTZ z5C}Y-3e-{}J3E<$QOIK$mwP+sf(q0_79^D|tQ%n4MqMIN)-x9S{oC>Q^=N88!~(r2 zshL{Jqds;#e9sxh%S3S$$H`A73lU1R;zD$!1XCWtHmxO&$COA0$9Y4B9FS5TTD*Ks z50Km25X?X!>1#5M1|kZ_!r84vOdvug9Zshyl}=GQohHX|D49qwAp|Xd{MY}1M56oU zXACjD#?Bd05%Udr{O3VpnTJS{VSrg7u#gF|bj_o#k5u4nD1i4flUm{`No6E;b7#gm z1a}pgG#yadfFJ{sQUEEr5Q7b#N@W=y_z_-jp0`0h6mZHr5<)nD+l#ALWY?`GvO;};PpVJ46#%J(EyS3vX>zXh8Y6cAuvnT=PMBWo0H6R_UxHmtfq5;2hF*L8c3lHUO4ZK~9p&NKQy_p30w{4Dd0{ zJ_UenGiPqxThj4xKLOUI&=<-%M>46ilwlL86!+^SZPP~DOcPJ2%w*beXv5$CGNOL- zrYoin8%ia%l_~xYnA{L@a&aA z8viEn`tNZ3%UcU&BdVMQcu8!Qxp5mF?Qg}lt9 zu9wvAc~VD>rN<_OrwT+Pkz?{3Jb0)Ujfn&*%F7UqMo%daVRl4HqMamVKL9<8uzK{y z*cq=s58(NE6DP(1xRd73Z&8oUgmIx%p}9PuMb`rO-3cIXE!h9KEEapPOL@6GqpC80 zB|}bDQrA&r$y-U6R(LpNge>L68ZyC5TV*CKRgS?7Q>kZI#!1{Kl6oRtCn;T5nZ+>& z!n=-3)%{9J0RjgT7Njd649zZmxoaz=u6h;aq$VX=mz`|Oe3fmZCXqmGhYpXTzW$P& zdo}u)69UCi9K~@8lgX9{C0ZbnXudb)5s^OGPOmxkHyUFH*8^BFW8Pa`P3HDvfD9V;1WU_cAqBuKNYjBd z4M@j=WG;m6>n2&y*ucm*wXe)X_1U8k?cE2=t1D%~mtz4L zLdm6U*bz_s@$uzrpBIMN{zfe&u{k(gdja`p2!b`KT_|0Y5vp2h> zt9P%Sxc=%Z@X4E}!U$wj_w3z=FMRbo{`_OVxDUVmu~ktOHUmn5!eo*ejxNN!s^i7>kx7kJWGbULX}X}416}^E{+tx5t0)(ct^f=HVYpz1 z0l@>9r1453$B3Mx8Rd+wn=IgB*knFn!qXbu>KloeD-(&cuLf?O4*WAu|H-15SSG}oPN#@-K|+(v z`2GY5vH-Y@1X0c6C0!2e-hIPG{rj3>)5!F^f{`62W;wW?Wz_(J=%$vgtp?~e&X?IXIx&W2fB6H>|L*r;nkGmvFrrN4oD?~ar_xJb`EcjY zR_;H%PnAmv0pO{NP7F$9t>S;+}8cc}f5YBW%~P zpPraDjbYj}f#Ntmz*UGBh}cg6bj-shpKb27|GxCnlBkh-Qj(Yo32@2fqRHc@3n{-a ze%8X8V~~|BG_jFDsU3^`bYyikb&P}qLC@TBj9?F9mR;9R3}k5aOgI9=wqe*dSU9B1 zF>IBcv}}-N`n`?)l8h{@l7J8jtAv1b9SBGNy|fOrN(rV_He?8p=>R5EramSE(oLIg zP!1$XBj`Ym{LC_^#=pG+pkdoaH-PO1?jIJ9|NA}QU`}?DigMTDD2`Ka9B+2+vK8d6 z&^Gc2r?&i!)*k1_K5n|{CVs`F3%2e~)xDigrfRtBqOq}&Tvs){ce#s1GR_*)X^O|| z*x^I0Q1l;hT~t2y|K``>==|E=6tTXQte9jflO52m?F zkyS*odHn@Px-Zi-anZyv`0sCg6%YMn8Xo-7_c7)2OZ@fEzc>?n_w6tE`lZX>!KD{Z zz}1s4&B|a-pE)~gyXRh{64Ll7uUq1!iyLHV=_&(~m|G`K7{f6x@ZoTDteCMt& zWAddJ`dQEC{xuV`=bX&l8nP}9J9Qa#s7oA`D30T1jGwizMoKnCQkF521n9AGGv`0i z+-sv|>c=2V&9eIeT|?A72|dbnlMDdsURn9ykw~O;WRETsyp~g*NJj<(0_7M45Hnze zqcFm@#+$IpP=-95veo)X0JkD~@-QqM#4B5ub$H$YAsE_hj+v$ooSI55YkIEdiqL|L zrWl(CfD19U=28RHj`KZin;1}XT2OCv1f6jww?T09OC%i6<&Lmv%WV?It>Kp)!-nWSWHF(0L=@uS=K8HYIAa2^5`QL>=t^xW!vZuVDp?; z(0$A}P{@X00*o=#rrib8Kiu}q4-YohQi!RS2ti;vBPoR+9B;27BC$EFzV<8tKwaI1 zN3xGgE}DSbK7A9aDm!H@zi8qZY}mXR>o=$o?b%AZmu6+i<dFPB!GdEm=>TX@}hbNu_06h8h^SJcl2{`#xuDk{kbwsp>T>I228a*Kh<-Enu z+<4>QuJQfn1F{>D``);ji#D|4rJpQtC7ZBh%EZB=Uz)$}7-S`pD{&nUbTyL6{}?x* zpJnAU9b?Tus`3m&kwx293K}bQqtsLm1P2+l7<4V<1&L)l5+@RVB`Q&LO_CX zp_Mg;PavVq>WDH{cAN}=MCMpUE@)-4kfi5j3x;t=gW30sM68X8#Ah!69(e=Uo~Qpd zeH`~qJ?^~kYm)Fk1e5@X0qZC20Ol930L4)przV+f3#mL77c6;#HhK1+fAzN8YDbP7 z`Oatl^UiLekkyY7g~$e+xvpD;5L3VkMyjWx)O97CL%0r@1cVeIVF89veZCA6#9Ut<3r!&X zI}j;#B)atgEnA7q)Xq*&odN7jC9!Sc0#r}95Q5~vb^B_6HDk-Jg~Uud`$zB=xv> z;#i+du3fhQjfuoDGXna!MpE$kEE1Ww|AGG(FUs1E&vDbU&vF2Z+lV6JLf@wAQm3Ot zBy-oX+^l4IRn=EI5Xt_fWi9Kj@&rCX3`RJEMPzAdtEYOg12|^sZ9*29sa;)}M+k#h zrQOC|7a)RwR8Fm2C^yz%8HY!JDaesCcqOw;cUZG{)DrHrRnFR)Q4Syqi0aOr{|o!} z{dYjEMMq$I-i{9U2m$Eg-?&M{iog8gD2^hTY|f15SpLnEVk}?2TrR)kGkY$*^wI+p zF1fO=9gcJtB2B4On$^F#xOeh!?T8VB2T&74&H-i0r;;Y}GmZ*;RV0_R)Q8!gOw}Wn zp0R;PD7C49mLK_%UYA2MS4DVD0TKqlc*c^QDBpppWAmK#0LUh3$-)5bBi%=g_O=zo z8Gx>#5VkLv1AFM%3ubQJ`J3IzWF46i0;$?anNAZ7B4S3K>}2~9O;%mK4;xo)1?RmX zM5S=~p0@5|`pnsQ@Rz?ueY~OB?HU`C&Gv%yMv#yNjVcZtIs`W`-@k94tbGjV-?v?V zM_ae;@Sktnu@l3`Tvl*fE(G@PKY(66dz>1GGHn`R+O#5>JXwasOaM3KSyRsw^4;cM zx?sxqz6Qsm5_Bn4HQ)>q?E7P1nYaE3+kp@Ong~>wiNxp6?bj=$T5;*VIRF4407*na zR7o{gyptmh^%SqRGJ&Izt!nt~AZb*Oh84_p%f^MO73Xl1~N=a^?F z1tCs>zr+|TlF8yI4xD;5lWnQ1Z11|oqqScgC-&<8#eMed+5GNr-?@4AYqQ=tu&=h( zaU9zH_FJFmULNILOJdEO9;_gfXO@-8GFleMvO$&w!?HB7v@%j5&w$6vVg{#hSUKrw z5=x%ofi^u*!0b7jvL@Dq%CJX3N`+@q%8#K?VZ#G4DR9NVuArF~6mC1b#UMxs$Rpsc)Aw>P=LPckiyS6(L4QZ~KbH6Uq=x&*{~}DW#Oj^ab|)b!C8G5g>&!@5z4i#&Lb8)=^X3 z4pmiODo{7sQYmKppRW@2Ip$LxiofFGC=L`elc!<^@mLud%zoj8I4$+f(i6HO>RF!xBNHq#-~)EXpJ4+#)R2uSYLrewFX zl2T1xTM$*VqB5EgdYI*UeREEQbTVMML4$Lv7ASomfNrIuzb;luT0mKX`bF-7} zD1)VFhh<16uhTB8c3WQi!t_^sl4w~L9=PuwOc-;Xe?xWqm%f3O@2zf^}%Pt$Yj|*4V)J?BaKBeku%JL9nN2Y`HT*S#VGkuPA>kls&+9Ws{@-ms3HX%d|5)zUNrIL}VEePD445ak% zN;#9m$1JbTGJ{tq+Ra3dNW|KjNPOXJ;Gva39kS)F&1EN#iqw^)te1hdPm&d7uEkLt zMKW0&?L{7QDo3)-M156U+u;&yaCdKUx8m+jf)@yG#VPI%fg*+C?(Xich2k!y6nA$m zdUMXX_jh0N@_))_JG(PGi~ivlQ;F?|+}g1YYm#kc{72l$CHy4TGj%IOh7@lHbAwYI zr;jueY|=t#qiGfK@C^}pDOC!}q@hHk7`Q+tK)(HQJ7jkZuqE?Dzzwl3wKE&3N|)2? z=7{EZJPW)|Mo|-(E(X7%d3lz6&9^uD8!s%tHM=E#)PyC5I~;Rpu>QbmikYg;|DeW0 zcp@?~=1|8d3|g}QK)h?&hXiS+ua~CvXI#>ChGX_9$IKhBNJT<={C)P;T2wD4uA5Fa z8*@9#4WG2O%|CapdKJQebG1ns`iYzU+Tk{BM4J;DKYQvv#stpb2(;k>j!_LpA(wgA zG1k$alC%SXJ~_HAvGNm_dj4tYZ}D$tadvtn{95xT(N*}|>d43fkWI?N%7$}(sGul* zy>N+L*Srfr312k8UBrcE>wT{;h$#=P7DATs(i(6deSciJlSpSHi?s%W+9_Y!Z|TEAR7hKczsyG>@;mZrKs<9~?W; zAy`D$KHZq9&g@9p{^=Ka8yN^6*(!``Y)Lk_tGL8H$fz znQ^Zv=DaSUi-`LZdYrF+8zv8gb^K(!ynP}~g+?|$4*TpSSc%CkAZN@mmb!7irvGi@ zeUE7)j^WSFb+X{i<;jM)^O%8`l+8iTv7W2*!*OE{n^BnR8P)e{M!zrlclM_&M@VAP zI;V-RW8PLbNrG{sE9NN3+pAoR@}|SnaGQS9XT^bTTrHs=mvhR~GGREJv4SzKX?WoPtpm zERlH4+a7IMW40y!L)6O4ZXX-p)&izdCGKpBi%HDKB00Zz-Sm9QlqA_6K^Lukw(_o-K!7Tg6b!5K5uO<=@4IcL{81yQ1yAy%x;uDh5WN1ArDtrAzK0uH%m-bW^9H|I)N z6JD8v7(^ddm=^!4Wsuxxl{lSlyb@Ge0SyYjW@Cngy-U>&ruenxsU29&%`HgL=&wb% z=<`wXTZF?AjbkOKH4YA8IO83{7>n=yG;jJVwHH9#X9@2hG zWNA^dk`hs$nbQv=c#=jlQ6Kz4vto>8V6tm}3YL=AW)~hth#OUjtU5Ihi@GT+XiUma zz>vT0(0Aw}6z$Z0zM1a18K5nwI9 zIRxZ6_V^*|=R${Ou_u!w|BcDO6tT!E1`ctQ*u2jMjQG~HphNfi!7r3oBsmyJhp$pR zx2b~4l^y0bN0Q}YAj`$;0b-~I78i~bJGC37Xx+V61Uac}HYPJ?#D3N^g6%`hQt6AX z9#J4)JS_r=B>R5=cK-jXbmrK#qf7*7S)756COcpIbS4BliY_h)`Um(sA`^hZ9ISY0 zZ~{z?!ZrtR(TYf7slpT`TMg-6w%?0TuXv8zRRW!8Y85n=>+1=0|%3BZ^3t zv)EG5kS|kp#2;fe{c|rSGxgfO3cp$r7mHXTV*j=7&&zm*J#csgmuEt zj9~vh|77lONfb@5T@i zdva80LI5YRrE|J3Nk>O@X-68YrmNs|wvmF>szkPF4o_X)$r!(3#BA2Y%pKb?A%%=N zlujKYWliLqULNE|DlW}5XLH%~li}R@)Makd21(>BxKv{^#)mDd$!FbeQ)9OaC&xl` zLyyqA$+?mm7v(JRnvjP_gwz_xWdXx8qf0e4K@!h^`ahTO|007`cp?5d;Ve8^-{h1$ zLCF2}l5Xp!6f7-VjK~LJ+JFAkRBkIsY;f+hKGaM6W}k6P#{gb=2Pqqc;~bJHfJ7?B z`uM3R1qlHg2q0eN34UIDXdl^}(CLQMU8o=P_>dfcY5b8W5;M z8kc06_Z=N*7<+!W?8@z7cW~5XhP>S38x*r=@p#VP8+j3MQ>pyh|BbsfFD`uw?qNOK zb1hvu96FO55Mho>KsN6D+ML*!QmfNG7PwxmpK2M~4u#HQ?lmPYL$W z^Ag!`e3A#DrBHK3T30GkWm3VV=Hw#B5-{zb^Hq#lsK;I2qfuY<@D^!}bcH2*g6}VSqcLztHBkHGB z#@r&Y8(Hu%$zJq_LgVmG0+UrgTTo!-1@X1Z;)flOCJ z`Ye|dXzb4`S;E^@JNJ(oHbfAm>Gh_6lq$e^0-OgGHypxx>U7o^8t~-qHrUZ53+8ex z&YsXM|4LP+#MSI4R-{idLAr{%dh^{#KQl6B8)>jJq#Yt{Lf&s)Q&D_duh3j~eM}2J zE22&k$yQ$;O=4a?yc=D?uCQ*GRXgqr=(-D?mPBRvA+b%2AQtN;vp}?$1ZM^iDU59@ z?nyjT;oyJ2?L7g!I_B6kB3nT4C26&aw1kX;cMA26^J(2UgHXTnqCAi z)t&4e0m%gZbma#T!ThG>BEEWM3~BhZg8I7C^gSzvw=>K>*~$TuRD>%YY(hK<=j^Ls zh+(_qd(pk&`B=x@A9|Us6x$lF(wQds%sY|ws<(az4e+^7gYLs;Sj{c@@udd!99sem zmKO#~_7IO{p6mj;Kpg(lgp=$9GEDXkS@A6>t9toKyKz7vMK( zVm1jxVjOrI13ZJyF2sfe^`|pYKdvL845hE-w#*puN>rN5d7e7|Ji%U$*Q~)ZO%Dzei(-!mwFLselS=1Pe?Z-R$>c zYfTHXOrVWSqD4E2XugG*ddKo>qs+`ATlERC`zw$cAzneMC}Fdl){6_~?S1+AT0s7o z>-FHdxz^~;?Q|=HShy`rDM3{ z>Is&SHB27Z5+fkCObcoc7xeA0dQws^UwC+Y{hVB+Uar8rcJzg~=faAsyeL6I9kiq| z{VaBIqetkq4%>RYnSyZC)U(LU>qt&$_@>^BQclr6*6Aru&+&*L00{qP|s;2pt`0nsWKO8eRdow|NB1P-iR z=pSL(0k8k!5RXYt`GmIGGSlNHt3eU)Tkv4%EcNz5Neef(S$*l7ETiHDSE9mEhDG+b z<09UE$-^PFd?^G?3-w=;iESy4#>iPx0Q;8d%|UR7i-dI#s=4ejb3aS<9V}&+3?&^c zi-jlI_X7UZ%B)d@@BAaW$D|>h_op=^Qg>e1qYTFBQFs|PrduoQ@*C+^W>9a;h=@;_ zFyvGpE9Sr98pNOtOY|8pXBDn-`4BsFT680MUeA6?hZL3xVC*WuGXKdYtnZoj}9Pkl7M!p;5EU;cg2 zD$`f=M8sr^*+l=_O`PErrK?ZMBCb0a z0+*@c{O74|8E~tXLBd}R$Idc&{vvuzk?VH(Ar;Y@0IVgB|4QlFPKt3PO2hZ<1P0)8 z2V9NcT|Az&lJmxo7j|+NmQKJQQqlUJ9Ub-Ch>G$)=-=mCure2i7@8B0?|ZK^Telb7 zG^%d+zcXO{C{zg)mkjI`0%^`h4f5i)c0jbTCEQMglBud+i`-7{$->7}N`pIMQ&)d6 z)_fEA@O?_M46focP+_c&z8L-vNd0Bv>}aV;uPQ<8z}e_H{Z~Xdqimt>0gPJ>!z~Ek*+n=hVw#319)()pDcCfDFN9YUb*{wm1US zPfqmzVjL1U-RJXQN!mU3jaRDRo(q+CKoqGM-C1IaS!8Kxc-*HE<9Tv#YQ90 zDA6)$0%v=65-F_r>PUS3A?_~~v*vc=y%dCo8_Ed)<{9#tv>EAO6*9Os!3nQWH_cohUzveheBWWiads@ZrJ*A zgx?Qs1yNee7VhsAwbs~|<7A%dD!^kI@O@;PBlN!X(B;Y>DT?AG5Z429mpuP z{Wp!24`JJy4KIrlyL|Q0;0P#HMv2r3Cwo6Z%-T&$VE6l7wAJR|y;}F(29PV}e-yvA zX2bo9d54R(Px^r(KY5v2Mk~?a*jS$T=za7vbH!5rZ>(H6$~T2imFx5X%`69!va)r| zJJD2i=GTkf216~g0agDKMvShWK*K(c(H64jnmhdmti2)P*}H)gc-u7=&Df+!COYBQ zRQ2sf#7gR9p7lrc<4$APpUz`)LcxENweMJs=v+~#odv$1YtatWp^6bGdxs#iNZ}if zRywUN5A%E}@c+k|_?K#pAq%oFkv?*cV2(Se{K|`)#CnsJI(eTMb$XazYixinY-;XWEIs3vj#87 z9fgTEL1h}rV1NuITf&D-#3;6il@J9)zvl)tve5SpQscs;5~d~UmU4>r>5Uq0b)Y~T zQ@M3AUV_O2w8H_$Sc>A7bW3e;WyRAgtKjawYuEc2azZDF1Ktk6)$GA_eJ8ebQdZv% zGi3T7MAlksnxdudI$-UvC*@Jm-VO--RvvN=h{G+y#K8EeQ<~NZ(+fWt};fj zRK~ZdAZC_iAS;)s^VsMPFHpt9_Z%(Ee=esDegk1o3-wtW%AZwnaMhBy15uap_W)FFMz7$D6j zRZ2xfk?2u#8+waSpu+Ui8p6M=Mb+&-4ONqU!P@@M+J ztL){e5bPoBwLSnpU6a$oJv!-nL}fsN>4K!X$T=c~^-cw`u7cKjuf;Pf#ZoYc2?KM~ zO~Uh;5oJ-5(RtJyP&xLR5Zqbfnk6kn8Z7J(I_JFh#dlhy@*K&3t2Z$Cm-dS^4}JH& z`=9$l3h!#7RR-H?=&47q$Ia1D2|=9jl-aD$asOk=lfx<49iBf{3sPoo26bk`iT3udM&|X##40QuEvu&>jB zGIk9(bg`I=n0MU2)AgAvOgIHFGGXJ`6YA7XpL*{@L}ls2{6>WFKL|I3$kM)j~fpmt;M{n>ghO zYlyYUGTC%lpki;GoFP$4R+{HKT+b_-2%*e`2(u)p!^xClXOIVh*TL<~y3|RSMFW(? z?9;|7Q`xb%!J+ZO1p-{bYrW6Bmf3-llS;elMF*4e!<^%sPp3jMT68qDHJ^7mt6Bpq z5_I0}p*?uwIM(_YQA_^~&k!0_*F+VA{T`VS;N$GT3|^?5zNTt>*}A zA$LegUg(^savH~CZe}E-29fX4tK1iBA-^Ex_ovcLBAeHwHn@-9xbmtLKuvBUxW#9`z<*k~I8-n%>d zJ?GR>VvQw|U@jwJxys6ek0GYaEb&l!(0cS5mk?cI?D)S`P18#JwUbyDQ4sc_@_eGR$~Lb;)dnSjiZ z{`8R`3x>XHL8oySx*9IThpmQ}4oPa=0P!wUoZgd|l`mKriyPhWb&KZ&KtY9l?oFCg`k-mv@sy(G&M`nB5bB#BMO5{tcb5)~8q9RD&JEP!Z&$EshJuM#i_tR^D0fNtT`Im@NGOvsg5@)7;@gastuLN=zs|KTB68N<-Redvh08_LH@ZY@#NzKfZ^!t_cOK z*tageP8F`JYE}Vs0t0)?Jgd5!dN-^sGh6Q-gzt*{USD6`3=`Y@^aBIedT$ijyEO+Q z3F=vR)_m_rF8mIJ-Ft6bpPuh}=v5ZFFS6uKZ~<|$KL|;F$w+xd${KP&hgde9!y$Ey zb$b=(fC4XQAKoApbz_MoKL?Pk0kz>c(oTSl5=^e}XuK zI;kIIzgT1MOglpGN!!VU<5yZR?0*o2=jK^(9SZLx|M6WCT_?t0uVY@uZlqT7`Cyuu z`j|xZnlKj*UMHW<>(Q@8U)>NI5P;x;(>4G1^sszu4!ZY%3^=>l5HB*GxsKBqR06+y zHNOg#D>5=ku()Uh=311O7SXdaRXkIfjT#h}#mURyjm~A&z^RHZ$0@b2>!SwNn%n6M zQJelhEdWH$maG4Z?*81lu!r0QmW)1Pk{b3jPHIw$;*Ds!#(FLm-YYlerUZ65$u=h& z=hnts1nc{+D10mGua`TyQzUa-qQOcjhP}5zVq0G{(#*t zqW<7Lb4(E1Ugc|PIRg<|Za!{(aWjo(=R1jV=fK$=K3v=_)BBTPSDTX{%lhI3#WeP8 zPrH$-h_OmX(t7T$I8hAP6I-=$b=3aT}#0tD#&0T#;f2KBeE%O4y zwl$~Q_uRm}HU_+$z4e#fMWm1SMCNaYZ#%GC-I4=l^e;GX!XiCk1o+SS4nQKvn~Qh2 zxzH9>V@JTQ5)*ugRYeKLIgIaStdRvSzzlLez#QGFdS9pT_4DX7YW}UF$+-D!rD=-1 zhWZ6(k|vYus<%!V4EvF=34cNx=6df~w(`-J#h&MjUkS)uC;(UEK%DzkcdJE%(Tbio zTjvfcY zfwL0J>2kD&{1Yi9pAu^4=m|n1d&=w}THN>n`eL_Xzs|XZUIrNj2n3}H2ItxT_stwt z8VNr|7EdBaBFG3(q*Tlf>#jQDwjFy}xJtbeW4l2Mkp zON1j4xYx)K2=Ixr@a4*71s~8~yj(RlMty6I;_~H@2{llS=DNnx^+X7PTYxx!@S~&D z6w+>{!e|OgKd^r<4C*&y3=d29-=Rjhv1(MEmrYz!l1xl1;c=(c(Cn1R6okNKga1;IA@B_ zA|i4J5cYZWkqZ%)f9FKuyNIVY`;B6rhVlez(DZ*cEV|$-8s-{R> z|5zp7snnCm<^(&H$NXZR;Yu$^El$`oGvd{1w_+P)@JtpXzz{&16`@hZ`DF8HgF?wo z-3u8s4w~^fO2CZ|0r*UdeB{BYE}6PmjW|u21cRnu&P9ng>R`y^Dae+`#SeZieL0B@ zFyMw0RFIr!72_SO!j7;N^{?0oP>iRMED?N_$rMV5-kwnEMCOd#jb9K_B$i zMyi5V#wcZpCRI}Es8$O1n1l)d$pdpUE5gqu_od)=QEP@$?~uMDgr9t5>RP(B`zs6b z*HNZbw8UV|tX8B~JTZlH15A`sGohZO#>i3(6sCN_JEMJ@uBoO2VYeo@9`wQdqvxADq5FqMw z2RGSX0Vthtd0O}U!D}vX1FbU^W6H4Z>P5m~t22x8Y;oXh6N~oogJ{CLk@`!kVwo;R zyR!bMs7Sgm$CFagJ#UA_Rd@nDIU2*+Ds>1s6{OSO6IZfW_ktHWo@TK-@{~~W_9DsQ z!Nr4$!OLpl0fs3eujrUpNTByxLTVbOFREs{C$EP4(;s#LNw#}WwqJEckELbPv+Gp% z5mf)+C0O4dwwQ^E@ZN-OkBCFIjR0iI=*)pN>pqFJr__<2{GhKMzeUX!AM3F7G*<8p z(3cF^M=_<$HC9-W#~m)?4vOAemx&pNOhr!Fxv1N5JCuWYqZ4uxZjcaUVzGmPR1wgh zDIsL1f}J~M+~FW}T5*^)@KjP_ZcauCtuKMmB5r|tJo@K_Jca!aj9=wUz@aZ4ecU&T zcgela=Z0VsCiQFNO;{+)h6kdDF6sw|`g#mwBWrsculg<*E&?CrTtrDgHutoTSs=cS`!__I3t zY&0^o=CmzaZCCDP;~)6OOnYa@b5W4WMg&7t!kzBe+g+<#Sj<2Y=3DJ+DosW?Bgw6;uUZF_eZn4GBqLma>ztt>H|N0Ov+OjXUQqvLp9LN4B zg4V}2{>Ec;^TjbS{ zuTDX?v|8n;ESu1wYod4Jtfo=T%HY$^;9Wk^l+;iU|Jet#23eDa1$QaorCf@(ynKl+ z0kEm0#FKoKO$ho7P-fX_v8_@MuK6CxQ32hxy8ar{xRW4Tlw{NqsLqzDdQWlSZv)o*8pcu2J#3VEnRPRWA zM=*!MW{4#9PFHQ6%?0l(|I91~_uSJK(czJvXKwszb6hXHp!Or$Pe(?UK*sz`9Y#H6 z=Vp}BoYHDYpYZmeLzR?HlghX15HOvi)6IZfuN{jq)3P=*0SKC4k8j9ZfQRn1mmrFH{|r*1~gXW%TxZ1t{3J27>m{x_02drf4A0ES@luxHZyHfAVf8EGW+t`nMg zB$yFu4X^kU%=77Ca=c3}JJz8iij-!g14#)csuVWNgN+Zm&6(hc)V>09FfL@DvjX3=uu!3WD_Qx!K znGDO5ZzVRTs4%X6#J|~iDG6HFRjDC$WO4!5t`uT&(U!ZZ~7(Cb{ho zRSIG8LyQy5dV~PG&w=~@t^aOc(#6kV&FtV%;>$6PQ%>se+T4yCzd{U+_OS!zbb2;W zQoF9NH%EpLMPP6vI0W&K{-(0_M}Bm$Ynyyk6^p2@s)Xaxf*ss`jqD$ZnX-HFXB#pmLo+H};(@-#P z)Fj||i>J@IM4v9YTYMUi*i6LFFThXGv++ZYJq(YU=N@HwrR&5W-9m$l_`YX zJ#$0GsoKwey;M*3?sMlNu9Ebso2;DIuHRA|s}=nh_msd@Bki@=4J8CXFlmx#O@6U$ zohZY=1)XC=$`O>KBUo9l8+O%qs+c9)LX@(uxOHo224_)tjoo-^EZIsil zgPgEUR(gGZ^mu&!59ntg0~kn5ySchtmfI-eW;JpdDnU451nvB-&@~5jG63*#v>HJN zWncIU&gTYZ@qBa>@KI9fs-o^UWf)TuxXOthF}K{d>%8+=5{B%Mi3B?0l@8t}DW;N) zTNyuHR@jh4IK*07F&wze5*mUlXGoeuC9^jv1PbH+LnxREHFQ76>zMsi*d;}>55oa5 zR!V*VtTNNh!jM2;dhL%_3lP`6mMT|1f>N&K7V~)9L`=_sqV?Y}g@tfX>==5!qbjrH zJiJH-IKxUA--`I?7?R|o*H7Z^LuX4nM8|b>pBE(-QSEC6X{3&ZZdnH{mzzJdGUCAC zBSg1lFLT{go^B%_83L0Ho8Ur)?1oH5%TN5pz)JAwvMWz6V7g?sp5i61m-y<#H8yoJ z*U%dZSoK_P=~v|)`UtQqyPv;ZmW>6g-?;we zgm%xI%iJHJB%W6CEyzF;U?+LJ%oGO{bnh*hre|)Il_X2i{4Y14dO_{)1 znIIX=1kizOs*8mPz1IE*CKN@OPj;Nt_O^eT&B-Wd;P~cR&OW?$Dta6b|!ID_vx6rx$%gmj7QX8iKGXbGqfN5Xw?gq3P}54db$76A;uQE?BA8~ z{KUWT>hw(EkN?r(HRE|p<_OL;Hv^Gv>(d!v`trOC%OBbGWWPlsYQ6T`<5~t(aG>L$Ryh6t@-lZwjDVA{I&3TkED$P2kgD|1v0RXPSTgd$#8~2}&RJkV_-c zY={USmQ#wNIP7kLKpAy1vt}1O&^$0ue3FKDWx{+PSo-Jp;u;mpCdSmnB=GA-kH70ZR`kS4?>}3FVW#u7Mz=)JagQ=Y(a0HGXw)kJb8W^Edq#QYvl|8m?uMVBJOV7`8e}Zv!HXyD~x+ ztrv!tJDDfxUqZI3XJ?PMV{Kx8kM0%npRmJT;t}YyY^|@SR_>$bD_!1)!e>0E{H-!QZ66;4V46mFF^Oq()A2DH;o?DY6zp(o62kYdyQ|qAoX?KVrUxgbO-f zDfl!dvY@C@M41iL@#FwqUTmkLhy`Kn>}8v3{ueVy_T6jM}_G`l|au_TzZ(3)=O!Z}FDG zpUTzvm`Ex{Z}kX~>n;M^E?|wm3tPy5S+N?uHp`X$Wm3=BFS^x;1)m>x6dlXZK(H~dp) zG45x-KI{7aFSobhtnniSS)YCDC}Pod-k4GEb#g7SD=8gW6(HY7U9ihgNB}5xBH6(@E=}yV&=4{#lJV{G+=^lO*?&j zdh;Wrn%gJimZ&VR(^(*WA_o7I&RPFwc5SAQ*b3d6PV@C{vwo}@;<*m%J=rxIO*S^~ zOtl%@ZKl6&Hcl^ErJT0&z)XQ}H@WlPP#4lV*)K7a4f6O11i^UYXRUB>ad{}CP!}9^ z6oq2IObST2{66MR*zUPaH%xMy+1ebro>iN9#{^vcml(it)8!g}cwF)Pw=>{*wsFd?^goaT?Y2o7iyCm%|{3qJXas{qwOMmm3N8SRKiAW%Mij2$73T^Vc zz4eE)^AX~5bJ$y1rznx6VAmkO{v1&*zAH|t%k}WwzmNOeszS#>((%B6ZP(nBf~K=H z5<{}v32s%IZVaG2uk(U5s92HE)}l5*O1Hi7x~N!@=nJ$nZuh9!c7=3Q^{MoY-R{No z{Z1N2iUeG2H+m(j0Lt-mv6Yv!w88^ff)twJ|C+4u1x>-I0F>eAWPUmWm?SZz)rV;J z432-sXIPF+c@K-VUHp@eu_yt#4ScW8L!n9G%BzY80P%F1H z2AT%{mxQ-D&ve@r5IW~DF%(73Te-TE;ETVChCQaNcZ2DyiinO10$0XuG$MiL3%zFw zy$#jucy@IMNA~4l-SIX_n+a=HZ&x z*pb3a^g29>CIW6+8J^j@c{uXthm>V+%hG4dIBIwH*lsxavKc?_z^RG_K2@rS`Aq%* z(t@1+{hju+>4_OEFpJTP)X*lE-&WAui5sJIM2B;IFLdWneajdmDXoDjHrG{J99CLh z@LrA2AN}5&^{E$FKhY#ji`*z>0%@Oe^cuZeptDHZK^1uLq#@YIQgJGoa}ANS$qFN| zRO$+d(IrJdYpz^|2DOnfgoB)i+s!cfY|$2bwo3-)%rd31?-q~xe5NLgXuXdJ9xqQz zUu>`-aH08Bmwr88u%rzAuwk(R9tVJvIfk#qj`tQvoC(;-8#wEvXk@BP{{dgsWSqJlRwl}yi}%=Mh&)#%Q&o)oV6 zdF7NqGBf~|IZ)6_+3D%Rmsimx5scc3wpYG`gyx-Z3uF%`%}4NTm!{gU8jY1iws&)S zYkPZ(L#`h(`O2Dj&zapws0cA;syOP-rZvMVcukex;jn&-xJOK)>?QLo`{_6Q5(4D&f0sbW$R1LL$t8&qX6( ziNO<=tk+(Gez7cW;K*e4$N)BCxzVQ+i#dL^)e+ga=T3NUh2Q7_$IYF*BS1U^d*b|T zw)Je?^ZHvQe;01w0J~Vc-`?jz9?PElRql}&2pl;#{;+8cppuy~a6A6CLjHWV{7(kf27VvJcYNYV zr4^qR#aN@ECrzM?H?>`ln~OsLk`W=tSuqFLLH@Sq82jqbec1Ib1z&gU*yj4+_Qj(r z{}1cmrd`UIV8*lO9mKNi)_nB%+fqNn69hSx4>J$=EYG!oE|8c8&xHx(PrR~+pHjB+ zJAt@1Ld3u58o-eU0**wDup-N7oMofxshEvmC4+7fOGYsaZAYE|wFb6*e8xhD1E`1| z!IM5m7D`j_$B*xvgOl$EY-rQhdKO#ydyAFdJ zM^D$+Kip(Ja#Z@h69S-9h>P~n5W$~SF(IdR22&nyFMuGWYcrG{j8efI)%9E zX{^FQ>3?sd|{; zpM=Ly2=zv)W>XvOsBU$`A6VxMc{YZL?rHejPvk;Ra&r>Jknoo`^5E>FT_cL zrZ7gNaOAK6ii`Ka8+7H|hrf+Gc%weXPUXMLPMSj+TK0*J646O$w?T$14-AQ*EVot8 z-STEzU-5q#ijleP7d_R^sICqa=JFdE2Yl0n@SwiPv%YHIWRT&~xM+SBC&yI3AW~6M z6!%Y3dbEl7_TW!vQj)=FRCI+2=pgItf}8Jn7k}FSMLdw%WDKHz1TVsCjbcY-uvJOn z(RDIb{lq8Lmqquyvee@gFo>|F%6uw$KGD;_Vg@H@grbuE9(5vM-{}FxR;h8;_1-YZ zN}NZO)u9ZRf5@bQ6%C>;P*n>tC^(P3(IL6%*#8&wu)!LEuN(!4m}ekC*fmR`L#}&L zJ@moNGmV5-4|-5!{4S@y%OOr3c)OGP^H-`-&=2-**xtvxi;|{K(GUgd1f+6iUH$m3 ztsAlk8J{Z_Rng>$T=7n}_yt9x_h9)7H^+9Dm1?S#ly4;>U#gn&llU$r$RxD25r-*U z(P0L=K8inIbbrphdEV$<>Uxi0*cZQD_^WYE?ff-gO(&^Uw?WOs+U*NMYX5Nurf7PI zWkv!FBgejxz_&?ayG}?|_Q2((Km&q2A*zy)k^)mXt4kk_460nQiJ4hc_?2U>5Q}64<%AsZmu+?_KEZ;ch}s;iec?ojqH@jWjewJ))5WySp&$wzEwo$>pUxRAk})*V_S zU`;hp>OY;> z`~EhDK5ES}NmYyC;Ka`}N(@?51$VH@Ch`UcTC*XpmER-4tC`{x_$;!aYov0bUeQ5LsJzHv?i4JH!75q>boY{IOk0+d0Wb=jCFAX|63*SAosa zU*^_zHw>34AmCa`lTjZ$6=ed`(ba9ixQXm*(Ji6Ml7f{yiNk{axgL~};pCbpAjs#s zm|M{o=K35f;I^8U`O+zh-q!p4S_E5J6ddA$a(!(J*GHc`!|!$2GQ=rp@bK^zZ}(cE z&e$sl^nb06H8ay^=JDg|&iV}Khk(TS3+|NV4Dm|GdsstXn>x@1S3D|H&V_WF?0*&~ z1*82WK}u8?N*XI@MOP+To&8Qz^oRd(_428?J$^Qt##Uuy^V5pG?+_POB{hbpNY(X& z<`_|auQ=BcNf0k1^wjnOC1f?)uEI?fPY4zS*drtMeJ4GX;{1+8|vFP>I9rggh5$pRjReWjNCcPk$9 z3Pth$L2dt@FXxR{gQ7EAOii4`kzstG^VxP2WCbktPz2sr8zq=NO@Dh`P3?(^bUiik z_FjCAHF?N^(PS>Vxti+rU&+@?W;G5x#LGQNnmZD{X-c#OXkvweyIFk~p)$GoHPoW1 zRiWY){v+@w=zN_-nz-{8-A%Z$-D{dukF(Y8M&X^qA9g?G(&^2=_@P_=L>KK*Q)WqA zF;|!8N@s=2Q(H$Xkj;aVi)s;&jg(c+3NWS+LN>A0M}qC~`rAXWrGS!hLzqzxUgyj4 zz877tc5ZG-0ES~oIs14?PZ!y5tNk>3`%3647U!XqYmtA|2?c4=GbG+dRft3)x@Zqq zD_l$Q{Y#z%>Ou8@qy)7;ng2(uq}{9dAowM`-%bU(pXcYG4{wONxKu=2;i{OjfuNfSt5w_S=|0}tV=RrqW0?x@k!1K z2}3Kv3cY)~LfTQpcr)yzM!#g|Q2RA3O1`)sprPzTJ8 z2T0q*|DswCsXqI?W~%foJ`G!#O2b9?)>D8wv#>xDN9{JIi6V24HMCVN^ZP)7eE>q3 zeE=R%tU`ag>tXZWwUM*=a?k)}vrxAE)-W3zd+>PldQQFMvHUbWZK8B>G9yFMn~}

= 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 diff --git a/doc/src/SVG/hbond-diagram.svg b/doc/src/SVG/hbond-diagram.svg index a00a2890eab..4ee727a6eaa 100644 --- a/doc/src/SVG/hbond-diagram.svg +++ b/doc/src/SVG/hbond-diagram.svg @@ -1,4 +1,4 @@ - + - - - -acutmax H-donor-acceptor angle - - -rcutmax donor-acceptor distance - - - - - - - - - - -H -D -A -dist -hdist -angle -D= DonorH= HydrogenA= Acceptor + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + acut + max H-donor-acceptor angle + + + + rcut + max donor-acceptor distance + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + H + + + + + D + + + + + A + + dist + + hdist + + angle + D= DonorH= HydrogenA= Acceptor + + From 31777c8050c38d62827d00f2ba0404bfdfd3cc4d Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 8 Jul 2026 07:36:01 -0400 Subject: [PATCH 081/116] add some bar charts to visualize the numbers on the Speed_measure doc page --- doc/src/JPG/empty.png | Bin 0 -> 282 bytes doc/src/JPG/speed-parallel-scaling.png | Bin 0 -> 164258 bytes doc/src/JPG/speed-vs-settings.png | Bin 0 -> 97294 bytes doc/src/JPG/speed-vs-size.png | Bin 0 -> 107087 bytes doc/src/SVG/speed-parallel-scaling.svg | 121 +++++++++++++++++++++++++ doc/src/SVG/speed-vs-settings.svg | 84 +++++++++++++++++ doc/src/SVG/speed-vs-size.svg | 81 +++++++++++++++++ doc/src/Speed_measure.rst | 35 +++++++ 8 files changed, 321 insertions(+) create mode 100644 doc/src/JPG/empty.png create mode 100644 doc/src/JPG/speed-parallel-scaling.png create mode 100644 doc/src/JPG/speed-vs-settings.png create mode 100644 doc/src/JPG/speed-vs-size.png create mode 100644 doc/src/SVG/speed-parallel-scaling.svg create mode 100644 doc/src/SVG/speed-vs-settings.svg create mode 100644 doc/src/SVG/speed-vs-size.svg diff --git a/doc/src/JPG/empty.png b/doc/src/JPG/empty.png new file mode 100644 index 0000000000000000000000000000000000000000..af5e49e446e1a3d37e228fd98b8a12ed9d82eb13 GIT binary patch literal 282 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx1|;Q0k8}blg=CK)Uj~LMH3o);76yi2K%s^g z3=E|P3=FRl7#OT(FffQ0%-I!a1C(G(@^*J&_z!{$_AZ|c6yf!BaSY+Oo}2&#KrSl- zW87ygD)mqA*3j?jAV!G9kN1pb`rAp+a5_WitOx!Y_d0%vPao_@4eUCIM>VP z`~98s=XspJkH@1&-n{00U-xxA$8`&Msvw1TmGmkG1_qvtw1hGS#y_I)j|1x;_=(9J zwI%$AZ6mE|kAZQ^7x{Mql`kX#KfLWA`OHDZ+StL#z|IK6$;pY;)XLo6(7?us)!NP^ zZcUIB1LF>cjD(n~bNtGvi@S>2>Dgvy1&@s8u=0Jh*-Z)2%VLASD4Z@_alAo7ev`uX zf*3(v;jwB4GtIOQhn4$ni3TNyAF$G^XJU;$mGhO_?P*O;j77jez`Io5U3)S7r|NVr)NOl41zaKJCSfc;^UbI9U zPMC0@e7;N>#SbyVxTfc)O(Na@(?I=wdE&uc#k;N_^5moU|Q z2$5fjnqrCCDEndyQNJbkrGno*E62~4I(h%#{PqNa7? zmHzVic~}>)6nwF&gd_Yj*y@fsgt@u*`0F275rlTgW)f3RWq!%Lh~cdgq0HD>x=Nw7 zoa8P%Zc=x8w7g|d?|1VGYoEbSd>?oZ42eN0u(nwQTM<)j!67O)D^Koteazc1$=w_Gq zg-h2izokS?7*9STd~|+&-ZzBapSyfE68t z4*8<1CNOgfn7@DjW)u(@=5<*3$Rr{%{>@ULvoOcBQ{?QpO)`l1@R1L}zZVt7zDS@N z_;Eu#!2f9S9Tk6tPM#N2nwEr=ly-X@&wg)?W;h8s21drm_;_;r^|2abF|pUC!+T{i zGBW#kw>fA92s{T2d7t$Wo-?aLL>e>p&%g6P?^W!r zjV|w@Pm*?42DeYY2jeqs+$^Of77#2~{1Pksz(*C>HI~9V+pI zWNP;d7~Y&J6~bf>twsj)VK!Q4?eKIe9Zb(Y>)uHg5Ie9qk2RA!7YWGo!zACP$wil{ z$c_?GP+0cn>(}KJYA`>>!0@j%tUA)|r$?3T<@k8l#XW0+^A7#lmh>^#L z7lSCfJBjk@$scl=;LSP<}NMn(qQI=2XFa`TmNxk;gw~qasFa= zdgI%j3w&mn=ZRvXO%%f?kpD|!scCF~p#QIihM_ban92!>r>{Hjb zUSnKtq}4gh7F`S=<}&Mf&JLrkiXGCJA}N7e|BCqDfsOF?mgW`Y;Ep?&?_}V%l&%i> z8GJ)SZc@eWekjS1rpv04@cBG4PyOyR_|Kw_pE5aq+|1UDq^)1pcnC@?@jg8f?oAWY)!I{du}eyg0s+?yjD)#|ON|!0(&l)^-3?a;3hH^CH$L~|XsVEMTVx10EIi*|8SGyB zoAS=`R_J=)@@@-#lKTr!^lF*0nOW8r`lRc#*rm}bCu_GqpT*Qu9)D=r6<}p%j(Ceh zQVB`XY-O}cLoQ=UMpIa4w<2eiFp>oQI9{6 zMz*DUo*Xfwl1FlWK9X@oTWYj4QpLSpTqF!JDWKpVuw1L@H?!StkBXlNZ!RhSQ6XK|m@sw!UhWnChle?u(2c<#*O zew}Eh|AgK3um0tbxZ-Y-k(uA4rFDLj@5wPYQ)YSltew9`4yArs~?GB_{iZ_qX#_R#ud~@OPK{`@`?aZ|S;k{wAb9JD3h}gO#P0hcUBS zHok{i8>#5gm$0)djD;fV)*8i<7F^+exb;P=#O!SiGaa4e2XelyBJ=*dZz1^*S4W5Q zN&CC7=-Vm;cY9P4BO)TcP5=7!Yk@@1`A2_>RETn;jI69Ogu+&8TH0HRbiEo^*Omx| zS{%0OZ?Yu9I9IQ}9QbBHNf@eaRq>mY*XFZYfQ{sDGE+zd-%)00*FTS-8Us;Fmv}-hlc|K0&2g?$5C=c3%TuOD5X4h2@4OG^RR$q zNa?z8_YCIjBu%%o)G~&{C=lJPDDr_f|NM5G#_#ispEeXS$2>F*bNl;6(x6dEwi(7@ zjf&4MwXQfzQZHYlA%trEbZ^+YKG^V<--vyu(5V!aM{!T1BS+gO_WIrJP7$&Xq+DIy z>5BMCBh#O9^y`GP%FCT)pk7j4C)96>rla;GEV!h96jJSrUyn@dQ{93~mv1`CJ|t{s z*=yFtiE@rwdm`}Fle@H!!$~}>f{#Y~WV<8V{ljuk&d%?U1OX>T`r}tU8KG-^xp5wS znkI`G8TV^UIw=i%v(z5T$_BQyv?$X^1@BZJ&c%(vtVCAw>K7TyFAfwKX7*>Qq$^~G z(DCtU!n$jlZp(FC?yIyOuT`)2!*kTrON2O0(kin`AY}MRK-k>b8BIv@*cr7xmMbB_ zTD8KFtzYMff*0I5+FkyDFLL}RGCDfFA(&!0M#!zSO#Iz7gL(IZ4TIg8aK$KJVhvr# zNXK3^jX|q2?R?#;z5|Fa-FNs@>V^&PH>lo^y28~LGSNpQnb2&r~XNWij1hnD4Ehl4c>n_@5R=P$(x?1Lgm5$kWsl!4;e`qeG ze;yxqt}j`Q)X*6cE=`~RlV3+Vjz_stVKetczn;UVZo0S9(R?&hgf>iDsVz#gRV-gZ_<2O=Jt3zFBawKSY-XcRo!`;&p zbT7o$dssSTo^|@h?Xk1h2^m-}yX^LA=qemQ+~9aLQaByN@mS}nsHpV%T*1*{U|=wt z{Q1^6f!}e*Fhq#hHXas9v@ezAQ1RcganGtcnecnAorywAZ}5d}($dm0uiy}uFZJaz z;S23N{bhTdh)C{dh_CNuk73KQLoyz#obd4Q5BS0d-$&}a>S8%ff|>aFwbp9UYm9he z$|@=!a<$7y4-XHSzb82}&L|>L_Wiau#^qV!WTjV;EVR!`qufLU_cmw-j%qO9YoBhG zpyNcwCvrV5y1oIt(@n|o(!UM{IXNwrxo(_|t!5_-StwjJdihV1ghzMl&d_yZO(`dY zsco@b**(h<4Uqglu^S2w4i2_Fz`f0776JH5OualE)%{i8uW=e%prdNNcG>P{2ztG4 z{H%#4B!Zb*&#svcBCBQ<^0FJCUZbU+%sf8(Ip_M(#__XLr)VNi!Q+kkQ<1a7PP*xx z)#3iN!J>4b7r(F+0eL=2;O{-zuR9Z3F-+nzk7DBFR0;4GJe&!y6Uq#S9YOnufkd$XFpByIpVC5T ztBK}RdUiI^eM^Q5?zZ3Xfeb00y8wzSA#vBH5Fcunn5C`PqOH!5SnbVFn$EDTJ>HVD zpZXPG)mn%oPt>SQJsz^ELMl5~hs&}Lx96)QBszrA7AKHCNHC*!swVx&axf{K@0g+Y zR?Wt$UGkRm>&9fIrFqTb0dSL1c^wxpP@k6t>*`Iverzk(-6gtyeXkmivy*){WKqIm z5bB58PE{({U+K8~9_HnYQ&NJpeBvUyq+f6Qv7{v5^gzF!TdpH=N>^7`Pn>n_;!=OU zeudobWHC|Ze}EaT^5k2?&sp-%j>DJZR&U~qkjL#&JWM=3#&nu(TdG^D+1EQ`%CDZP zS@;t4bMLQBg$@U5<(YmEF-x(36D*+jHE#Qfe3yaiU&KLX!eZUV6?-R8 zKce~V2H_x7<4wTpYyr<$&^?Av+{VWm4z@A#_I1tsU=yX zF!}66rDMZfb9e~)+4Gw>n};UrM^8saT4J7kyap&Cjb%VeN@^MMPHAdH7Zl?V*W5Dm z{*Kd)di)^t{yG)+F#%!4-jKOmOOZ>Bo@T)d$$|a0cs_d_)bsQ5(ETvYX??5@NiSPcd^doe6%pBS7aD0!#T$$QYSI1M#fD_h zpuj*0iJ7@L>(VEj$48SaWg{E#|JVV(hi^86abk=OWFCt zjK3J}-~R|?GzKoo#lguL*{20DnqTF#Zl&+GT7q(LaQM~VPNMH_VEpoBh94f;5}8%` z59B_`NlY4f53iB)ent}Je3Dn~dHMy;q+%zK-_NA)d6;$xVR!5H?c0oujI#VrYZl|S zjTGt@78aTL-6iJzq;k=$Tu!S)X?FJZX%LB!Zd2kOntrKrTsB66l(o}sCiSnDr^g~) zbSYyxo!sQ<$y8Xtfddp_)3RX};UvYat*zinLFEO)EU2k{01aNsex6rc zn1x>YNIPPAB%zSpk2I&o38a6h?zFch+e}9L?uHRNf$s}?~!X7LC;E^s|!n~FNL^77< z@%xMo`v|CN>Ulb*$AEkv!-TYSbVNa@%fWJWfHQK0J&t_wzW3*78Xg}l=RXFt9wu_p z09%OI-+#nqKH>Bafz-thQyMwX4AzE9`7cU!AK)p?%e*mv;JPr2DI_vQL^ zE1Cf_>?YJy35e|9`C^0g>CA2_5d^7B&5VM_K6Bz*!FA9*4pqXb$+7gB}myu7k= z5>*x#7ng$AY9Dx^S9u}<1Vkvq*wfhB+ExOTK!s2Wtq|?5QwoS66%6C@9bOiB&C(yU zEGG5aTe3Q*Ma$#+I`&<1G*{SyC9e`O)+>sfyd=kZ=uo>>xlH{J$?WaM!&)c$z0NvU zcPz0>Ee1L4_f`gvVoVY@^#KSOXsnBz9vIp~QGA@Pkg(E`ATSI_O)%@iUY1(+`w)@S zfp`Q*fvUl;9F9)%JZgScZj*cnG|jm_l7kV*lkIea3ld5Gb<`l1V3kG=ULwB!Zv--#Y#{3CGmGaT&ug7juzt+`H z`_NnC<|M$!H`vzRt_I2qrw{rffRbjLN4cwTyuk*yx_}~~p?q<7cX#)W)wnU;5QNzqs<9X>{D#>DFCrrhAg&11 zmOWUP9?8>Q`=d^NMDB8*slvLg=?1>PzLcAhkr6g*Y-E&alIYS<1Cm;bUN#I@3cJ&q zPJcVkxP{QkPPcFwdZGPE9JeK7MG}(#UC&Y1(^a4iZ;sL9XWWhNZ%ZhOd*-?L8TMVa3Wx_Xs2$ejG*_KGjP+3-WYFPs${eHjgk8wFY z;YA&tzQw4@qRfx283!89I_cm2dA77 z;!VgIMAxr7?5~ZkmY0_+Ta)Psw`h`&l$b{&H1;-cm42C7uk8L(Z+6dhfexQ?Wm&)i zD{xVuffhBMC$1$<>w3V?>6~A;YI-|W=qPKc*g=j5e7=ViSRm45rIu6$58~qEEu^0} z%9{p#LilNpCTBu?e9j}1v)1g44C!lB!Z}mZ(~ij6De4p+4*u{V67)J?qU^ONd)hQi zOmZjNNoNnudoq#%iF^L~GGSRZYCJnP7g)40SYdC1KK>|72x6At6gz+~{03l9f>A~R zFva=$BH56iOO<80VH}vXiksS+o0Z`4bF?phn4xK}`}|q-oDTvQah#3R(1OC>)!_kk zse#vK!kZNMl?kkdvAW|~w#2r!CkQjpq!2*$ynXw&&}x)_Iz7pgqp+x`7oK}LM#Rh0 zc42T8mWsW=q}01>6f3Q)Rc*l`A^q2RiQHkBmta8(%(h%x#arRXdZMlrx}sh9>y_iM zWn@uqYCMqXgs?`t=?^^W2en=h1!43&Is+w8wZrz6OdEYZx603>DEJ-jS6Iwb3; za3#mN-N?I~QzT0{4(n2GPJ4*e|4$f~PH>o}MmImhFN#hm`sO zDP?tMr&XK3h!mZn(0kp0v|2P%N}}r!x{9hgK}rj-0JYId$6XL|gI)7{>O+o?-CZ_* zU6FHJm;bI;^)JJoi3NspXt@3Bq*j?CktHrcuuo zKEBY5S{W`=yu!97F#Yh=A5kerubYA$uoP0u%by|T-Y1SdJw2U?Fw_PwR-DUfG63g)O>Z^<23SrW)Q(2Tm$Q5ft1z>NIY- z3#^cAXdi$ikf11p_{Vcw#zJi!MR;xAgzoid9lHRJX1eHs=H_MuQ3OKb0ZdrkqpZVe z(%~R5+4x!PO%9Ac+9xDI+z)pXQu}lwvV2;j*?7*@&rUmQL9n2y-K#x4GT%;gTiXP% zI6}1}Tmo8yi4Y_s%Hh)4iupvud(g(C;O{|rB)M%3QU;D%^-re?EVYFXCN6EmV2VtY z%th$rK!_*uSSRv~upecnCvI7fl>fylt3TJGy<2Qrm_;wlmIyJ;`zG{OOiu)m38*S4 z1iNnjCKy1%jP&%!hBls7xBO`D z-K(rSn8N8^Madx*AkM0?x$-t87tTt3CTuhpEpN56dV@ zCsF&y{ApHpUZJepNZBYVZgxlb2ykl1@-v%_39;FoN5GN)AR^-1e;NV4M*%PRJHO)` z&~tyx7INb7-N|>-pS=QA6l_4+&a$8HKuI6my^dv*U?}m5K?M716hZ-_iJvAxT`)kW zA~_D@>Fon5dIbUW)>VZ8pBJtj5DcHj*P{V$RU};bf=T5L%xE+JGI6Y)^W>HBFgm$F z;j`oIDW@@)Mgfx!@^$1VpbE`7cA&;8?9*c(nko-SvYGt-TWYCU<681JOO2`K`468d z%_3u$M$iy})$~_Wc^()PsHk{>Mb>b9xE(^;ip|=hk}p*59z+x`Ep0>So*?bBp8f6H zw;4VlJH+&<44v*iaUz(V=^Vcs8_iA9L6X%DUcOcJ;`ddRiy^C^EQFMQLZs+c>@eBo zn#oOP+OFG^c%%>ibaW7!NGX*sb6Jm7&$vQ@XMfai|L`X>rSpc-%lK~<#74%6 zJLC084nk@hU~sjC+WEGaX@sRc0rFY}O83v&y?Ddd5z{9cFa;BaVy|v#ZPheRGweDO zR4+5{2$3J}7tRs6y8w#M>=&X`sQ8hZN?TvZSWEZ{-qWvJYPxjTYFlb)vZvhE(Bp76 zTKhT{+fS~1r=9ij@xU9(AZAA#yE$yP^GH=EcDK%gjKKJC0Q4au!q9QAvr#O(?DHAp z)y&}Y?hY1yO~Jns{^z8gfoUpU$ZOQGUlX9Eex`{TMBJzW8xO8HB3xEM)&sSqrav5L zhB`1CtHHwGS92RFtDhUkenmt)noyDpG#9`R!&?uar)7?NlQZ2 zg?KyO?-w=o4?LGhYQhC5%Y@@xa!H~H|$8veDI8bzoVdy{$NYm;E~Hf zDGM35#RD)T%vT1Bq-JMkGA0@)$Z_0-lMrb&uofT4kn$FqDOaib@}p>kwNq2qo$SSd zTpIMP?mZ04<9IoD_hWW_HXa_0E9<|OM=FYH%z7DVSXkttjClo;K794D7u+PKa$E2> z;ftOW?0SI@%YFO?LGi_q9gX2 zu()8cgc>N&#hvpiz+#R3F8?s`$K<)rEw3U-8RA?sMw6$KXxpOV$`tQ)vaCO6o?kP^ z+IhRZ(cT!WB0CVp>1G%5@4U7#gd8~qI3ECq1w(RS%SFCqDb3km7pqXJ<-eC;fpvgq zd*2D>9>{5A0StjS16{6GNf%<0vDWM;qkV8#d5v211N?ii9-4~WHH=Q-k(a!(k83tq zm{z;-6UXSg_l3S{mu(#{^zgV2;4wya_P-~9Bivd!#}EF4I#} z)E#voe9%Ql?rPz?tiPqi@ySn@pq=vgXIyckK=jdAcZXGgw2xDAM0&hFFW@+{Qo4m~9AmY67{MYhZVf-H>R%NW6yFQl||NJp+`gr#g z=*(?I)%3Acv@zTFRMji$J1m7JNi<3Sf)AqM|}dhdwMPhnenm0u7`pffsA= zVEi;R;(YxKoxI>5y?F5=_^?6`C^?_wl4{vyl$;I-T_pocy`7*gZO#_{IVGQixjJa%$boyCsmg9sjY6)=JfXqzZhB;qO`FQkMp z*8Zmbj{Px0*@zO~r`7GsyFbYaJDYa^Ip}$vIIhF%TCoCCL|j!Elv#ipONdMWT{GsK z&~C5`bOoJXF&7)yj|m1mIO{h+=2_Jl`Wm1+JRRn4{T7Y(GrCXLUuy31vjfZrkIHi= z0yOT*1!_0Y^~a_e>TfXeKF6};WqobOE!NNC_=C-PQ?R(h6V%V0^|~`wfNUHb9IB>O zMDdjL2*Gd&EkGnHFkBc#MD!8LEQ>=6;$@`2G-87-4E_WIr4P{y!F2*uP3fraTy6{5 z;H!A+e8lfkOBbk4y42Lr)l&p*E2|$I<_R zyI_#YNwUPbuI(7|4k82tO84L&tyYAd;)xg$`lE95G)GoS9={b2K#$&a=-EVdpq^@oQWTFj_>a zFL2#8GXzb=7_lKi9GGqlaRR5!G<}o*d_6}7+*{yX?Qw|fT92QLtj!oGG7_({O^Bs` zS+Fo0t&j3Jn0)v3@={qRc&XZhICU@ubmQ-|G1dnPQYaioK`nXHnhQvI-@m|T`G@sT zF~bx)Ey!D|zzAfXOUc0N4wtgTbOI8i?w|)tC@no*V4A!{bnd<3aH+*uHQ$uGva+%& z3WfS*+foRaAZ!?Hzg6|rE7D+eb-0H_t1KBqq#Fg7d7x3^7fpUAT}}2$fqLbNBvk;t z9!Va1nzs3RH5S-{RDef3(lD>x?421hXY$zWwW&(mjMPwX{$gc=rJ;4F%x+c|X`G;h zYePcmh6TA5RU+O7piq1D{Rs?m)RD_iKJ{CEwyKH&6Z_M1?QwD*xdQ99Ap8IYkUF+{ z(|Q`oMP))B(r7PHzrLkah04AAdfFv*L%f9$H&Vl9FdODonM!+OHob+F2|I#xxjQ}N zq(?>ZP~>PKWeS92=#6?YTzU+mkDyWTdEblo(p#YPX(nvzOHOLai}xEp$+2aOu+Uw| zuRY2#KRrHV#eVn}L1r~SxYn6kq5DIn&>P84Da18M7zzaKK?z7>ZLu8qmOK+pR{6|j zF)cdES22i$E%<=e9Xde#RDNbc(vZ5M9___BhYHRR@uvmWxc#U%N7@}iAlwV_qHjaJEGo#eYv`M z=#EJHje)p5G_f;xd0Rl8s~YjZ`IX;htRZvi|u;@@G|d|a4ZQzFv8wqsVgmrVrc#zcvJ#nKLT$uy_fb71u-a+=%d5>*l1qUCNIQe>U#=e$U2Bn zt9+Jh=lV**wJms}mJg^dn`0ZuySK03-z6b;Pm+aRDX};IXm)JZf@&rla^5znfOT3Q z(5+l`aLZ%;?Y!y`>&LjEvO-qHS6YiWl86;(4t*J{*elB(yC!G|0Mn*|_8ZYG5H$WJ+y8nQ z#DwQ+sGq*iOsj{jnEz)q4>DVqvsVH+8TU=bMoHR^k zU0v`p5s5qP<&=J{lD;iq8kO;_NBisgMkPC~-8(`e8J&+8*1lw=;)-{;9huf;r9S6k zWK}40n+cW0Q`_F&Zrv3)MfeH5%_}ffu90}>=+z9}0{g9Tc~=&|)-ICF3S5@&gC`bf1U4!GpRKX$VdKBk{*~!Dpi`TgL&Tiq)UA3oA2{v6}?Un#4$eIn& zlgOJ;e*Oc|Uc0fKfQc0P3-l`Z73yVcEr;3Zs_AB(ch^4kAoQLn=31?!tR2fGrEq#> ztMKNQklO@ZZA(nAS9_AkxI3^Kxkuh$-wtY3*rgqUATDuy)#>rEwsp-cDZfL8$q%0^ z#>&cJcElJ7L#O$5r@c#ms3P=W(_4v~upUJaKbg&Y|y zZF3esgC_mct>|w-Z;)C==64sQi^o75u8px5B5sJ?jC6>K;aOhQ+Sa>a_T-4LMoPD~ z{D|vdvMCB5rqc618>n*1CuM)(YXbN|R^sKtpJW4)Z3uA~K{PFas354MiBMXj-b2}> z+=XtCs)Rd>uQ4e%G-lqfgY2sDP!TmXWZarV z(4dgsDn>3YwKNb;Cyf6h3MYDJ(NJ!};$(BWvC7`gPL{Q^wKW_7$XE@uEQM{EK|4@R zA!n^du9gwvawQ^m3vPdeC#3tOv}ip$xrvpXtax)?Jh$D#VWHCl+jqo%t#rC39Xpb5 zA1(^(A=7PDx%f2$@edHDbGeQf(INZt^{oX#3|K>MOt(R4KSq{3{T_N%rkS7a1E(DV zgvYo#aO0Q~zYp=fj6VNG1KZbKuh~y*9dw!8b)Bu*AG5E4WWkE<%N~01BWOA3gi*2% zOZQrluX;K<%rIOizV=^$>&*9;``K1_L3clInWh+p%HV_3XBqhvxGVTIW61ZDM+G-A+ z9!lp-10Ij_QT;Grff#aoS1Q;2nYR86)Uo7vsbMTu2{Oju5SZVQ85otR7GUt(pPE z5EI)rTf}96(0lnyGQYf>R|v@6_;iTKT61fw3Sz}qS&dfa9UM6Gf&IXXllA(o%Gqxc zeR7mi7Rd5@$dO5W_Fs|K5uu$w;)!siZpvdk896zX4j)6rT1C1urrcR;4_=^?-%)M> zU>uHwhD5(>6icR1`}Uj#!=j?p3lE%-2LVwtfLCF>)?*dDR@Es2s*nc2pi1~4gtUYK ze}Fn6*H8fs0Qu)77AM~i-D&m zFJDHinE3|;{6!3qSmOgmN6HW>j_fBeIT=c^|U|h$#rAX<^{%{bnF8WYls)-}FRD7RGD;8RD(P zfG8w6LxB*wm0I?In=W$8e2e&@J?xMjiV=*PuD|%rBq1x(tfABVhk*TJNj1 z$8ZV*>f#JQa7|bMDj+vHrUA@{zE4*KK`i%Xr-K0`=X#@J)atf~XLUYx`zVtNsIu_e zM01dLl&esdra;|w(-kP1ftmteZNZ)ZPyOY%W52E%DeMn`uPip`U@s=tukzD-xWm6b zs@qW->`0M)=8~J6hClXfguk?dp$v;`1;l}G0&s4X&Y7+_6Em|Q_3^9m+M1J}IBW+n z&mN(~wg#8s&Ekc@#ANcj`+nI2wFMakCkAW9wW2BKkN7( z>8Oxd4%#fTkruf#V7oO&EKMRC-!Gk>Yq0Sr38A4%c60W?7d&_VN}Ygd!D^qp1$=i` zF`oBtKMXz#b)napCt`LQ4VOX(_!2Y?cZt|e{kqEL9Oyp+O;ddbo6{Z&d^v#5Gm$1c z#B&DL=Gv2?R7;=e{H5(}HF(p1PQmS6tCV@8bDf#vV6tB@)lr`j1Pl?1w)S5Mo3+QJjaeJ4w9o`XBsvq`Mm&P|_Jc;znxG79NA(U=fhxNPO-DgUcM4M)E%byyC?eiZAgrqF zyvmkXm`mFlebCE3BjnT(WitbkBv6YFAT8d8PL#abBeP{FIonZcbI^4nJLZYDT>p4i z{1_V>yE2D@CPZlO6Ot%*_^OV96$40&gE1+G_J|c^)wzM?uA#{w*qB>3wqy+wd$au^ z2&U(Ov z5+eAwh52&QU3XT7D@dO42 zz65*oF^FX3g3eFDMhy7yp%=!1iJ{#g2Yj~lu&^*yb@iygfPhf&H-{NaRP_FB7Y&V# z&4Orv%^A;}mU^0n`>wF$mOz`rZv?w+9l9f`*m;v^xv4YAnz|gpU;}_Qwus;lqbuT# zKcUwVMg-}2%Yx2Z(~d}K_VaHf`4 zEYi{o&2h?*Axyhc1B4+;R-j!Xoa3GJ_7Et?{Lq*W!`_WFq64iFnVTQs6H+wm099{Y@ogAB_xjXrgktKd-HU)5mf~8o?Bbv{?@ZPPY+dF+s!aY^&-sF!i1au zobF(HXi~oj@;{wUq7ueMG#*h$Nemx5f!<35jmbY>lq~GuFqBdcmThHt8r9b&__fsP zwziahe_q*1`^|<_8~0aC`z`x}4X@e+ z-oZHUpSzrbiItTw5UX^gn9!NGwMB)Ig=rMq^-Y7V${=4ay*H120#_>I{Ls&sSd1Uq zu_ON7&Qbq1GWO~D=CTe!*cNg_YuR1k(KsHm*`&RY`L7mJYvI;K5$X*j7khJ(U%+B~ zqb|G3!pfSrxB)eOm}rG}Qb>iCjP62a8Xg`eCExEfUHj*6YW5!E za->+0e@9D8Y)(lZ(DA&iL|D$eoX?`t_SVO(he{KKL3Ikblq9!;HJgw12sv#6_YsEA zw5^2YD)i|YgpaSE&A{W$K}}q^0;8i)-qWKRJ-*HZ3&R+Aei`pVQ2@nt-^(<|=QriV zfZ?U?dgP-ZD;t|p(jl#&fVvX-6VA+VfF4aA*hul*wPx%lSd03;zLd#TqK}+>efN0I z6+~4|=BLxnzO45KKpay9Kl7+Y%iIfy5#qF}?b5=|vt4`e5fK}iwY3n{ktA}q7|En@ z^yVT#HhGmO@&p*Y@l(He$eGe2t`p9~UNSpAePFY2kqbZl07UQ8m5T(} zMBbl%+--uMm!WL1oveeTYalmN!MDO7BmOReDN9GX84Teu^8ixU&u^bpzibYpKb`kF zrROBD;uVv6bufvKEh3A8Xh5zly89Tz$B_8Ccg9DI8GnKq$j@fI1%{2ytkKJMX%V`x zIw>I4_U3B$bK^38gMDgUhwj4AE@22s^ba)iutzA5RaaNL03Tm6hn8Afr9W%IfBt|x z^6uskk?+R&_-2W~HbH6W+c{m22q1yukg%?d0)9)!t6!j|esRlB7up{-odt&;%CqCX zA)&^Ay`O}`rLegXvZXYH8z9;Mf3;`N4t@hhJU9YjriLe@U#cAA*Hx7x#&UN4s`GZg z30&AKc9p@1MEVt$-LE8&&dgjujM#&A*22a8M;*R1PKqV{_=^bZp#$nFa8u6)FxeR%v${3pJv7jnh( zezBXx#w60^33ncU+Nj5^0Bw|R0b1^DjJw4yNZTA3yz`|(F-*R*Co|apcNuExs0m$& zuPyH5C-AwTEmw(^mJe`=_hpl;K%8v->e_`pC-?!YCve^*B zx(GYt7urNh|w;rGrkI?R^AZ9h8#pd>Mea+tVt>PKgq=#x|SX8!cmW!loD&HeDAAP%flYYBNBYwQO;=}Xd@|+_c#B?f7h(S;A z1Vj1>XQahqIJCX_1coKvGx%UacH#Wg`*;_yvQ&LVA=lqweuR%4F6#2{Zd2rYZ!=`a zDe~RP_mce%Qg+FV0FvM;+qd zln5VMv#p|fFa1ws$NNMmI~MnuTshTBHWQZ3T=;%VeYPXd?ta>fOWOiZd+qrGv;w3J z2{TFN3SFt~qWl*aKWUVRBU$9%um59ReP_r3Hm83-?RtbVHnm;bY`)DA@HkHR#2Ov6 zr4i|U{n>xcvbl=9N}~Ua+OD9@*70t>m(YD`%xqW6-Yfsdqb0h`-Adn#*^t$Yyp>cPTU6%#LWe8LAI5*yd_M$MiG#*oV#c85x(dOV*N0tnN^kDl>{p zbm_46Z^6z-18dVVDj`<~@$QG{fF?ezW!P@~GO&p?t!D~42Tdf)JNcmlHaf6LQ)}5+ zmVu7iRBJgB_FQ!--t=HT+ZH+NZY#`b@H4mp9cDps;_F3#{1g180cS^n^q2n@6r-Rr zOEht=qmOb+dc+V&dLke`Yk6w!??MkSs@M|EKU_){&}2~mKpplf88#yW0bL;_y;}Xd z=o8G=?c=1Z|M~L`6FohO<~4UVJVtG*#9;Vhen6XXQG(x)mbsFwjDf)<6YSnQEHa1~ zy<#v@ZaZ(9JANZn?(|vX*_%Es*sKn`46OiN@l;7LJxU9f(2%`tLKyS>*5jawB=Zv~ z{Pmwde~N=V*Y*iIOpa?F)xG9;Pa#lRynht+CJI{d^0ckCr{iNcS>Iq z7*?9b?g#k~SJZGi<(62(@7U<>-4mW4F$R}<4Qy!-R_f?LY1IV}#m-;sRoE^qFxL|TuC1g*Hli;}*gOJXu< zu!%^=gHV$kOJqypWum_z$pOW&yhJTQ=nKLCoSIdjqlSRA>PSKjUT;kE5V~keBr3_) z5Z}@;&F#dl)rE+bCtReb)=TR#k{`4d-Ab2awCqa{6A3_wm)odJri+rqSRM&S@k-u+T)ACO7SP^DDozvzh+sZ zK0Gw0F7Qh3PpKBuo6@ptqIa;zTzRk25?*BNH51L%(!#d1&J~wxEeY4czDDwgzfaxv z(G4QMkMT90UNgV+dGEdUB~o}Kyx!m1KjA5#_`EWWX#{`;i9j%Llqaz}8NIpD1 zdu}}MSlA%SsU0h;ob%*fxJi40z%mc;wETVk63jMJ_jQ-emil zudk)W-_+*GxcG!KI~JrlMUYd<7{t9UU#;I*4nsv3-^KDFGVV+~(K(6-l5Aj%az1i& zs$(fJijEuHIX*rv9YmHC1sHg(cso&hvg}{rCXPyqm|Pm)zs8D zYf5I)jE?VdqH9t^j$?KuRlWa{B1Nf+z^%)d8&V1LxpSaCJoAng-qp#{Z21cc?U!NX zmW3U5Euv>(OfQ=$ELa*9?o(upI}#H2U~sYF1X((cIh|j*8l?dazYG z7S_r+)#J^s2{0$tX* znORv&dvLhf;r2mzRj15v$F*y2L2 z>~vZc)4o)Y;ly$M&VSzO&whN&k$YB(9zHx{cH2rP10)z4`fKJ!Nwg1u+egutK^MTDRb1>azFO1VR?FC|6)62P5Vw(*(~Z{A`Ds?D zM?(er%g&5s-255KZbk2&E*%|Rl^khY<(bqfokvfYPL+zXy_=y2p7!%|C<&#OYI?0P zb5?FmZTQpvt1N?kb>;TzAmw!P*49>$?!TmB1n*y+f>k z+@1gz`fpfAq=QdtO_!_jObI1zc=IToJ^Q+zt{VzQAt~Dvws+~D?G6^3!!Q(_XA)W)i9M@S?s(qPL)z=5O z?@EQhAeoa1m7XzKt8KrE>(n`(Xkw8M@>?Z5NRSF%6Q;~jaEwReXgxG^HLA$BSew(| zF09fDlS()pENN`BfDRpd<>A+s_V4JN*cO&JOF4tDxn+LRRADrTq#S?Odw=-I&Cqzg z+$~Ab``eX&eIg8u9id#!57*q>9k>&tqx)lzKgI}6t#J)+>l0k2Quji(V>;jR!xBL4 zXC_0IueHK3R;}*##z3R8j+Jq@viWh_Xs5!xa7-R{EU5E9Wik zus(K#I#Y$qO630rtm?+|SdV?}o0|z!SXRJT^L(;oBPrD!qDr(OURC7j)CSFCDzM_$ z8JU>q;|AYmw!Q%`J!t4jwwwp05STHO!&Q5r@Z-=?Eh8=vOXN36XNvdNDfR&_m8lSF-(!gUOmXSK(pt3jx+}zA zJw@b5&8Sl%zoXgf7~P(e3^xVF#odouQ%O4N>fEU{E@A{v)&u70v&4P(Zw7m$;a!z`glLatXeKB!4{nX^i%OCao`)0w7J zz>N}B5pq>MJz>68JM$~ep|B-CJ$+n7OY6v#vnq=$zf4zFPL3Y7S(a)~hS@1BzmCZ@ z6UxiV(qdf{E1|szq1Q5GiIF5t`%kfMU16bJO=`bNdN}xqQ}LzSY{-8jBO{V)p5L$4 zJj1u!9|W~}FJdPf)(}3CICPhW!gqEu;dGYGzqYRjNDw5sp-G5(gHGqJo-!{ohqvh_ zNw;YqY(5c8;oSM33( z>a?NGtgPY7@;|_>Plu;n3*RAe(lK4{KqZam0%%HfD zkr56Z3r|r-mDf;PgPd#gXxXR1PfyNnUl!ZA>7);O`(APCc22)b^&fs@Ti}FxbPW52MRg@!BRoYh~Aq~xjag)1m{Af(Q zPE!~0kXKFU25O!!K%(8-=IMqd8LwSdGybV`nM-%WgW?q06BZh_z6*?^|A~pu_@GK1 zgr=^`3^6Z?a>lWk$}F|6UZT^rGOinGAU$JRoDQRmj-XjI53_nuL?u_LrW}wOPS+bZ zm^3`*2F>O*M#lPbYF}pLDpk95*F39I^W~1}9^lq}B<(DJfIA*B6BZo#kY;y;&bahW zq_@AcR;-zSZ6qYsYRFl_#>V&=X&h7GVRNZd`4JAGsmWpl)xCSQ(3M}&(ng%FASIWD z+IOQdgjD>+`cUwff3q!^pw$?XPxrv#%dT8_|R!npd z22=zYAAX-uvp@M*6f><>l1sZI1%f)Bi!NHBV`;A8K>NFe@ZjSy?L> z8O^ps)x(!a`Mcd_5s~_5G>Nll2oioY1QtGb(bNN6kuA9c%RXnVu4Y&k^m0eVF%&Cn zkZRBRrCnV?TW&>~BpP3y7HI$X@UOgl|@r$8YU*iiK!>zX&gzY?DZt#aJxBw4% zj<=!k>o+2I(CsV2GHmY*4nj-H(z3G5y3TiLqD{jdSE2R7P~khTQ|Eo|IKP4ogxLa> zXW&e_$#s!HlmyGGHIuVuigsy->9H4K!cFxo+!QS>EtR`?O#T;H?;TI|`~Qz0n=(p8 zk&)RDB9tw}$to&)rXzbh=0S=i>yW+5LCD@tR?5ge=5cJ2dF;KumshIy=l6U5>E`x4 z*Ymm_*JIuv_eX1teSECfBg`SJw5~NtjVq$2{Mbi`0Un$U;Dz{Zv2&?%!p|Ofc4eTgoFeW=#P$$Be=rSbJ&*BuI5F56{fb#&!6}0*}}J> zvaN!(s7DkQU$Tplu~ ze&vMT9ul(s5vhVJf^o%o1b8oxlyJ+eu07!qAbUQwl}EVe)bp3 zCH@@#*@h>3RN8uCHhP5t_wZ*fu$~AqWc}Q+v(jrB0R23`=N8VR-fZ9HA=V1sQaRmJ^hhmSO6xDom zk$+JtdCS>^4QCH0`}cv;$jBJ<%*EJfMVDNqyIj3DXosZ`-(N48iIwJl{A+T25WJ7{ z9pB!#>f9a6Rn#}nOSL*Z4Mk3yihRvw|10#;Qjv-rAIEFG8sb08oeGKIuoSdWk3i`} zAmXd8qC;=y|Jl_U1=_M90sf&#!7E`Z_Om`N>9?Dl0)$@ou3(yve%yO=N#=ikneCC+ zo?LSt++1rn25PHV2@Rjg@hbSGAX-}cCq7I`CYSK+Z^cBg@Kx@Uu@F-Ut)(ktBhxws zLWuv^aL9pNzHyt^^~*b-<3j|x4P~*x9e9y#`jW{8&LSq=^n$-`668Sfi+k54{5Y9r zv@${*SFq0U*Gq=1+iU#l;Jav2zv}XOgemqb-Jiq>Wc|_eCqlBTA6>?csN${&-3-4i zguAst_cv^SbT)c=<3IYb`R4NX6GxxoY(`N9>pIZH=p*XT*pNJte_oJ}4+-5DB9K%W9&v;P%k97T{?G?%>f2j^NOA9>~!UY=<&IepW$%*71 zEdTRwuW19*Dj13n_24SeFK;a>V@*~$jZ?C|MMAR+&zR)h|F_>GFFJRD3U=9j9?{pb z@Kgw=vT}(&r&-mmiiP6Lp96INz~7?})8&*Nx!rI5_P*^KL;LYPZOR-qQ2qP!KUHB+ zx;%q&^+H&L4MGIotuLbQZvL!va_+{bKgJc3LhsO=_ioz^W_W8>CHfO=hV9>)2cW=Y zK7PIDsRBLH{o=G*Q^?ej`|i}gH4Lm*Y@MerZm`|14e#b)%Ds%1!9-d$mfT4F_chGO z7>{{o^>ws>S4Y}-PQS`vXF2DV5B4Yhm-u0Fxc2{R6KJ52*GGcTMWL9XIrS9NaZ znR`Pyq}|E?eYe0=)|`C7n|+7oYTj!|NgMSI{^Gl^Llz6D=V!2y7Svf2g1kBrivzni{#^nivRKoiEL(5>$J_J4N#2bK z$TbmDvGl|LxdH<}{{;gObLB$qHQS?vd&yafYg5}7qW1*>{Lu2B+6i;8S5av5vc5t_hi7rsC zn!Dc=x^t}JuRL~j>~r6I_#6EzvzUeZ0V6*Db|={$`;x@1p5b)$CB^O`r^jL%ecG~4rpG(O^D4mL)nBcb z(yzp$C4Oh9a0SP8BfNM?!EBpMVDC|pkfHZtq>@3${dY6^1BCy9Wx?V*E%n`G+eRwd z>b~1l4w=e!H>$V`IUN~4!`SBVBo<4GJ^Co}&nR@>;It{) zy$zEq;CSAQy!)R;Jb28vpW32oDV6MNi>0QlV*YEZd<_xejWaMA{{UM}vy`jU0)*FhJRDSk@wpZ@S6`QNpdZqO?=k{MY} zf4PFc9_?hhTYh}6A4rNxTCX}{18ENk{=Tl3I$qm;Yx&Di`Vn$(Yv}gJ#A}vq&W_Iv zrlzsch`mIfS8ovh|BR*>Ph9^O+Zo9g<-W~IXx^(;Mn6)+i=k>GF;(PUqyJpbrZ>kD z9<_e0ghMhZa+b8W<}kuld?aCUp!4V<0Ve1?Jv~jNQ$j4$1l|qy)E1Uq&#$Mgs~f-2 z;NA#j;LNNY9tG_x2lEr(gGT3Le^>WF2n^?~kqi^&Bxxh`F}08-)1 zaS;(~7odjko%~T>T+(ywx7+}>qRJjy_#D?78NwoU=mf9P#ym2Y4aOrfVpZ~Ta;%$% zbpKqIPIMTgxe%ayqboh05B@}C~_p) z=?#h?)A9xYEvg-3>O@R8kLjO}pM?iMvMl`1%dyj=ooYXupF6yPTY>1GwQ9V)aQQ~- z!YV8I{hRugw=+shT^>3*t|j3S;i!_#yJoj<-)_af@ST{LkZoHC>FIDzM0ND{_2CV5 zbv=|dG`ba`QV&#^&>-)}vXIb!;&*iRb4>5Q$on=VU$mN9C#7$|xx+b{?1(eQhMb-` z1$O6idHJ?7eDn)wC=U>ea|DI<5Q_R`3g`}!fsv6>;TU$hF}ntm99w{iPYpSAa2g?fStwVFgT?0xR-$bl^){V*Ch&;t`8_o%1e+g@GU;*-|M$78z{#{etJtnkYC??HDbN1 zRpILFht7J-Jl@!S*U|~%${=P|ug0c6BDnVrug>96TgQDZg&^#rvZqa7DMJ9 zqJon>pZPw~ds^xj@Vc8@y??GoVEh@CT~g)aXkvw|C+MMwl)R6GD4OlB^wnV^c4M_g z8W|g)g?8IRtUJU?;*A^|AG|aPT@#tbRq*oVOLk6)@Y$G?C}G{e7svQvhrs*-i*5XT zz}o?pm22nvp5G8=)ll?VCjedf3D?Y7N;vrF!~v{1cu|=#e0QBaRD89qy-%=6L??9E zOU}&k{kW0_aj?mIoZI+EANYzO|T)70h?Z z6kf{ldL?3wE$q)xLhSsq%#GQ$DxD-M3u`=jQsT<>NMer~TmT|m)&UcS> z56B1GadQiz*>p7&xfv1Zv}Fqx-)GZNg+H{iG^Bw`RTdGyiDilq9lGPbKBFmk9uTG< zKR(P+F-6OFNa7f7iFM$P5L?#-+cXa>rJC=#O6T1pL`7faD$8;YcUu)!2pe#}sY z^Qb`|6$lZ~`j5{d2UQZlRSpg7iGygD#n0b%;Y~cZ%OuWr) z3z)&dL0*w_aJWd(+n(8n&@!-Gg~4{vY9OhDd7s(s4Z7WY1pveK@skp*q~lOfwm(ta zgPBYF~mH@Z0H0&T~&;BKK0@0`Sog^O7g zje}j#YR1fT%j6pihnIl!EFTgvg}3x$y>o3N;R?tGR_p2N?in>0p2R594Q+8{%ViE? z4SHqPHa3+79~Z=yo{Mp%l%Mpby=l4X2R11`99KLF+XJtJVKRMUe#`lfE5XZzh> zo8r;}u-R#06Z74&c z7zL`K_{&gkm!Hgnd(PI@i|kCn+_Zs4pu_V!Y;&WhPe+!c$_7RguiXaV#Cz)ZU;c;R z0q&XgiW@wE`PDdj1sT|3Dn@6d`7bN%f&@n6)$6?^^JziOM62|@2@P%pC(fP#&Gt8t z=&a|}&1bcB)u?lY>&Fh3$Rnqa0cV4&r{4y4fbBKvm;LL9&RhwsD8pZouMrtKRXvYc zUbl}Jp@>^F0s)Z^<-Y(+fXBW*k<26JiylUbcsmAV;w<_}BgS zp{%g5X@mNb2y%GItA|P2U{XKqUB=~4SIdbr!?+)$c(eZX*e=l)jEV6kM!4LKTo0=l zy~r249>DXObY1MPkIkwvG+ntv!WE0U$z{kUe`B({x=IxHf#85jLi#^h0w?ANYtt>( z%JtT{sDCCIF&>W%A)Cqj=QH}~Q~#?tanm}|GqJDHHd{_~a~*L4uVFy)?~kQ0o!qAQ z_S>;gVP#s1Gby3}d_F}e2d#`&`BJR!?1Sj!9+y_mt=iCP;3hr62A!$h{Od7G*NAxG zC0-L*t;yHbhHEGz9*Wfnj~J!Pw@uF%o@MdL{kyNyHA0SciR`Nk5l5WeTY3y5?U7|| z8?y2X>A-abH%;=dhwp0b-?bFM=d-xbS~7e{I1wp!hwHzq7-ij z#)Z`!Bnww>vr~80fj>_!lL&8Y)fi*}==GC5+vU_K{Bc1qOw_As$o5^d@~&)DJz?0D zzsaVQ(YKm>U&Oq212HQi+2nE=QW*3n0PxYjXVMggm85euM0^9g&0g30B;OtGt!g80Pa?{dD!cLEW|E2c30;CpOd>v;GnPL1Z zyiITAOw4mhbER%bT2Js5GM)C(?{MLk26aKf{FD?U6go7l7>y>wS3kw*zzx@?BGjr! zC%gXmP-_qJYMwnraJW5Uji1IKZ0a&-HTZO*7RwgpY(l5s1P)n3=W(1%z2IA(Fk&6(-Sc+O#4n203kU-WKMMEwy#RQ5FAWu{j$ zfm4Rjk@1o?s~L>qN9PS#)lJ%3rmLMm|Vyl-D28XY1Z|$q_ zcmYF02URe56y`YR;!DTyzebI9gUvnz6tgIC{83d#np zoHugOM~^WRm6er^E~evJJT8$a+Ze0}CsSDEm$ZtCow1B0_qh!w8m8YbmbQ&J&S%+l zX>$H7tFlo~ohlK~XG|8I-C2+)PpQe*;wgoy`^64l4wRdIUg=g5OH!bxe{jCBnUgPm&r$Ce?sQpSfn=A3q z>0&@Rb4L&$sSHBpK%>I(!#YXZKUxs_5rOr2V>nTGWpRONP3P)?Bx3=Aw5D@8NuO~5 zQ zAxUu~XaK1{^}-1FhF_dhRNi zAY{V>1}hkMPk(>3Vr6N@Uk|}+G+Dz@k%QdE?zem&=fPA>22rD(J(r~o&pF*b1Im!9 zOx1gUSW!GtGD(@MBl0$n^X?cZAJOPnd+yAFN^}6!UD)|R?6_je90+F996zw3XWr7rq7gu~Mb2PtW7C??;SAD3hkbRN}Y4Z}$X-J{OaO44h3A zk{Q*%*&OUVO9X=fL3YgS?sax{?kHs%1yoS=pmirFL*ao=Y~7y_&h$;JWhYLlowAHRjRM2 z5#flNYF5F;(Sv*C1`SL+cfki?^$x`ck|X9QozgxJeav;}R*88|_^m`v>AnofEman~ zt&URWcq}{95DRMBW~7VtMAWU4v!{pct-eKcZ_(AYsoll(Hh7Ot>Ada~!Cs zXQFCM=jxa?A>r$xJ-=oEK9o63SXgoc+cPw@AATzAoa!B88tB=Q+Zx`28g(Zc{DtAi z%IQdu=fR86Bs*bu9D=K|+`G&Qndp5GH?GgZpx#6GS5tc%IS;fkU;6g%aS^_VMjwr| zUgsbIRsT)!BS~AwHi0qdJFhua-!O|CU{V}as}YG+W;TQ6WZ0UrJ^Z~R5M6Y6I+t0p zztIDUO3v<}v6-O0NT0GV`$v>dhmK!^z^deT~m}CPtjl612KEc^qW4{d+vc)ul zySi!D(-lSKFn5tiFvRjWtWr^5g}doW;d!wo)sK(! zK2n46C+Ub3k3W?nW82f|m6k`q51ku!GAojwhH>A691I0pN3hHb3(r+PSDVYN^nT&E z)^|7fWx^Y-1Uu9ZH8BI(RYzSuZz!m1Bbg|^4vCEr+5wm&8BiQ=Q0q7IIc76}M2#*N zlK|5h5ucoVqz3gs@8!+U%~j|Bt!%vrKdB0qy4UV;>?lZW zU4ycew!0!0-4h)I{?Y0Wb+2!=0JKVnsp|kt2B^-G`_t`r3-P3+zYk&TD5yh!{b%h*CA}X?EQ01w zX0l4DWa%0wCrd$E1`?)D)sgo2XX7S^6vym$c>nx@2O>jCe_x*J@aR43d!*{34Qt|4 zpOXWfVS@3NJIakjO=a_5C^iuM-;8V*87nR%eBEijIg*UI_iK$5E{%kD@7u+;!=a}V z-JxOYp756x0P4vO?6`u?Lb?O@98e_i=nRG%SB| zg-i_`J3XyK9I_@gxW2?JYC%$%QgvyV-F{LDr3;CVGBcLmp3lpx&g{4>TDXDf8m3CO zrU~=o)Ti?wf4;G?vD9Ev5YW1C2)O@`+(C#%HSBe=YM&6!>CtLk_2zI*wb*@cT%5;o zN__P0BLeAuYYSCoy)(gz7?+KM8O6b>JtuhL%$u|9adY$YEv*YJcmxt9jj4;Uy5*&SkCr>X--3FE{c%d#&?r#ODP>av z6H#X`Af=i+$-#7l3#!h?aZ?XvKW`8DT(ehKwR#M12HpLF z@<(hCwXbp9o-M+U7FIL*Y^qJ#C=0p&#p0)Wh!wA@5l`Z({ zQeC5KPloNwQ0QaEefrzN!U!(%mqkMdO32LzPXfLTNpM{o85EJjV8G3;sqh$B6gg2+ zF2*Z!@@B-Cb!pN1ZbS{1lV<2p7KBa^ZNaPd9n2#`P6<@^;MP?!PDc>ebp=ig8~3C&=KqexX{7LiOShVKG#e`AJTvAEbH!kN%h z=im#eozHxErgLMUsbA7GUCTh-JcjuwuSiNfd3P)|%WWUan`8g|n!@~GM^fh|<}5O4 zNmU&89s-3=1adQ9_8+I`431b|aVcFJygD0-M|gwGG9Ta@o-IS4J29V~^qe*o&yC8j zncZWJpTH0-Dw~JRQd@#@e_F)R``2d(*3U&L%8_wx-TitYu-PhdNI^+d8-u^3bw~wu zhGm`p>1=%F^WgcT%_^j77|NNEaibZBNYgAWy0UAGrs-mjsQFa4Q;`!5fJ{Aj(*7J` zMO`p0WvJ=J?Ol1OVK~T93>9Bffo*2+Q(6MuX5lhp{CkI_S#B|5dOlemZKLp6djY~38^qU|0$+TkP{`UZo)qHn&fa}%0p%21WxJ%}Q~bV9Wa={X z^`G#+(~x7Dw^H6WgyOk~BzknruqTAEzeKeb5{4YflT{B#Rh3TmS?6!*RS%*>q0Z^1 z`m&~NMa-cAV&!%rC`0IO$3OdcT%(IWxM<)HiSre)R?}1igKu%8ZK{wG#M%M>Mh`+YOP(>-I&j3 zU6qsF|0*JwZ=>)LX%n_?sQ<+_33W*-gfbvLm55? zPLdbS=DCn;TxwUU>{?80@Ts(}K6Pw(88~LB`<33jR9?I6mJaNG4{l{i*!1dpuBZwy zr{~IUE!k#%Ycv$x7z^!r?{wTBK=dDAYHt=95?!o2M^;cbJPKebOU4%^kDcw&ioKAi z#*>v)-7~41s2h(89%asbIm^p(t?WJ5@X}2xcLJk$owEGGhp8NlH#L+ix>7k}O;@A* z@LEfl2N836rPpb9=XPm?#m7bT2V-X80|Wp~#sPiC;RVH9h3=)rB^>D#jE6&)9WNxN06s$#dk75{=D4?pbIQ=8nffvxlJ# zE~xHPVW3fA3c#%Qdxkq^zs3cS$t>?_@d%gX=HmUCX#ShQ34si_<;KAq3(nGH{JMVC zMWbDTE9NQjhmG{nT+%R-D6Kd#{+&Z(>pkc57B!Rl4EcW70#VSs%HqlrLxnR_k_IeN zM~k7YU)%$didyE238w%&f7=&bX8my0C-x@w%dr)}g_q-YtOo(*z`$2U4u=_c3}*o%TYB@YN+6)x_0Wg9{HhjuLJ}H$38;(=Ex}y zFVGus9ONfPZ2+FA|CIL)&b9~E+M6c&`orU@85@ho^LUsp`Wq{&D`P(7^s|RIrAh5H ztBnkfID@e}FTVng1(jPxc}k)@PiEJAQ2}iW{(yyLKeN%`x3NhH4gAkTI=>ZFU8Z|0 zvsqv1D{G9$Mo&;uyXq^5OL`xI=|siriQXYns#(HZkC@}=jYT?Bbx?V=TQ+hE<_iyY zVd=CcLBth{mB&2**!}+iZ@u6{_MmZBXFGx49P*@v<~$R~%2(@Qyp;y4s#f?ZTR5#X z38#)HZ}G<}ANI9Ut1&Y0%v!;ZR?F=ta}B_dN;dYo-^O{}-WOZItEPrH20X=mozp&6 z|7o3&^%StcTt#JA>J-R}H*+nH494iqxm5HsBIm$$IOS*5o4#FU*lxN%P6B%t(3<86Ro@c1Wf8URX>mIH3G)kQ4n@gb8PC;0<%UrF zEI$D)v5bwyudFBf!(T1FzrAqu=DSH7@*_SeK2RENpBIBoG``3S->L-MJrY%*eM)!e z0H?1FD3Zq1;VcoNiA7*(m#qCYL3zck2Fewo_F%BSHTP&*q-JN0CVVzF z<)_%%KZ7xp-dar{kXCdmtY1BVsIqd#JR>nm*U*sVka(T9gCDC9xoMH>;WpruaP!`z9+d5ccBO?4~8i22V74U z6W%~f)!l2Tq4GbPaoNv{ z#&8>!ZlbX16a%?C6()PQ3|LsC*k@zFPiV$tzvGH7^d09Wv@jbMJ8X#Y=90 zn_3mq5$~w+(nnEcpB~^htBKB{>_I(F4ao(Xji{JGD`wAy8&5ya&Ln|6Km^Aymw6;w zst^zi6*321*1c7fI+&0<(y-o}NvwzmJo#?Kz~n4Y?vH$9_EmN z?zY5Defur%vZq0>j9noo*b?Av0$>84_8KS2S$$q?CkUDisD`}4&?wS0RpUTZ^|pCvjsw&1+W*(6!JW)_)}5KSqybv}1xRKk?wFPDU9y0hI63VR zz&8D?#nBIFDZ*MW#q3&D0{tff7w&46T=+GC_j4EjtxbF=D=iRhT{0IvI|#k97o+av zC?6KLPUl>@c(`8L91&l5j3ve^IV(?JN_yp}qhBTg3)i+dWoGxyMd zp12~kzp=x6k6kctM?7IyM{m@4A zF?^WQOJF0JBk-tW4>eWo5jv2O!GbX+u9 z>S`@kBE=@JfRkkQ-e1vF$36aF`$ExcItfH6U4S`L2!8t(`AY))%_EocJ%43!&rz>{ zni1jo|K<`yI?vg7AO0LxKQQB*mNC{#; z|Dd7{Q?M*?vHSGI?@6{Zq1Zs3XzA0*CpgKQDLLy~TIysvmbxEG`}zj!EV7Nx(%Soc zl1WXW3?ZOxa$3UHNICG4wkop{OXihm4LP=Nd3H!%(Kb%>s`l`9)zPX(o18!U`!RQLmVRZM#-Xxya^Fx3%6+Y9Zj|< zOUqS!?AWx~>%X!lcOyJ1P0e(gNdd1EJm~3a^VwS*m@~C`=T~Oo7xAjdFOZm{RJeGtH zfugAP2+9bfiMYK{=2_aV`j zA_>#(e=HU)#B=gpKZWM^4Cn2_6E^{3U+x%eH0Y9KfwNGr6BSxoS_*;zXyF#MZIRbB zxGMHseE>c{0sQIF@Z2{H=g`3|qtjuN_+N3@96XDDaw(t@PNbab(h{EkU_j9!~q|>Mv+GSd4~{%>&1)M_7yLmC8A`KcF4%=oXN}15=f2f9)wC2OP=EL^OcP)Pidf0pZTBU5 zc0=Exe?d+|KtBu&0(Un4lDTbY{s#+y0b5De1NxWSMT+tWCeziD5d_OE>CYthupKba z95jL)`s@g=dUWMvtI;YvrTpxzSSN$|2l!8S zHPAj4zGC)pkRzbACq^}Q@de~5=bm#UsZH7w=h+soz8zgr#_Xn~l-^ejC}@O3QBhH{ z-PS%Adfr#1R+>T6&8m#>Rl^h37UZw}A{1&0rGN3rU>x9whWWx3^)OD!=wuR9HNL2I z;ef002R)D0awF5PyKAk2H1FitZulHF!;~}$;Cx#7Dbt^e+T#GUM$Pw}x+AYv{#cy8 zm+c=>>p$F1`tn(E!lXWz&>!LS%C^A@F*G4nz44YWZ!zSe{9u^Ev*wIjnM~epZd95Q ztA-M*-pMz{I*E2gh7Y*M);IO|pM3pskIP5p+Z)13cp>6KEmy#WOxmZa z#|DEtG7M&zuocT%3H~YyNBS@VPWa^bqAx*x>dKQXm)M zL}7itUR+W3_$HII3znhp>1l9!@)e+|hHY1o62>0MJL-W4stxqQm zU>py!ZDSuzR~Nl6kaPE^Q!)Y>V&LQ(KCs~>Rn-BIrKb##YR>AY=!nM`a z27(T_*Nn$|_mq!Se!~ZgQ6XSFg z{IqJ{HN@5(rD_*ZS$7f1kGR1z$t6cOYZ$`j`ort<*)O{kl9P04U_%wN+Rqi3t0U*1r30 z{6gxjzVoc%VZM zBF?2zPb8M-TnP8)X0>GyF>Brl*r^tB7 zUn2A`<~h}ZfkB28JoETFCmPFi^f9i}&g`lCt`N1_YvvL6wfBO_1aF+-Mr=%Lu{{B1 z{Z)-`%cN$OiBB7THri}%3`=At7(*4vx^2|N4?50?)jG!96w$KzAf@?!bNYI}Qajrs zMu!mPEzn$0of-i+0nxK6aVuBj`A#ldA42sm#h1R zzp6@p$(8n1=cQZDfSu_6dYiS)fO|^MI}A7&KcnX=UGj^(;7u&OIuxIK_|ijff3i?= zcHUU#ieGZRE^s0vXR(vtrq3_YyPMvBKHZ1IZ}0Zc4>A~{rUKUOHUjNl+~e4EAFl>(a)O6qq0j%2~C|HNSYb}$iU-$WTe#|MR4OJ zGqFriMCBedv%~mel(RXQ4fFdc#0~TB<%Wm**c#WR`EM~i9G%x6%f*K%p>8a)?9~hn z`hTvMUAs!BOeBS`F_iE+lBJoUk+y-kXZ*qsPYtOBU)tT9)8$RVa>@iL2I=S$tX_Ob zY)WKE0xL873hCk_Kcf8>1ivO7AP{tNXEQ<}GMUttk=40!Ghav2aCk$U8;+uD3pO!HJ4_v!D(v zo;BR7Au*e1yWG}tW3Z`?>c^}^F<<9ONGIE{k@Ujhi1W%W`^{xS_{Y1HVhzSVC0*aP zV}+LNFfkt>33uGd?_Qd<%Cw#7Ea9fXh8la7&hHhJJHoH9F&Q@tXtu?PyRA~loY`l3 z1G%!SJEkd3wCw7jMQs;`PPTxJ5|VOn)nGb1&v*f@__Bp4u|Gl(p6H-$Z@)V>H+C7G zOUflAh#FZYqa~24+WO`v#5512rs4d`J7G zi%U|6JW~5xj!bcrTZa1_$;@IrB^49{ET5KM@UUTS<#0(ufN0bZ?o+gj(T2EutVk= z6GLnC2>!A52;wDrSD$F$^jMIuI{PCX=e2h@p9ly8?UjtfRa+kSXR>H6^ui~K*1J11 z>1Z1Qn*~!VHi;+9cBhu_8nM|)JFN8LYERcD`zZME>Obs)5fU5yh`g5Uw1xKZ8%*e2 zfWoC}P$*LsO_FPW)`)HwnQm{p{4n{TvffwhvU|%ocS&H%wnD$2Ua!h{pjD$uLGjSH zG1+^V^jHsq`{!fw&uQe6J+L=CUw$)p@XPbq(Upx#riRM|JStV>)fJ^lL5L&ULxaPo zE%pqa&*nZ1?KgX})s?>HX7rKuX%jn}r>KTZTDWy6VN@gBP)+sC$Aq=(0==y!u=MX) zXJIZ}c7UU>&_MlBWFx5nl?q*f1UZ@i5`2n8bEF3j*zfpTYhY2LO<)fOLW>-&1w0I zH^dNf9WLwxAWeUlvvgsvdB2*20ikkceI|J=NK;*}s%5QuK_ewQS343@wKLY_6DZvqmR?Ate2|$;Q4KZbMj7 z`?{7$%-%XY3B|YURJheH9RDlq?PV=uSRcT9cOd@7`C zTtd95?ucmLQ!+I?1Mw!2d_P!F@g;%Y1XUYQf5a=7W6EagF*;!4%BLYVFO=z z22q5ihKO32vW3S`_e4fU4t0e?0rI@5zMg;oeAv}%*J6jUV}EuE zB%3gOD(*bq#QJ+{<}nu_3T3I>(n_?oH}0g_lwM`6F8|}d-&u%S zC(9+NCa1J9R=%|CXk<{h|GueuLVT=0GZ>zXh)Xj(xW1C3t1EF$f-f``ap*{@9E)+< zimhc4WmE)<1!X65L67sUdEgQl75VA#1JaeI$} z3HJ63jTL^p!FLmnA21y??xw%*&}e=6m)u9`^HvPoXPZUp#hwv8G`Vm7CK^T@o^d^h zcWB_dG2CBhgk{o~$cNO3DgUxo?{Hn9lb_I#g=? z4A!sg=LJJjE+>}@iaKVhw0~S4i59A&C5B5B+jMk#7Msk7D%~1>=$~=Xv`gXGQIH#p zdAv%LV%7KAgLA9<=}p(oHhkeOVdkAzUv^S8A^)|H<8u{HFS_U(M> za{1Za?*xYefgZ~@yLZ}5d+Qaq$CaS(7>9FyG!)Qy7@p+fBLPffKOf+&?izafS z`l_9--h1XqS8zqq9Ij`vy{f8Sp8zF&-_cq!Qc>KS z;6rx-^yfQO{V8M5rk_ISzF+0PNYPh8xS!8#b(WczdgwtmW-ZG7(fCNu8PB6B+-yMS zfFn2cXObkMLu#v8JmfixF)Z}5)5B3$cXykM#1-MJP4-*W(n$fvszy=scrX4I$0n*) z2PXH)5ymaORtHLVv2_9mA07e00y)Cd$Q+NMx_8!I-`i>vO@*%7aU)|ZZlVUuM)B*5 zJvIZKPL6gh?7GpU{BEmL<1%MjE!J#J#!b4W2>Mj(zATg z6og9K03Apow=MOo$4B~G9mFXe{TeRNc@0bSvo^Llv{fa`@`lyN+`60TMl@ja^R>2s zZ>;iTt;r&fI7**(mrJ8EA9HPRzgXE*yVv9j3*&5T78k@bFR*&~ex++LEp_-T^aQlh z+x+jx#fdn=WUbnVrHGEs=GP^-q0$bf(rxw23((IZByfiXM=hXdOjP`Ks7c-J~`g3kmAW>LP~4LWM3B^cNNvC4Bu%Cno2f(z0CBuB99k9}^hsM_;>-l|Qr} zFuq&z^e}(ZHIeGn=Rt9f64T`r@r%u}z@@-VyprzB#*-V6&dbKm%E$l7GX~rH7Z6qd| zX|6*u$(S9tmUs-S^)~kYXyr;R74chqViH;hKE`Ax2@N zaPqtC_rt_YAxCOi4=T~iV~ z_Jg*R0(0JldyD#TlxEi;h&he&X>? zCk2zz@PTgYfnc^%5d#uu^K^D)+jQ))4}nH{*a%vLDqaLWb1(K_uls1ZJ|3^rhfQf4 z2E!^WTtIp6RXV`++-Vs8MaVdO@GUB1pq)!lS6^NIqv4l77L;kd3WsNMnJ?pWFG5d- zC7JynZ?^VviZ^#g5YbQ4pv!cOftWd6SmfddzJw)JN8c6=Mqq~A0E*UiQl#bs-jAk~ zF-FjY_!+EqEJd)rmMuIzfLD=A7DbZzN`6SC8nm0FASkTy?|7;8b#^t^f)Pv`%hIq)%j zL}J|D8PT?nCViGA;kf-dyIphA)I40p@M1GlnSH{!Kn7*UtB?lxm$$vbAORrwK%!V) zw{(hk6L-q8^3FmMzPmOxGx(-uU%u(Ia@LLOIuhoc1&zp~?qpCMZ+JZQ}`rkr5R`OWYddYYFA0@JhpSYnwPYA&AL z;#B${BcE?+6TFYy@}T=?+)w83Qal>C^%C9a4|uZ*8xBz_;I*dy0!Awiot6c)dS zZ>`GC!f+V5WsxWxq^t1k?e@FbHY1;^4IX(P2JGW(xvStyJ-NG6dfET^JAjM%_cQB0 zn&`1q+gkape`uQ_-%wCCse1N@Qiikai$b#embcv=RHr0iHY7%m-d*MYz?4yHDlxz& zu6G%vaIHrQTbH)o_38b;@Lh!@J+KysA8dR!D9@KYclq#ON$^WPe~C63C2`iEqm2hG z9lqMSL|#B9{5c+*G$h>Q(4=Yr*Ia*%zgEd%9G;~3EX{ZLXxhlySggL5muUU-3^wh|*a_tL+K!+nT+cK@uw>5C|5d!r14HlPdy3QuHUE zg&q0h8`)hOS-|aG2pK*5c#rSxTbRwF|Cuz#sc-m8$}^AHW2W&Wq>os$1s(4`ChA~} zjN4&*`R?fPg~TJ(eub)zom+N7(!+a8Yg;b~#lvShiSLpzeG3egD7D_}otW^@Y>h2S z$4b)SxOp~-FuIAJOMSTwI68kJ*i)PiOHhPnUhV=u9!oY%s#h@Co@3dsUSz`r0q!~H zUM*3)*cMssh8UxCHntiNU?yDfH$Gw|m(&8;u_d^;4U8`MzAa%ciNJ88BF8-h;!p~N z+@SH#v{_e-G3Adps^&6j4QDyKvi$Z9_O7d7hsirLDnzA&R`MSGc{-Pc%&hgRE*oBV z-D0T}UQIvZi6KRNu1jg?V;UJJWhT9V=ON{DUX#}~#IGgrb#8U?+R4q;i>XOs$EV1e zlde3;tGYi@M@DqUe_TGw^VTqdI@5HU)0ZYe6`G7z(A?rr)Wg|+ ztONHh+I*|}!5)5-&cAnsbs&?8-WW04mL~ z6k*45EEbPAy&O)gc$=Y$uDl?&TkUP*WGIst7$tJN1CE-+ z*H3ONru%$b_1;wNK3|*oAT<>;^i^x+&YV)R#i7;g?1`mJhiJqhKW<9%{ z8lM+aP#9ky!Fzjo&|`HDbC>6KvcEQgof8Tg8cm&xSA^t^MOI=z`fN`eTbDFC3dMfy zJFwQ;Rz*{uz;9QWiJuL5eXi3oq70+x%(rLHB!1I4nOOaFVA(j-QfbNQNp?=(w!h~S zaz?7s7>^P%nGzvw>v6oUIQjLqDp9*pB>77V+Q48L9UbQ}1E##ZQ3o(D%64JB?Tu5b zE^t#AYblx=rZX!wEq&>IxsjY5m5-0}p~=YoZ5MO%StT*%(8kG(IPL4YYw}-#r;Wb|+kRY+WibabK1f2+Sam$xjK}M4@;IL8H)>>76kA33QM){s{Y20e} zt0KNUcrrn;$0$ygAod;6OX>_!25ZQJ)~i%27@)W!SoW7%RdB)O71`6zB>6C5J(jeX4-F*ke zbMC$Kiw7QN-dwxZ-n)qufr?5c;Bh*EJGQxPq1?X3dUFwlHPyLw22uT+I7#zWWP6v` zPTt%@$u{hLK_}mA8}OF|YFfwx+QC@VmT>{xl-fPt-9`Bpo4J^ORF`Tms?B-FD50?d zGXcKM{d-RotNAAFQvxd{UCHITCFm@fT}3xM_v>NDrJoBh*AkdawZ5aY-p=HRFs54%<2mNXSFQlWs8CQqXv`IOI;_u z#TKB3Lj0BWmg1cI)h4Pm%Tls!u>@rW-d;b)g6NqMD5|6T25inFSfA%)XLBNNq|CTk zbS^)X93aIHV+S^+JO0__C+|zR+F@m^3ow#*oK{E6_OG*^67p)u?4-7QB1S3B<{tTo z%ic#eebBF1Hnnt+Eco(WBEl^{Tb1_kW#Qy?wr2!kf>LapLvb5SfSfV=uUTq+hZhM6 z4Pj?RbMLcU%y;D8tr^o2(IC@2jq3Wv^6S?a^rQf+HPDoVa`FE&>++8}2>b$?+zcjLghYq%(Y;FW=VtDCjw= zHh0~sXf4G=rpBh8M3$~}9)i7>xeURA8AX)m8m#!d)Xw>pAZ2i#I~6P`=pmr4t{yp~ z$gc2cOSmMf=2zozMTPJ>c47HPOdVFYV59L?U6vWiMq<{PSfgLDI?`GPt|3eIz`x=i z&q}5V!0EM!!ej`C3A(prNW9br4Z(P4!;1rtQ#CbA6sn1U)m$o6A7L*9?q|=YH|>dx zW4lN3jXo_(`UVd+kQZdG{ZJSy{NT{tfw!A}N8@*EN7he*D5b|fDbT%)JM;Xdl3p!V0RCa+O@q6w1^X+)X%GIJjf z=42~4@^IjXrJ5O|QFC;H#e`X>CA9w8_p-;cHRq_k`BH9uVMRY&zOx(k*EQddvKjW? zwm334HMwSdCi;Jl|9eiR;+T==UMkj-EmE^?Lt|Z2tJ;dcr)a$0m2(-zb=iOEJrf+9 zNNc-A*HxiJ-1Zu0(m+&nT23o<;LtaV%%Gz}1s6%QN?t=E1KE66I%}d;Ih9C5JIq&gd zX4BEr&kktl2vPl$P`mp4HIB~?e=6bPxES=^6U7qrroY}*5q0&%+=lkHX^vcxy0n5Y zLiX((bze@FxQdHD)doabGQCM4FuR-;TuEL=e?;!d)s-lL=SA!<2GkmH4Ng;evG3`6 z?il7RCc98f6p=6~n<(W0wzoQm>VIp=m$UK@h))po^m7SxCT*$&Uv?1D z2AtM-3hFJ+-K;shwzesK(iP=a4(mjId3HV9>|S?Fe|9&Hb)F+Do2KuLQ;i9mDfab^ zRyry#QUrC3+J9}intiv^9}O*S%N-~V=O1o4B69Ycd@aX#OcY8W};&$18ELX zG-{(9QL2}R<2v)0m|^?W*AxS9mAfaK!VZm^?VHma72L>&Me=9`0I)Xp=ct5)%O7C1 zSuoTI6odH+^BnOvUzs8D2sc(Aj{`uf%yBok`Co*mcG#%BeG^_8zG#VXWdSbY%e8Ds zVd9~xV`nA7Tj)L5j&j?ZCks-|Wm-fadGSx6mNP25MPEm-;2#%&H2_N2jRi5`OdaiW zqTE(G{Z#35$C7#F377S)2F+ZI%prR}nyWTIooS_cyHT(4bfHgbfMi~-=n$z0MZQZ*{&ygCd`WIn?i&6Em$m2Bwr}tv8fxPla|v)H3BQbo#B?C99_3)-HF-8= zu8%`gL&;XG>;E6*#gHx(*vLQC4LPv30iE>~&ONW1mbdM>nRO!Mlhe`~b(BVn5kils zR&(=hTvufB6HWVEbbko?)u{kRL8Ph)FBo;SHVR`=$xFrMp#C{p&eTgt=Gi_Y%tN_m zfwI?QX7+GL50083=^QRFfNcKu`qiFhX>=ShjwsY}?mbuNHopyw_XpR?JDF0wEAd4C z_5W|ow7mYm#!OQutI>QcF&HNGycwQ%yU86K>} zr1@(<+<0}XSNp;b%f|QShPxj@J`Okcd@93eJOvZMDpN4&`<;PB4}{1%aDUYilJUsO;YM{3X{n+*Euw=lFNIHZ=e zolNv|k*v&AB)`3xtBW$C)P=Q9$*Si9uSUpQ5WfW&-sJ3roh2s%+AS~b%S0iE?W0w_ zFKqXn#tdao52|f^XWfNpYNEFKq9ASF2;E0|IRtZ?1oy>;N_cwJ!(YkmiZ+rY@^3D- zi^kaq?VN=bIL1jGu@zf}7xIQ{I$SQwMyFCqWDLcB5(ssGm1{di0N0K7$9h7fn!WE22D#q z(BNutZ1W<|{d6=QX%z15?|jb-%&Nu(VGkr5C9WR-8JrIEZVa%F(f(B zO4vbfDU}LyOAJSUA{dqk?|)&~>5*G}hy7{s*I+}2icEhGHSfJ!r+Ii#phUp`UKy|_ z2#>=wBLl~I7zpf|zh@6mo?&Zzi6T%=xysw@B)Pf_qJVI^OxzLjeC4o}P3m}{5FO5V zOeQ4TPQ35uvS9UO^bDcBJ7N__oo?EU9Id-URX-o>igFJUK}D7Sk?Zr7d2*32uD6#5 zdSi-4{uIvY$1f%4Wy$bhP@TX^bH6=B(Q+okz}V#6w%BY2!x2_cYI}E@pb$McW+ zF}dz$us72SiIQ*`QfX43oh{jszM5h3d`o^HW!;31Yqxc=cypGFSxHosYfj3@(jaVW znV*wob>@&K!Uy3QvX|qqTKxV7FUsFPJqiSOLNPT1#JnhOx|NM5Hoj~*EB=oFf2r?$ zNg%qX$GwJ*5oI~J`5*I2LZ#-c^L)if^eGO3Lo8PlUG3KJzP;mH-V}EOOJmC>?W~&V zw+o*#gS@pjP3s-{xcaDg&E`FlII!s!QnFGrjCa+UzKsv2Kd5v5Y3}Tx@0!E0rYa_E zbXg1Q{!ta_4pXe5SwJTpRvMpNYl~L;rw?bO7Z&Cp^l^+Th>3iMm;aC8sg<@EyMZpg zh@ZWn8jSDAI*BzLC;6^KniAvKrnSr)=!SSM<#nr$@3@Q@Q?pjxRyBP-b#qy7cfCt# zmgqT`78ld@VEzc2q*N@YTR~SjvW_Y0gg09#;=*9kk0!Ob6Gn~DK(G3kzRMt8RB zH(BGHBx_TZplYo@?aq*Iw-qQD+Z>d`Yh=4tY&KV~JP>R(*?P3^5nuaDvZMFQ(8;@y z?qKoG(C&OhAF?Q>WQ4cHik_%tZw!rzb-VqS$Ltw5*>USPyGIEvD?x08V3~Z5ZwjA- z!^W62DR+hKI_xA#s|2g(ffN&DoAVh5X-jMdjmn*t6cqVK0eFV`XmYl7kG(B|1EU}5 zw;OAD43{Asd^qvSD>F_itfXJ?T5I4w@D@#aO)^plI*n&$NX?Ncn-THM>KT9^0|;`Cz|6 zm+0SSXaf@08H)|Y%EQFP*kwA@P}k1VLw;7Qwr(1mdD4sxBBOal4xFiIaf~KCNmkJ; z7PtWD6dkF1l^*GtE!S+eBY|MmqrxsW+xWR61C8Csh) zS)`=LZ)jQQyxH3iEaogh`+J8BVgH!BF3E$=%?q~D4h;tVDIz=J8MF*T(0j@&+MeU2 zP}fisKa5+xvlDkvdQtb*SHE`Jj(9NLY!mcy&|<-A5}Oz7jTcLmFcN1F_;NNk-s0h} zt+TXVr6TD0ZYA|MVdUqkjbc3d(te+SNZ5y1OI;V8$1@vHQTr@}45^i6qVVpr0#`DL zzc(+gWs<9RZ7C_f)o4?IUz*LV(80Rc*T`pgBKl zbIR&&`Gubfx%K#ChmFmM2O)hn<~<-9*ejTO6|O2<*s|DOpT6#!HHM;Q^|(~$ z{q{S(S|#QFY?j1+XS?oT!S~wm`ww^2^W&sCWtaUqH?Yne;;UDH>V1S~@ySsSw>3-0 z@5^I6r(Wh9-Xw29fe+$KAmx8DR$UV^T<5qSke8b~2Z$LO8+#yLwC|xvKi<~b>2u3E zM^$xPk35y1CY*8Oy^(zhrhNFSb0~|a2n`0uoqp*$Uq(3ApE{nI8(dKN!t*?xQ3DC< zwnR1k-wZko$J*Y&2_vDAyvBLo1Q|+EU{7^LOYE@Urws+K% zM8yxRy|@JF=&p&_Dqg_bR30vV1fP3K4t^bZ`J;$g?1aaCvr8hdV&r2*@a;iqT#20Q zjl}8wQpUh>v-{vyt|j})o7lc)vg#kC5R=C%W6_EC1GQa)0;TCJBSC}vV?lseM7TP- zrml5(TQj??wGPPFvb@O2;&Zy#ne>z?oByZeooMpamjLUb%@ zUD=p0CWfP`!JTuc0QuVh=od>^+iQaJhem_;v^!VvV!yXFFxCc#YoP*1_jtPNWGrNC zyfHPmtxMSyGP?iJeQPgsrS6snuY~>F-}Q$%iiRyf6(6@;S1{jvSb&6FFy;m`s0~GJ z->gOoceF1et=)+(EU?Qm<*}aoA(mb9>1a28K_fwshQ1Sxp&TEpnp--ZzwviWb&D>r zYJfFfK_=<{Y7k+x;=CTk_Ws>SLKOfj5TKj~uHO#o2N0XV9<2Ew*F4Wl<2AGA1L;XQ z>)U_W$u#Wid(Xp3D%$qYFY;g=q=vBK>2@;*&s1-VX!jK2qdY1Xb>PC^8#p2GSgy5? z5 zAUhC&A9%PL^y)hhDC-AthSYYT)BI%?C;Hze#}D2(*m}gzS5tsA!kgCJ9e3 zKZ@E-Jkxc&)RB$@`!BQc2$;uzyai|428+ddlL=~SS-K8_KpNC=iLz@}K=u8&?}AE# z-bLL2Shu!@DBc-{lWOw*^ov6%yc6LU#QL%RLvXX|v_Njyg99BDTXq2}o!om54G~cG z=2AP9b0LpWs9|3iC3BLK88Rv4J57)^y^dCNEotP~Sx&uqox%+|!%e{ctTh;fQ(`E^ zFklxP92I!0+o6!)rQI5_Ub>5ki4p~hy>$~qleFbs4Ujf(jD+ZOnbmYMOt4#@lBrD9 zqnCoJiQx9MYfi5hd%>!Cw)tC1wSQn>m*uEFV*Yzpm&$}6a~G;$OR?uYarD>mRZ1*U z|D-D;=v9uy}NhL8_W$FkE2_ z3QcUr)A`p!_N#9N4%1WIXu9bN)NEktSSTO-ByoB>7O62i+vQLj6Hfu?5xAViiTk%d zu>>abwr_P8tLQP@$~F>1#_b(>ctsz4@Yv_awjU-+Rz}L%wkXt#nzef_!=ZP^q*q;hH>z^4zLEO=9L2tOY$Z1`w(h+L21b-tVFfX% zZ;WR=|MgCpq{j(hl43uWO^R?;VPYXB){(1oe>J|F1O2!&ypeyUNbe1Sw+%U9dWUbV z1-d7w%Rq`RSAZf(1oOzk@s}SJQPEC#=a+)&OM88yEc4I{abvPh?^n7S!pOf{Xk9oSwJe`dTPb z;}ef}1a0OmccBWJ?meOr6()Co)YyO+1Ro(OS$@oO?GLGj%4U1#&sz_w(mYQ`9j9C$ zSoFi$6;D+MYPpTsTYI4#(HyPbKcdaBc1c?Az7+YL(ZFgFCp>Fe_5!qRUCf!1@f7t0 z$C~ll*|vRRT^}-(3{W=K#HSn_aQ>rx+q2>@VAmY=esE(*4#@|Ji5q94sPC!DULK;) zyy((lovib2g%VLc=-R+A%>dOG%BO0$5uGN`(A2W2Zm$kN%0%MMrz-Cl4T8w1sPuc0 zzmb|9*#G99csFtrbEp#4&a1^Aq?xaZf14}0Ty7m??A=VVE#Zcq#%=6g@J7GCj7wtF zo=d&F=XBU{V&R^iX?ibcZOttMwzWBbK)xokQT_T|u?KqVa3wY-DX6bZ5{8K}vX{a4 z?W}`YGkKDdlG<|(i*Kk$A5wnG>wNzj9Z_1;*tC1ATrE6EoYQ3Poy%}N!e5L=&2c({ zgO_G8S5w>ckIO!`{mj{8$K>>8zqVA(5k4GCEWZZxlRliyT>KZ^NSTtx!j0D|;35|9 z@=)Bbcv!)#q;vyEN^ndcN-DK!zJN`=)@R)L!tN7l!Pb5JU>UTgda%O8)-3jqaw)KY z6tpork&`W$#`9s67VD3nD2jM5lgsfIhqHE*?|<1Ad2?9K9C!K|8dI0m1He@k-xLjs z&ISyBUgKpe4pf6*)qe}MjkV*8ioNCk>qS+A9+sANRw~%;XtTNqGO_@6B@_R(8P0&tcr*% zwq{buNB3?M>}o0&U?l-wkJmp6I558l1h?zAfaTYi=y-V>iW1zJ9;$MKMGVXg|E7nO z;y9bC?(>Iw+KxyI3OiX1Rj`cPIr7ZXuXogCKw91g93y|6dhxLWwe0#Sq#a~+DwVUH zr*(!V;KH?B;u&;$Af7`{Vf1S>lk~dZndT{19&=jToBagz<6bAzgm z!~hNJd6Ax5e%K=7LQuyjF$nO}8(~LTL*D}Q92ksoAOYnR$Y3(?aI#vqwNJSJ2_% zl{}=~C;37!4QK+E=}7Cs6y|>JaOe#lcxr^G>%2UE@Sf09EVIrGSm~76ZK2#P8Y5AR zjyCZd?M@XCHBo@aYZB`-Fd6bTjqld6`P~BAp0=fNo_Anf1WTE%*ND8q>}{?e5>EeS zu6ff{3w%S_R%>PSW1`M*XuOUF@6C^+U`)R38N1KIfc3&xZ%^*aPo`)Njux)b>l|)_ zCUZwB5o(ot4F-8z%g`DG1Yg?4&-z^Velz=~B|BeC#QRG0pe#1H*iKE&&+ywEFNune z7pl2e2k0d|ZyUKj*GX}lz_=$mX=h~EWxGOWV*zuLg$ntT)Sp6;h4-KGU$cHA%oPT*TPFScs$>R8n`%r^`)oCTFSa-^tZ%I?fh zO*H4R`z_QPD(`(0dgYJ(b0%r~HueR^Yh14Ta98}p>R19-V6(yA)sLc3 z8#%cJBHt4Np8=etv;=w7*C<(l@}_{|uSne~X!JF4){Ug)%*)w!Xt2gjvY$n}$`qm<0{ zYGVrDB2>mV+X}Ucyp7tk&5%W|#z-ZZMeb00)ZLk?FZq}FuD_R`$qIvzb*KCdN@9Pm zp@@c_K82p#0P+dq)iuf6{40J?UP(kuY%er4R1+T?`|QXcg<$41F_}Ta+S>XI)FOM( z8X5&3UI9M#ZHG(S<9VHDDFQyXuO-v_Kz|Q%x|#jMBUpK z6cPFT^Ku57l7_|%@NzV}G`ge$D3WE?y+dRq?6+FrNi3AWDE*ysFMmu-OpV1~p(6)v zO(%IH={?;O0b7eg9wJw~zk6|U(X;nl$R_{ElMC!s*&5A*_d=t+Z8_le z3d^lk5eZgeQxqWwW)Qz>sinOKNajEG(7RWCn08QWY#3Gr8^fLDSXcK%$o;|HKnB{l z4RSd(Y9B^=sZ___R#B6< zh+P@7!CL{5pPbp+O1`+RkovslUl?j?rZ@+<;70t0QPcoQ7(t<-ZVf_*1~GcL5mr;> zrnXAA1_lOwV0TJfCHM4v^p8>k0?jeN+Ng$0ZtTRw1OV9fM2LQJb@;1GutkQR(a-PK zp8xDS&T4mu2T(oX!Cu8g=B>fJh426oEz@=Dwb?UluK`FtpB8R(MuzexCmsTbChWom3dhVKI~Uia!g$N3<~Omh#7||eC6v_E)M>dhcRf0HuVz^L zM1WN(Z6ji?kKeh^%|NRfd}^)3Rdi5Ff_L1BSg3CKJxxqQeb%YO@R^qA7F3p8xpJY= z-yGpeya@I*G*KeDs}c@S-uwDh?;VjsnNit0@@8t9Xnkz#LV{YW`2-|SeDIBCX1VlU zBBG*Pzl@Qb=z6xw!D0=wY(%WDUVV%Xq+Hm+IjYLa%=FL-NXU6oQc~gxb-)VXc+rzb zr{_{Dvb__rgc?NiYRGqmcyWUVldCWO&)#o9abh>lVHe-R`E)`)wS2G-Ps2L*ZL(#9 zD`rsBTtYUe=%v6@Y5?hM#`cg9k{-i`(oPw$e{&hCABvRn+v4=9d4#rS+nHld;9 zy1esBCAQ9z71^Mb8zfUNMkN2a$Rg5{$*_niZ%4k6>nD8|C?g?wdr9v_eT&~8Awrt& zsXC;B5-O(~s(53iP|<*{wtT2sgvHCfSiet5NZ!#0`uUg@4M>kjy~fy7muQ4VqxIDC z#0`yBwSPl{LmPVDGEGdHZd4{5KJGAR+?Pm1`{Ko5X->8t4nee=MwR94j@&n~f>S3R zM|}SwVWnxP_X=n1eKvpw3QUj6(S}2i*yTu)GNJ+9)^9Bq*xqt6wUZ;=06%_d?ZH8M?B_3u*1u#1Tu10{UWx_x!(&43I;scwkB>^uv0W}sZ@{E zK6{MKGDNp6GUYEEkdeQJjjYSt(1%<|h}=KpHyBp&2;9I~vc_%M+lCWDhu=U5oN%}J z8HG3+tB<6rhR(lcz1o3R=gj4e+2UZ~h zpRtz(V-n;k1{T)nz^2{Unsl(uY7?%1$*sQdV-6MDvjB?cKzbJOV5GS*;z@l15!7cO zaff|Xc7TWZuvAUE`f}&HIm%1-7phbD_!&fQc8qW<`|l`|JOrioS_x2NL)H0NRA;d{nvV+H_K>;RqIXn?$e z!uW3kj|ad2=kl7vN^U70xJu@Y)_Stt&Vv8BT6gWs$X)*!dMja1t!mr{9z_z!;F$Qi z8)OaxDG$u%@|@ek*mv9`eCf}O-TVSj8C^JY1?o+L@^KRqYIa-Ge83?wI5s{ZRe`#I z5?ECuhn1x_QY+tD7ri%wZ9k6 zsL75Tfj4bsrF_s$QV)3hdZ7Y<0;=X*wkz0^=nloHGL|A@j~6}?$Y?e? zeD0QQuqth)N2f>)^?vu;^&3bumQ#iG-G!~O$&FP2YJsG$kN(fn4x#T6`%q6LVJ={D z-#qvBCi(e2tB&FBVG{!HdQ2cNCLAIh;6C`P#j&Z0>;dTVqE*nqor+R?CJ2)njHZ8; z*Fc8ml}|9Pbx=Wm5+6ST$nxxM-pV<* zHNAE~er;5Ci|o$~m)iz`xxnr5*%HHe!z?m}+}F#a&LR6SAG=0;ECHI}urM~T2*c|T z33H$ilKino^Lk`>_-s@|@^RCV7MxB;(et|aTD;yWeDwu>SZky#o3!69>|5NS^KdW^ zdtsPBnxb=cEb})=Mdr%YI!a>(c#<_dhRO72W`0PKDA;1E_c3Xn+uuB}K|ioxRc2gtOQ;(-RBl01@K>NMAj$Z~^S=w0zK-)!^feZGJv z^a3`?EIp7G@?L0BaNzn%Y$ifV6Dh>Ruz#JRu|@gvL4606V6<>iL@lfi zWQ=KCSg3*h^l8}Wtq2R00=LQlD75ZLEW-Lp_^2u#;_ZqI6Y3oX{+hcEf}#q=`%b8i zU$%;@}lt|tqlZTckm-_r*RUB z6<^nSqyL1wh9Y+$feoR{E=1R8{^fJQ8~`B|{du#{!QcpuOQ4&0F3eU9hh%K^zi?-J z%lYBRZ%H;h6Hu(Uv7)zRdf0pLIqhH_{f2E>TFYEw zQ@CaLPA*V;|C=i!DTz>&_0^;}p91f-^X+Ya3Pn3p2b_oq4=`HER=rCcSWiz*yFXn* zQD&L?3H(~N$M13E$fM_F{l7;p{(em)FpXU=#=vGNK6it*`6X68V%4GBjl%NzHMfR) zsO#6`-WAQrkBUH1? zU-WMds`xD2b-hw16#Bx5vFKqf4P?s$D8KX|KPimO2ux$F@}#bwW--pHb?B zRR0n`hk7vwPnmO&AkGKt^?7f$$m!n7GZeE2-+ao#z27oqNht_O6JX1sBwg_Ra$=`K z#D@y*n4B-VQu~Lh*|Dizhx?;sxF|~?6L_IGiq{DD3RxJ?%*l0xT;TOH_*J}SW3#t# z=X<0YYb6qbR?x-8m!7i_$AnT=rteC}*AHs_*RniU=LT{m?@zjA8@p|XO)qa$I>QCC zEGpAlm^uXPVSu^_4fS`kFUVgKkGPo|iglFKx)FnO%CL_(A5>^6@V6LC7TXZi32Ubq#hR%nUJ(~)l8<>#l^pHn{U=H2t$;8b4M zIelC)b)s-rd8IT-X=yFx0E52*e(1T`MT4BZ;l{P1+!2`(3p>$pSqGV^`55& zlcXJ6iilK88xF&pWAh7|PXKg0JT6rcJ~->&n|76^ z2Zj%;1Y&&mRa^AWJSfRSbA-$ngSj8;fPk+~4HH_mE3&fpSD!rP$0BG`W!}p@)g^gu zc8gD5b+us$xzH5Be1hgOCwq5txdvgMww4Q%TUZC)l8n0o7G7Ou@w0c9Z(UsUi1?m7 z9LI0Qd6g~3)0>A*si5BVc(?6_2pQ@2^K+XjXqObx6>GFeC$aNYz7O7sx!qLj-+#|1 zSuNvbZ9a<>ND{8!Gi^j8w{k{y<~5z8aE1C~P;$LJj(_)I&$bZ0m?-zn(qVqB)q20M z{l$anCL%3X!6NX0D&VsfZ6LQaf_;z-D7hcsGh)zv;c#E-e4_b^L{a!I(g_RM8Hfx* zw>ux2h1T^AqE1hOt@=Cql~T=+l_K> zW0!w~Mho1sWeV;0iZF}pLIk!Stvk1#C~(Xh;>rIO3ZK@V@))~~2@X;%s-yw+UfZ`vQb9q%)5Zql zua2=1ovuvi_3e;lDV%*l%N5!Qp_vI7S9%M*paGBos))KOAK>HugOG?!PstnkOiTn$ z`=-O!8rV)pn$Ent6k+#ZbMo@4GHr;C_jv%Cu{(ZbZBUZLp82~ zP~aX3x9R7mU20Vh(c>j~y+$XoVOTcJb{8b>aK$b4d>q;dqxk^;gdTE0^ zmeiLSbqnX>qJ3?M*c0{2uX5(;Q7+VYXP6r20F98r+C}oe-;+~day&dD&Qu?H3u=TB)UeG(Hz_$jjldl2V5R>pG~_Kb z6GF2);GnWcst^a~UvB1+mirU(s_R@{DLPl6HH}|8!9nXT{W|@M$}7*j82ywF@KorL z#E*)JQE$6>IH8I`<9MVXN$wspShRD%pL>Oa(G3*i3D5#Dil;h2A!ZZ=paQD#1>%g< zmUkSkTdW!{{jIY9YPnkEFpecHY{R39)&$(TX-l1&h#ids0>z zhusk?j3(*Lk~xblnimSX+AQ6R4XbmD={4I;`iFy%TVodATuNvDZnDTMaqTk-o745m zc2QG536pN~2FM;X7x^C1XRLv&>y|?GHvu98j%AyXR>=45fD>X=0@SCp`zI-D!iHEg zstZnLOWIAJc*b{v+au5__gkA~#&tCf<7v3jHeDQKPx@RV7Pd)H)6eZqLP#^an$xw4 zNG|Tq=gvgqG5coP_xbMH;Z3WEe}(vOkw93_6W&oODXO^AneTQbC%092iu@UGkl7!< znYmvs9~5cNrrn%sNr4+2f|qL6NP_(3R99D*tLO>|5DXTBD!f_>VSKW6i1z@8pzagS zg`IB(Z^NJKlLM$L53PQEG3V8HrhkLEjNj9H?_lKW2m>^?_^`ak*{UO!lk*5d(({G@ zUZHK&gWId;G>#>Jn}=-W@kl_W8@8na(GL@o6sN3O0{_GCO$SDj#H1vxymt?0+)l9m zgU?*X&bl)}6XXRfp!7j$)X&@7`+ogn4e)g`fyE>P;--wF_ZMWc^|BYWp-3x_oV_i5 zyIOC_#&qTbLugNBYt3d=v~S)m)Gvt-c|&uS+E4_a?FZ;pQB(`Vmv2tvoDB|=Tz|&l z2NtM5Xe@TH(?>b4Py##q4jTaxOY8;w?yH+O>A;<)N19nsGWzJVh_0=u$w{5oX{tYt z8pZW`EP?u4G7SWP{G+H6Sclk>4s`m_!Rm5IA1CHsJ)YHNBS9SeND?Gc@{8fp73a?0 zpzYDl^E(eat4l^Kj(N@oSB~K{PhxofYvgQ2UnVH1!9$fMq4Adrx=4szR?Q_TQx^Pp zbHM{HJKdqrqJr4E-qAH@y_0^8i+$#iJTf^E{IFso@hDcXkCN>t*b|fu<+U@L%+%$xHHae;@Ta`OE+qBG@DEAWmW~vg>TlG6R zIcdFe10Mbl{LlWwrC$VV^fHrlV-SOpeW&UqPw+$KW^2kv%cWJ&pE|)&QlRC zD6@aYEUjrjt_4^>AL*;-aD{W$^*i zyQ#o}Ib(bg3JOY!j>((HyQI9vAQ@^$ryd6rL5&pr@*QjEBuc9%mx-VdwdZ;sZHsOE zIYLU^QrIo5$y96__fb0z4y*EE6h+rS@6F-G)zCK%cJr~Fsl|i@g8&ngdtR}MoW9@( z&v31U^E5O}5{H#GlI{nk51^-!7mt8onvs!lU$Cci4>O7YP$iFsEbM|cwLLYhavsMc zi5k#W>{CQUMb3iqHEpTBua4gDZq_(>GwqYTFd^!<8Z15$#Y}`1%YqaC`2_cC2B#gC z>$CKBSq~_nIzv1n*%hp4p#>lH@VaboXL_%T=;Y)bNTlLF&*9C_MF~WKjU0H^l|(hD z8JPF03=H0PqaS{yr8?`&`+Lf3*FQK#QV~B7wY=viY7WDi4xYVFNhVwK8+WA9+HPF% zemFT@MGU#Xql$XBu3CQc5@pErU3uFj3txE15?efx)IF#DFxfq2y;I*Br2{L9?JKC~ zGG7aFw`{W)SYKD5LIbQ;^LIY`SZ;e2@C;55bTZN}$cPaHx2Gfln>|bRxgGvV3z*}9J4nVLY5W)VYyFY!rw4AhZB>jr3 zg?PB15E5$&wS0C=U6DMxx}hC<;jtW)gtp?3i0;DK>)VeO3I(v%U73AC!}Dp_9v|PD z!-%0$;-P~aM1(j!`!f{^h%TrtmWekYGi1nQ*-E*GK2iYhS5@n82Cxr;46Z&6+@!1u zX&u@LA;r%U!bjl&xteV>UAsbQTGRHb9UZNeS+ai07MLSHzeezj9h{Cs1Hot{9Zma9 zB<%rc;~RG>XM16Mv?|JAlnSxA4d+_(0UB3GhMPR^zk+uy!v+6AKZF|{nRxgEh??aS zpP#XCQFSQz7D}s!aOIKn=<}lLl6$QwotmmxL-~Fjk%U{d5d2!lT3lOFh{vPq+Hf)) zVJmjT!g6@J(*0tpY2MtQ_S?6i?N}A`!3@#M9DP6wveUQ#|G)+%Z__z(wc*X+!yx`W*ih3yp z?W+M7;j{DxcSBn#t$1mqns%QXxqn7;xb(tK*S<{Xm*JBG^)~{|M_)jsDz%OI6*pLm z1VE`*w92mcwn)qJ1ubh-Wo$G<0!_(J{0Rm#G&lnF6p3xgLP#DyEv=)(B5(#cO*4gl z0=rr4o*1w{EE1^2`xwXxsrWGqdoe#rE~}3Lh^xq#5)v?vZ{iP@{BFn&X-e>#l-mt} z!u(v>&SiM!7mj)M;@Y)SbP;MwX|ISOe9BSJA6%}!W=f2Quz*udKCZk110V}H6=07) zK%gAO^V{q5Dy(PE>QNT>lCJ|QpOX{N^{785-+!Ib&*IVh=3#)KS!+WlxdD%>0L&CM zJL_D8EJz`hQhsxvsFSv5j9jScam9@k$HGNgsDB>48wbyOZfqd2mN_ibc{c5i?1(^~ z_qOVKG`*&V|2I>s7I26BwJM&E7}y4GAOe;soev@T3^AEsI-fU(zKKhwHLkMt1v-X1zCapHtt!CxbcnxQHti&qgj}1| zhBI_c`2t-o0cv3{_o|$R=BL*TD{}uw7ay(mIb&CVJm(2zxm`{4)jC-0O*g;ai1BU~ zVF4fb0h~ciJkjO#qQK!~c#ytq^72ab6t7+#QIj7rc?Ceq^M2nzdsSqbHXinI%(HI3 ze7r0uroV=Nc&k(={(x+#*GPMjzff-Z+zx6GD;Ly@?WQc|q8kYUc=UstMt=Usc3ibM zzAPzI=CV}C*;UegA!N}RxglU2>c^;#*~9E=6_wP0mpB9j=6h2W=3Yi>Hh_P8LArWB zRI!{=%#7uE;)m(V6wAn;e>O%$dZJ#mXB_HEz)wM3)Uc-KfbMb`(+2(qch`q4DQ04b zwYU4-Psr3({n_wSu*Vi0oQY*+VIRN4T=;VAijaMRQQ7nG-Y!mM&p(1?Lw>yike5?b z{2dDr!!V&X7sMvY26gF(uKWNGrn?T~qc~)M*y0pbi~gQ61M28Do_>25-`?5D*3FCK z3x+g<@fFB$QJR%&Znu1vFVxPkPX=Z)y;J3_%6REOPqLZN8=3w(=3MEIO_&c8Hq$iI z1ae-0N?DSTngPHA_4R{arYH!7#wk<}v@UQ-esW?{q24qKhj?^ju>Pa#!}Vq2K)H4JLD9T?#{L{=sKL!sd2G%l{Er|yp(tVzpxHTPhBU{(g@6&|1!*MXaMS3X*AJ1R7J6TC!9z-zS=y>9dY&Nf8dKcJ zIux=(auVM+G+yzje*T4Fwy&kOnc4qLAhw_OA+W85LWdCH4KE7@0!Y~ExD z#{6|TUUnzLT8VtgyySdl1NhKXAsrBT#ml{y3XULA*-871!vF?ZQ&h*k~{O4$5o{VlSPx0BY_U=4KN7w2zT=LjBZzur6%~b8^<|YAijP_j}3O0fFf1psKrg$X39HuIs z-qv3Fj#)=|Re)^>3%8n%iucy(-;R=Pg66xxyLW?vKmkpKJDP5+9TDZyU}?F_}%5>n#x9%lhkO124H@@_m+XTHfU#0S`}QGvq0{Z z7CslQb3?IzDiE!Q%ZNH%;+uB0+$o3{;!_$nc1h-i(wL9f>kwoT- zv9KH2?B*L;PE(Q|KD42)#NhR4RVG}HbXwVR%1?oT%IcexAC(Uz3lNc{nZ<-plLtJA zB1nENSWsKeR}f{MOZRDk-WY+_z}{ZjZQef)WI3Yf{uFNb%J)P1uDoIUA77{N=VX=q zT^X~!!`7qs6-*X$p@_ENy9+DQ?+Lj?cWBU!k zdh;$~eKd-Ti;w#c#s7p?KJOnFfK9B`ed}TPfgAGFUcDOC7LmbkVVRx*BIQ;$CvS8v zLEWQzY4Z~{Lmd|?ISb^IibY-S0u0>Fj6ZmP5FD^vNhD6CAaS4k0-DA>+u$5|JOAQ@ ziYCCZt3n?3lI>* zphH4p>26pgC8fK&yX%|X#rOBVe|+;N7uU?}Jm)#*KKHrLd2S1!_9UkM6=dTO453yp zE*ksw?K5c9|xtxtg3z2By}OJ=l@*mYkD$+bHz)Ly@<+^MOrj*96%*n6<~ zKHU_eVc=MP-EVEeI|*Wl`XIdbIo_frWf6qU@1W~U8!}KXN{KesiklRTba}(N!M=uL z&&8#x^dFg+>)W+WDZ@mtmjnwng&4#GkS|<$>WNh$S50IDIl2kwB!&u zG*_k0zPS$FqN?}w13WO1pRj6&N{LcU#Jl&2(Pz)JV+Zk{7?ICt^eeKjDnmtZrdoG) z`P$yMR1ecc#`tacyByzG;F41Fcp;}(>AToDzR!T_6iX+|lYaJWA}l)kB*Cvt6Vw%S zgqxh_fv2n8-A_deym)O~LOuGvE2pcTk=8|o-{}%IRn*Rv_~voSHk4nGHr@RPXksN* z^{Fx0HXjQ+q~G}SqLES>djgm2Ig}}JuRW@t+w*{eSHcPzN0OdNvfR2A1f;-M#`^mD zx>jfJhJ}TRL$-v;jzOQH1D;e+R4BHACNm;(-3iFmCAVG|1CG&oAKXvq1FBpZ|6)H(zw??!{^6-QXc%mfqAP5A1=4r-?A=xr? z+6w}6l{T)1+aNb#pK+d+P5H0v4$~m2ump%3ATf&HQO@$na(AJ_H}kX^l@}(-{Q!FU z!gJvnrXfH0BdKP73YE{KuCL>VBwu#gBExH4jv;7>J`WII^R~7QPi%*#Y+z^@r|>SF zRZ0phQ6K*d5W)TFO?gfX3?;$+rRD@+M(`D~umRw8gmr@}8*DYR>;MZUPDM@4si36f z%8TGZ`ReXF`kn7SD5jdrlM$3Qbj1!$PP(tW8d{?~XO~O`gbKV&YtoZOr^jhxmm9KA z9hoOA#XzayEzoG&IxlMK-l6vca}wo1$ofRJCo(M9K|hm+Ju%ZOsnCxC)GD-dKG@ct zA4tWepaL)0;5sJ#DeSHjD^u+&1QyWt)n_*$cI#Jdp$;J^Tlt`ITn{m-fFE#(PmV!@ zgxO$!!*l@* zui$ye)Lqacmk0abbg9q~X4~Fd0rh18T z?+r%wowBFD+thbg+|HPA7E%)@b2iDQ9_;gdkb#9ljsJj5OxMo|R|%wMfF-HWs-G9B zJ*7u5+PO&XF0fqJDG?d?0Us$@8<7M;(pR349gi$Kop|Y7Q6RDPVb@`QRY=~n@D^f~ zW$dV*{u32lw7Mmt1TqY}+(TSsUlsuUQjw){e!BOCe93Ly-Zg##SYgoA(estRV`Deg z+mQNrDXGglUZ}!(K){V?qvdF>Hs=L0%$*dB!T3qZUFL!pV@nyXZtX!#h1Vqm?)ZOg<`*k(jtA9gDoU;Y`LKLm zsD2HJg0=&)vWjr7p}?8br%ab?=w7#^lb5XVsxc$1o7|Ci-%-EJJ6w0)-nJ2!&MYQv zhPxPQhT@bG`rMSTlpvdPN$lEKFXM0fw51~BO%z7ZZxY@SF7W8qtVVqbYBN`e*x{hH z3cO{YGnxFLpM_Ub#P05M(SB{U*vob6E)&v;mF-`{V*vDVVVMLWvu49ue|;DEuqvu; zERZElRq_`O4ilf1_aAH6p%%Ce&kP-3&9 zDp+N77y+yvYh8`inu<=sMRYUOevU6-wH`2P8B-IJ$J!3)o00#!SzP3P1Z84}b$sS* zno{eIYj{PU=|JG$B!HeI>>i*^0z3>-?`kNZpvfwO;~T=kJg|qhc)wl0dl=$79E=s=6Xle+hY@X7GHX%s$71cdO?WXQf0ZcT*!4WX~aXt>ZUz!vNY8H2PF;+v4Xzlfm z_{TpIph%7u3W-fz{gHQO2!u5($$I)Z5}sYgjgr28 zHD?4o$KL8m{QI}qUNLPjgBf+tKCXW+>g6DC(~t6|n3Plk&fl~^4k}nEJ8yi9xZ~L~ zF#a+n*6IyEQ?L|~V!$QkfG@eY@gsNiU_3jGg?nWc4a)W+TUo~z5PT62l3WSw5p~uZ;@i!8d6TTNyFK7%j?nH({BJqB@7yipr1?|@} zl504+-dZHFaoK6gdz@_hJx9;PDQ>)zheA&2ufeptOKoY5H9914=Eqlw-5-lSr!8dS zQklGDvRi9E-ZKeNa`^*aEO$buH)6BP*j(w}RoNo#^B-EMd5#jB^)2OJ(UkqyL#t9# z#ju$GGc&I_&A)e^C2|CXh6>Madhs%Y#Yu1*F;I%g#A6i2WKbm?7#o0D1xQQHukNS- z6ORdJ8x4eA=6K}|k!H#QC-?`(s-jEZ9KU!wfl(K9f9TM~%d2X1GRlJGKUvC6iPdoF zk7Y*cLO$Wu*x6lkp4Dn^ACkJ)t7#k!{PjMKmP$m=+UkVPqDs4^ufutXCB%V2%s1Ew z@YGRac`z73mj*iuvSI+H`}da^^}M#FpLl;nyVsKl+qp~A?ILsOi%w;gx{x2DjoC^P zTQH1+kY*A?yAtx!%@N|>)6@ly055>aK+1F>jVK}#^_5rNcVWn?s;Ux@xl2N2`i&(@ zN5|W_f{lUutgO+5Oo<%tP$`-6xE-?k_~on{w&B_ydGsmwLLu>p`M-9yFv4NBL{xYy zh(5+{{7-!ihd2;+n_NTaF^{8O{cV)zNjh0529S->T)^e4el50G4h*}Sh+?Qtp-CH+ z8Awdr1-ktV8Vb;h)hEz?(iZrash4L0FN_wW$p7~>gc&4-+j3olTy2KK=eEX(IArQ1 z6JJpu(P@o@bo%P~he6O<3jOCAZbzQy{8n$Sw|SsEv~mZ?f|reN`~q5o7`34LhXw`) z3E+9XV}wk_6{}Knw(uL-aBo~f8qy+zdK|_C5wr!?oEbcyfkJ*AIXjZ8Q1q-c>j2ow zj(Qp{gJnP8mESXsX^d!rK;`KgeWEDPBfAeOktBruR+GGEfZA@C`in>WHPMnx`1skkLs1v={ z#001~Hi^5VT=a|ZF_5Wn+%j3O_%et575a$$dm8g2JkoXE+usw+_1BkGbaPdhv{WNT zK}f+|>6-8+4}tOqbNpbDNWS+b4g%1JL~6un-b^(&brWHjvf@r5zk<_5&H48e6Mjej zddG|*JMV%@fvb!bKJ4SGUYe@hV*c0o(GGh%3Zit_f1z|83)H^*+ybI>TU+}p*wj3F zU4#F}`B~?((}J26DH+H&2stg;IV^U@c^v$DRFsvOhk7|x(dHSG!;CwQOwTCnbm!|I zf|_W=yW`$_sTi<&ac)cYy+gLqbo0+7RPJL%SzG^w;VbrT!*26-P(L#^K3YS&kcd>U z;Lg$m&uX#HD|rtp^&51jcc~@|P`lQG^ciEoGpNWdq^G({fG-RBwIhu*soRXiaOm!q zu#5Gcg@8dt$%QpXKxOLuX_zYZ^%q^Sn)HQcO3IS+XoS}EXA~60NjquvyZi-f-XSdF zHMTB$@4li9F1t+LyKbXN6?l>)fHBqowFmaA>)d9I+t+MY`ab}pof%A7zt;^bj@4KS z%WuX+M@Y;`l4&|jhS2NrX&a*7cMa?W0F@q``jKbl9^F@!EkIXE~N5P>70K zQFSH-(pQSW)QXyJ?-Pd#H#c`JWf(QYEiM}KCs+-go0}WFasLK#*>sp7#uL9y-m4me z?F}Ibf)9o#qd3&^j7*g5SIIHFe}V}Ape{;rtU{c6#(Nck6lV8F_?ejbPTHBHfNS~# zBxZvaCnYB*x63?#%1>E+SVXX;<*( z0|=hzK0>5Xg|&wWpy(l%_{I(ks5f|A`rALC^}D|M_PFcDi{`2JjyH}c-*e@7u-&q6 zGwHj_f4t*<#d;)-&@#<~jWN8sP;wx$->JKhGc9fwW*&WBd%O^nB_#Jkx3Qr?1pDXb z4pUEq^^xM!%oQH++_MMpij*}wGq5MvY=2)IRlc?0D!eFQdEBxWOx+?6O#c{_=4SF) zXz)G0r?Xz{l68&Eo?09u%pA1%HE_BXk+-XFsDx`qX&XC4>=n9_fqAKm-dY56g}}SQ z)3;+LnrbYtPF|W_^0tB|>*0c5t(?;tJ^=xJDUqPLSCUEC#*Q!5oK`rmmVH19Gs6=8 zziJJ|6K2EgE2w97Sa$DlEN0xnZom{I?Yjm|{Fw?`ohtR{qhn4b>u+DBV4B5p`cSZr zo$A}%)a269(NV1=dtQr-eT304+xr$r=W5ZXCMFbT%dC>a&RXUxVH54HbU^hX zJa*eBOcsuD?V(Oi%7weTmJZM^c#bIk3zaUBBq;vPbSw4!xvGsb7ZM^`LU^*FfQ}S(7&= z04j`kA6)t7+Me}jhf@;T!LgXQz^!jGRl2tjickeEBBSHK?d{1#ROpUe4moz1_A~G- zG~OEs1p#65+sD<16PA0cGRP3A1J_Pv&#&ZG075Y=MZ(Rdd6X184_rC)u2R1I%%IT5 z@gJu;e}9fWe(dV5Q{IZPRi1wL``la=UGj=~SrHmd3+`52^FaD0e!^SY(D96n4Bpo# zaI>y>Yr^^^J(r`;y~}erexD_*tgK{!7)TM$7u)EChn9mmu zN2RMf4B|J%yxvcf*`y=+>xk;J-@VsIs-gl7j)YsK*|s%~?wchXAE=L74cd<1cQv!E z`(d_ItxG<1A!IG=^`WvOZ<^s6+(OS4d?a|e{m!)^e>KUU;c_htsq|G-I|GYP*Ldl< zgoP_p)N^%h;VYZaeP2T(qqK1ApNc+QE^9;j;5!+7oM~RG;P3%pH=dD=otW!{B4=Xs zsji8;r8K%m3DO@jhef%H z?3dP-T9s8CwKcgVPwz5!GZ|w(mB14=j+>7?J;Wuy@znJ0wPD!iVntcxF8g6Q$ywcp zQ;{x5#3qmB=nco+x6w<#u;~=f7bXSMLhrXaw~rN3DW{6hxp5OZ6Dy2QELLpKi#7$H zcMUU)pB%ZMzSPPimbh0uc$xq=;cUUw$`?3zKD~E;Ygq!|h9NNt%AGDq5z)z=-(Oqz zq&&|DtDRG?Zff@zPQ51)bIZB4;cT%vF$xYlB15st6>MNQk+ThfhAk6KmIG6(RkqfH z!L;1E!Z}z|SX=BcVaT3H6{M*W!qEP5fQHw7K0qXYn4NRXf3 zRa$sn?%`u_CUInRbaW_0o7U=NA3Uf%&Ad!f54oq)rN=gYD9Z}iRl@gam=<~0sS$Ks zp9y>}dNZWy?M}4-W6S`{=_5?wF2<3JW891joxNIX8RXQpi?%p_>uWb1{+Fq20=k#d z19*8qA2Cm#6NcW~>$#Fwa8Nj4$$(DQG1r6ET; zlG~C}pc>B*8(l7!G4JGzxZN<+o^hSC@TaWck#i}xC=h1ibM0(rxS0X3)+@<69+xZa zhvRj~847zz^q>y*KKHgIbIq+6}tafCWcD9y+X+Avb5HqIYKYV zWmPQzZw7~0YO;;9`GLCbwfgBd-&u4q^6nfjmx_McKV_(Kl6&3+{pD_dez<9IU`lkx zcWNqwxU^tmUFrDr@uR2E(lBy`0s=;KT0p3yiX(oZKi3kL4~}N3{hj;XwqbRjn1o76 zzi_yuR5HE~_&mGXU8OvMmRod>Ta!;SkpUrz)>FB7ueL7h$Xvf6ib)dP&z&-Oa zp*CmZ+;h;!&tTQz&fWIJ1z7qd*9CtoVO7%Vp!ee^#VW-2(Is6ArDy5HWXF$=xI0(( z6|EIslDXeL;?~zx>r^(8efY?{=QbV8Rds(szt_LgWxc|>F_7}i;0O3im+n`Eg-!dj zRNBYj)x7$#y~|K(n|_*q8t!VhjR{OhCZCt^)f_UYiSPX-YYc6&;InP2O;cY&HX3ZeKr@1TI2$K-ZQ9op=u<9Sa(26;9nr|Q00UE6CicQEso_+ZYMt6jdM z7x#q$3{~CS9p^o(-b@EX_+HF@XCjVGqGYwyrO9@{BUyCx2HF8z?bUU;7D?ip~7U_!OF^{cBwO4X&xGQ%sy>-n1@e5kg3Bl z7zA9zEa1NG)zJcP5)fl{0pd1%Ml-?e4ZwgQ~TR>C+;icm&N zr*U@ZI6e%;N+#hwG84_4-KH)$5f{H_m`ynrDf zg2@EFT{dNy12h}=3*MAAD30fg&x98`I668CpIyTP^l6&zLaqA~N&`Mj@F1mQO9G2N z%ll$fRw}{Kn~P?qrq5mr263?Z01_Vc{_uiFYY*?gafY?}UXV|SdXkP8-UFs$&3jAE zz~er3N+~Fz&tlP;o>MS>Ikwt+0**3-dFiMgd6@8PnnGPEhK@gf+>>=4q3qE@W&>NU z>t$Ok@s#fU8L9b_cFn`8!G8CT`NCxnAGWIJNL_qWDtXW%om&(5Ew?Oby5J_ld_595 z-~+6;my)|+;{g;D6n#J$4=?Y&HJQ7-)HBQgYttn~fX$k3R4!93dt``v8AX#6e?D!@ zQl;5Re`;fXCaNL5h__XPF+EARBE(I^SXCJ^^r@tAg(QK__xsftV`on?0w$uJogFdE zt>LM<_sQhsW$hixOXb^@$wxw<+@Vd39UOr|pn7*X16LsWhYa|O3W(;9x# zpRHp>PK0hi4RLS&eaD0G z@f1QLitUtLbH?om_a?^606VFq170eV>W;UX9PiawP&dZTh<4jE~($s*k8np zY!^^qPHLP4O;0$D1>|O^eC9WO@VC;w5*Yp2@@~9_X}7!b&{@Z?BgoM#ZRmVpJ;Lfx z%wsrp^3WMdQAaffcIufWO#4Sgk=Db8tOQOI{kIhIn0j6<$|p=5y@FJY)F>f)kw8>) zE^8UGPJ@h~_0vnX(WdeQev(psv)gm@3hz+=kclCjTvIYj$n;y!;c>O@psAjYVMykqWN9V*5NAZ^<#JpWddc9~9g zk3>^2tx@T)m9N#Sv!UB8Ch!Vrsj9GdnHERt=xE3iS>k5z#Ob?coIde+WzO;u&%Kih zp|o&^&JIN$edE{~&(U=wK8l9VAlBnHJ&G$^p;ul_!o0w~)~(!@%X&ZEyl>wUxCe?SZZUQV7j40;(eM*~VkGFm@O*8Sebr*yt=VT(;z$cgPcGN%WJnAg25bQR$2@a-u&N>K zjE@wDeLWCAjnacWMR&WU0cXtKwjFz)`P4i|c965bc#~eUJ-fduZatg53bbFlxN%dv z+?x*uz`jnghILq9DPx_qLF`Qy2A_f~3k&h0^rS)tcuc#x9*$Xo^0;<7Jd&W!Oe0+6 zvVG07=BXV?dd}@$Dw*cP0J>aO+H;G8VEXE5I@;<);Mzn*-mZN8kUmcbyMK$;V76Xu zCcO&lwF?x^2dnPCvjOuXX1HxSH)?ZR@9(`^b6mvUN(_u0Em8tFr6#Un8DDhy3KgeY zJ`&OXJ;v{!KC~$-8(6*g`=Lp7F2{kstcl?5b{lPc4VXCJ=7GeJJ8OXg%(daM9fEcbFc$WI~^e5!c>a!W+H0e@#k_ya+uUP7;==u66HeKX&wh8hJcfi7! z;iYk<$zxHv;UwzPWLDGEcA(&rx<9Mo`}fJvi`$`Rmn-YZljt9MBY92-r}aryfz2A{jc ziAWKCO)pgW=PRjjS{7UFTA%YKMLBdKBH%ZEIR81Juh-+lWKgEm_gQ)bEz`N5WgbK=bGXy2IB;~Kguj>NH)#3z0`U--*qGTPCOa&M zbZe{9g+5}U@jTgB|Ee1vD%U#5B1CEc@t4iP(7XbMmeywTSIb}x8r6)Qz{ULGsg4Y} zNDq}J@`+As4z+t8jED<6&QIPiNo*oKXfQowT<^nfw|hGV1fCP8tyFhId~?I*C#PG# ziV%*K-sFA|NB?lYCL>RXO*N^oEW4G_z|t}&dEDlFV3FCCTLBB9B^*?2j1 zaG!^i-^ubp589K+_EwV~(?|?_NJ>%?zGsBqXDhPosLHdlR1|0Jv61qz4v$Va-i2}W z&J0iC<}sY$)%)J+lmx6jV#=|5UwD*qMuNb!l`Az1*siJA`UVYxu;;HGtkDf-kB(~! zqW6<>^DOfc@~tVtl;@9vns7@n1q6rY$d_gJ zdcKyv2EHbDO2N%{d7Q^bOgl1wCi#mOVwjV7=ob~@D0atg`I{*DO`-R@>}(CluU1=E zK#+Fl%(iiC+X2-GePXOBfl=$_(uAocEbQNq77=Sr`v@EEin%meSc0F-PchZn!z-JW z`{}WFW}tDVd5wpWxp@QmU-a@V4GknwGI2z#QUHe-W!Dj;fT%SeomI)L5+9pZ0;W`* zN67pli368CLea%`AzZ-={A!;K}l)Y#?x*6z!AXo~qkDe7OcjX8m% zfRdu;A3i*PlVp*Wpm5dhp>t~npERP)nHr`JX((n!Vw5}-4D3_r@OJ-$ZD=0oIUwr0 zyrLbA49(;;t{7$X5?ymAH?%9ZwX~JL`cD+&vM5aAgt^MsUKYpjS>4}^4ZgBM;cHsJ zb2+)n=TbhnKMgW7Zvb>aESGnHE0JOwE)K|#S=!ebs-~9}u-@aaanchAU z=5)L=BpZ-ValSZSlmQuUc0wv~c0lR&?c3~UAW5(SW@3s!HPrc;jm<`abc3vd0zE6J z+Z)4YQj}U)n49zJDGx=_GKpp5HuVmv!8}+>tieHB38mU6nw{sR5RDN^_fMnN0+^V+ zkZSUGm)Dv2IyW0lV({&q?Kw_VWkg=tBmiux&eI>hepM9z5{LXzAV^OGUDeXkQYIt? zi!))@O@#BqjZ8QdOdBZu_3M{6E6Xtaq1)bLZTv>?_w?iGrU8_-Bq-QYs(ySwbhbpHze0$@G(OY$`^EPZIhuv0dI1KXm`C)m z?ZjbW91)g3n`ei|IEInwm$KA`UNx`m!#H~Ev5a?-rhZw}EobA(#hV-+b7Zz=bKjSA zT|!Kj#})e@!1f?}e=S18Vg^`JKW2)~7#fD_L0`V?rM>b1-T4oVAyUxU_l&N*z2kX} z5`|iKV%-;_Ecva5^fB@vM-Tw5GZzZ_wG2Fp<|Ft*P?uDU`87N@QlNWn>9O%b>(J2$ z%)yKoIIw)+b}OO&(!eWimDu-%F4mtZk{DQguZMk{9n8IiC-0)NewL(JxiU(o{yIvg z?hdC-TrLTzlgIq7V4*a`Z#`dXZqB70HN=Z$h#q?AqNJBahxh~h9~Kh&6)+VW6K9HO z2?%P=hF>QE&WYEWOz3K*!Mz+?b0W(e__Lyqn*MyD;rDOF;b^pqG$2HLS`B7}@3S^3 zf9L@$X0Eg>ET}=DIsgJs_hjUb3UX^$gh_{r%yf7?I5i<7yxx5r#k0w_vE+I8a;=!b zN2Xm$*;}^ZC=nx|Kt9Fh!4stGPz{$15qY1&%_wz&$7K1`e%lPM=F?R-W}n*i6*D=| zbzs6KG4tem*ZPlcf}Vtz9)SUb2WZEB`&L+?oPdc)00*)G;U+|FZEd?wowGa@mlhu91644}6ofh2#`3I_n-iWWC?%W|$x~iG5SY&)*lQ1+i6wA!b zJ;Vqo8MYF~*wRhjphOZYS#TdAtD(Hca1+XamOm^G{_u)-vwVa%9=}m&7DqyY?(L5A zrvnm0^UCQ~t+CFVNjdFzI^*IDvF7;F2;G3BGzct_s&h1-c96o|Zu-z9OwAL8pxABA zmu1MI!e=7Lxf0+dwEaOF^6q`6;05s%E7|d6Y;0^>%w7j%%PVq-m4zSVpuEQ7QE)C! z7KCho?c5FX|3+VKAI$TxYdoAi^nY^va6*QQD=AmGj#7uPB$2DNP%;7f(F^s&{J#{CHz)Qpe0uPpmT`RP^fvhUz)M*MzY-(m&a+^e zZhlfc?PPe`rvUiM2{`<(*5`OW0=gcK9Ddw=4Y3Z+B0stym*ye}>`OhzID%xsT6d!g zHy*5|i~P$xfepY;TGI2CHxb9^(Ze3O!JkSU7qSMd%mwXO1vad#BY&04QA7+G*++*y zv?@ixyBwa1vx{IJJZCA=h0mpw~v zRkJgqGU(tunB;Bsx9q;w>y_ketSdsS>gcshlGQ+IwN{>jVOuQyO9JN7u>7G5RCA8t zNcVEH*|(td)&}FIuFE5g1>=A*%qd)=^?V;rj)^K_^@uqZlgUn5g9C!Cwb0?3hD+i!M2y+XthZ7)h9*gGd<3t+v|wp&niVYg>~PE+|G7N&jFoHFd7} z=1p{v4j7RODnY!ElM_~#vY`r_hDT#C<$T=s1_{cs4QF@^cw5Kbn2@`4gnNU(+PcUiuD18x1$1en^DY{1b(+N64+)+S}9D15fW=LEiKU%%853 zmGzIpDt=)tn;Z+&I;f;@=>~Waf*wh^JB>d6YN(8|Fn%SrnxWy01N7W}@fXrfIaxV! z>c+o0wn*E1x@Ofd3k7PIvOEvHMA-h&%}0VKsA7!Xd9#<)_6O?8c5#gq5zIlXJZQxGu7G6DR>aiK{Rt3SVw?UAYgx;BTg#FUafE!|!mGnT?+=w!2iM z$-g#tjMovxc?Z@AZGovbW%=obEg=pm5%cv>Wh|{D?3>_tPibB@?mP2`$+br;e-$5G z?PzDZ=}usn`pmn~fdC8n0#{IrygLmr60nn+2P@N`u)PUAV#c zf`|+#($2HjbI{@C7*`EIk}$72F1FrEm0-GQ5zX$?4P*zoVW7plWZn7fV^kV<>MEL_ z$3-LerLrsKZAVv#HA80=&5kw^Z7q0N&F$LLK?=Ijbqpg>ljT7qfoCX5Fh3)lq)xzij+ z6(rxWqRZa+g6uH|Y>l+hGVf1PJMH0yd8p@qWpen-{bih;>Y-$mtM<Z9*@fK4ZJZaTUm=`&`Jjup*WTvrO)H|OJ z=wsa*gg$c~XyY;MqqiRW$3I}70I)=bQ>Dp5dT;}krFcC|!n{I>Cb>Bm9nM;%0}R&S zY$epy49~;<0#@~g`M|m3+R%HL8h2Pi=fSwvpFxXULFZdawUN%L)h?q=?d|P&r-~o% z*_4J&F><{k8cRg112Z=cn@_6C+;)YuHNX15J#~@7SHFWerP>-HYHU1~`F3?GefKtt z6(prD&!FBkeWk6g?FG;XANktPbTKwI#z^lRj(ivTxv9E^^IU$b9p5OP4f6==tl#z( z5qsZY6N&Fmu^dc$FVwORfEse9Hag1v0T2+a5X)Vi60}4^u|xO;2TY>K0HwzkD+E7t z1Bz~omA0ck*`IY?+K(U3`7OO_1uI@W?!8ZC@#y z0+OZSEMO>ERJRGF$N}*l#uwhi^rhaA7W6FEfF(E5Wx_Azz?cjfnu9PDLmFG9!ZWuq?Jm3l5}naSlL3CUsCdEamnEjwM3-lAm@ojalN`o=bv6SyMCOXwA{K1xXJ zGd8MxYJg1Oohc5_vXt?SLhzfeg@{ziW9eyzS53t`ZzfPqM;LtQsjp@qHe0!^yn2tN z>7&e;B&DRwcVyHDIc2qnxZ$0#KqSXoMpuy|@2Rk+iK5SoC7YmenS>`#UL$#f{ z?yJ5EFP7X?>4I73pP{kvNPDH~-bvES_3cMYlG0soMkd{g{WFtjN~m%UhT^~Pfj-Bd zGX_oJk`)(%DO^35SONR0Ik1?LntFirI5lXGVyUEKDeAi`6jUl*^u$%MfA1+R)#~u$K|y7UT^~DECYAfB*iynD5__Qx<~C zMAh@fZSyAp;x@23zpyZoGmV2>75aPE$J;vd*{kW`D!`t(P5b{~EjyPAB;$24GU9qq zO|{SY z&rVRnczLC$QCs_u{OxPFIVvcu!9eR!rcp~xZL90gCg;Fy2Ldo=61*)fnkF`63YIGB zcxAFlEl3WaTbeq~Bzi%WY#SUKhR6m%b922P(djE_5TGiJp96mjx|*~RQA?!p8T`xl z3FC}t%A_DtGRFiEkzR)FILE?XLK<58?J_8ICWfvzZ)EnX!p9rdI3f3gZ{95%xy5nU z^caeb&AT3kE;W*o73+dH9TZ6n2DIpfqUt^kH%$nUPuU(Sv7O|fTII!7VRKzCH}VBX zH55BfG@T0*(?HXzMU0-slze+}F>EP%783a>>4X$Z+{#A&J1s&Q86(1Q(>BK$9vF*C zfgg~dIaluzs)g#b0B@aiKnbcekdBACjE|IS6T-DI_wAdJP1(VYB>gF|s)4t;-~a{H z`e?qQ^DZ$R z-K`m`Krrshks`^|han-GWc<3&4J^BdFw;y{@5}?kc0Y_1+xuK`6BP?=oR`Y@{Z@>5 z#)i+I|A&GLNVf!u@<(1rTLjSkn{5Txq5GTe?(Xw(F*k|_z{vt$Z_T6CF=ffgs9`)e z4mU@NGZ|slIuYQ}o84qR-)4*=Fa=c4h6-wNHgg`-QJZMxR}K(VGA|`8HIzBx%!Cu* zGI!c9t+tf|VwhYvCGG&XMdG}3Zj@BU{^`ts3uKhj-LROhqK~m(Ke@U3&f4UeU9n91 zjQ_PMf^?4Pm#ZWp4vwn$ zilD7#_%9FPhB6Fh3kuN{IJbogbI!xo?K}O0Qqn_DS3Lu&ED5l5t8=of94p2D9p>v? z2Kpx`rC=H6!2mBfOJ}t&Yw3+O#+OWZIg5iRET~clw4fwY5zL=v^^Ner7h^wMsMeao zoIibw<)#r%7jGh73H5dsqfpzZJN70~EDj2;T0ZNQx!4#bl4&Q0B9qkoJMKP%;f68x zc}rxJEQ}~x^GD>@ozreTFS0jX{{K8cCs=9gd6Rj2IYoQve#Q#HTZyUdP_dIYu9BlE z&%be?I%O+b*CHmIYXnw9qD?DsFv>EglbRNr1KxUTfrC}}@c-nCDld{S@s-gJbUo7x zXu|%I0`i_E({$CTw@by!bA(E^skA!MKeRlOocp{wm^(QXy@)DxfxmHs4dk7qE~pWN z;GhT{C*@pdrrJ6&Z+L}2C7aq!dpvefgsu4F%fp9HAbostJd#P0^lq&^mXeCF4* zX!F?085=P57A^6;5Ond`r(9uWGZb76a5BG5mhGfC1l%UbYsCTtuKWA@2@MSmR*)}X zaqB(cGf|!aZnN%uBxgXOFOO-bBKfv{nx7GC%I48t>%xNXDfve?;Hy>*xw_)^8Oqw9QG zAAI<4ShTAxNh_RUr%UY*d3tgXfZ-fKR@Jc(fa37o=(WvS=%X?5%G|6)PYy^q6{E?FqN=?FD6#ER>7+0^%7aiRPN6j8LboVu>Dts@vd?uC7Fhe0IM%T-Y^#$j6>YH(TMytG}< zhyk92S(fN;q}P9|V;nW70E}W4B%)&)l+^o<7dYUe7r`waZF(*PY+KzOLSXYE~FMG1c^d zJi5za!$P0t5WdA8Hyfw#v$lpB8+_=AOQ3NnCdTa@u#_T_T)5x-W#WY8Rtk}T8`dp8 zx^>LQ&TFgCf8&T_tjz7OfS|F+CkdTyt!Ex4DtWO3hz+L_L24PVv&1gGnCvXy$(l1T zD4;Ji&5Z|)1x4ITnh<7jJm~Y4x^epKnIEG>VIzrs z=Ku`c+auvccr#rhh4yWS)&y5ZD%E@oMVl+?D{-`M(9Jh1F-78F+HX)t#Dxo849hnE4I~#Sq9Y=jMhmJ`4Btw_jE7za6i=*`P@Retc~o!QiDg8oIWb8^exE zFB@W=Ud^WZ7W3Jn9Tkg^Pca;DnEpt80E$VHiR#M`1zEZ**Ev~ERh=^f+>lVRG%qi& zVzvkLE=dPldqK8@AS**6OhL;UVE%^snh2i0joj>Q(Q2!_2LtuM##`A!PtCYj#kgP% zE>it_7Pk>b&3&NLI>9HfkU>NP`1In%?@LeLVwa7w>ak zk5C#2AYeA~7^%eZB*1^YchgKU>fJYv@)Y}C4B#!50$QsM62wm%Fl1l99x*1<#AhnO z-o6fL&&tiMwI9ke7zB%36vax>NF=TXqO-i%2eVRp*YKWAwFG{|o+2j`i4feK_~IXs z@YwA6Q|qF!nFiQ0sc3FF_f_!sQT;wE2UaXGNGVx$yJs3>JoTKqfq(!q`p;y;!&~wR zA#s=Zh2MVQ;g}gujnVSlC1P zWW7DJqT>F@RyE$B#dG` z1zDv)EasGI@8blVtv51vkVgz8?!#SmbNu#QdR>&)u(sfXjKxRP;*~seLHM7P9@3i7 zKI*`!&e%SH5*ePOYibW$uk8uvjS?g9zIE~iRAKgdnRuC-OD7-bVF=J7>h939$d+#i zrD(g-gUaPT>rtFrLN~a*Pe6AY-IRrChl^HZBNsjvETMojRr3wMZS$?2b1?lGh4u$h zY$XM8tbmD<1z-lG!*g>tbu=`VEH@jLWkE6W3a$31UKV)8v1{$=I6R~SJoT;OtEZ1k zJci`^2s(<2mh=IB9v&Wx7&=Z+z$5%E?i-{XW9$7w(^XN@{!f!__M0|B^*unf_PYM` zK}w3av75*R*R3?1()<@z)5$-8GD=w5$Jr}FdI^i%0Xx8eMjcE1guN|#;wva`1y3cl zI0UJpc-8(x$ZaVZ89l72%aMmh_~xMK*b~TFLwVxUyq~+$#;E|o;6E8cxjj<8!o7BI z8uzEuAF^jLvYCghZq*GHc+tNq&oBteeAyU^iE%bil-0-|9!^!l)qe*N!`YI`%j@QE zDBA?8aHfcWX?$?(1nP2nM}X8deFs|#c)@%?Sc|-G+U~4=ahJD&)^5)n8Jx95c89z- zALNOs);ij_M5lA>SRH7ohMwvEP4nRFX+ugDBxb#x9p;XgFB2sgq$d8s5(T=Racq54 zyZt|QfEi?os{~AL zdF~{(YwKKg1)dAlUD7vlaW6&1g3HvOHEQAB1)AjFawnNTmsI68mJvi&i?fnwn(Cx~ zCgL-qGOkrWP>vxPZ2ph{F<7UE{<%_8)<|a9i-4TP0qpwm6Jk%H^)rYy(G160EVbB2 z=9~0?s@>d^<}>4Z$ny)CWXV1rf(*D^yys&hEjgnG@u+cXzp-@+cPZxcn1N?sS1j#@ zn{3evqG3k9aDYygw+)v)N<+KdclF8u(nqhAVyivbnni%}Byj#*#;+#|yet;(%*T^z?+@h4XpFU!C#*lES0~fMMzAB?TT96^31atPAKrLy?N-Ti7@G ztcFy{+_~JMA|fKxCvs>(`XdflsHvL6s4p=6^!5+FK=c7YUei0jGgr;K*+q?Uo>MYO zj}%~R(HyhE*N(Uf&V>JQpfAiAVXlPr8g}O=`*foxS27@wuY3M`-HI2iUFv~zZtLV~ z1B|0m%h?}1cyI|;_5}6<)7$0)$-~;-8#UA8b3Ed>cW?0eFpA-;z?5U3F#ag41XZ`8d8J7#SYXqmAu6Q?Uuol~ zpmwB_`xoX-KMG^fGlZtOGz5^T<6^v(1~x4ED2b-_NPAa+_CFmR=gz08FF`fe`qiySaaY67D9BvMCHRunSkIc9Id4hr=x_Ee|QEs7{1#OM;6_{^4|fjZu?I zahOi$Fa}w+w;oAARzXrVNZ7cb#5PadWwR!Og7|amK@u-zZIW_XZIo$;Sbq1%wO_v| z*UxYM+rQ&)Q-1x*#`Dpg+jgs2oACmFc!+Q>6=#S|&d=`aEToGna?MYjgkbgxrR752 zT`ov6crLX#fct#$rpFtK@ z-stQ$;YJTT(mJ@W@CBjd;$Gj7Gq7RVaVEB*K5N-Nq!p*M>I5wEZa8Y(ef8cyIzg}e z!K?KDcEIzRSE~~cA`LcqP?O=p7=ZRp1@Oj8L-Q`V!B2l*#7wVUmIcIT;^R$uI6N5` zTV&`MqB8fniur#dPq9V{?e!8?s%1IZKv4m zfDe(RXd+qVAY0ih8seBCdzS3&7@0?@6rqllEggIBeI!Z8I5<|etdl*C5y!YM#pn0E z|G)pa-+%SUdB3mgdR?#mdS0*VW)pP^v)sEkP!IQ8fNag&TLq(YHd*`M-ZZmi{~mhw znVUTIGwJs|$jqy_Ba<&exb?}~Eel8d~-+)lL` zoUpbkhTpmr-tdLy`9Ygnc0mIGe>5GIaI-8CDB<#K#qzOY6QD3_ON^P{{Wpdc#fo+z z#I>e%I$NU`0g3`6*KY}nf4>Q$Y@Wdj!@{aOVq#l_O;rHJ$(;WS?GhDX(fa8`Qd-5w zPLN;WdF0^bWMXNV;u1u_T zxg?p`31{KbW-?!T{ryAmP$K{jT_5rPUsXAKcs0b|CrrvCyt%{{$g9?)4QHtW-t7w-d0QIv-vM%nQiCj>BLMHUH)GhFx*)Sqs`iC zYDirA79707neq=V2$phxW88ldpypK%@g?Ho{{iK<6A3O&y7-^pXh4D|D zYM{!LnbRJhT&ENO*De%>3@LYD6EwRjW%n@)Xu&DRH=so(;$F@FOZzo^$apQRN%J8p zduQ#i6vnhIeJrKT@j#T)!KE?z=Reew{+wQYrZ%_U23B2tb89yZ-%Gx0n4BEp@{@A< z$iQ8$y!hpl18c;*o%8H>Cl?DCvv)7^DHfwL`Y#tu-PYqTQc-QW4Qm~h4bC&w$4Qlf zqglUSP9@c^OUvfQS+Ue)NaKFCHK+UbujmguvSF33aB_E(Ri>`ykXtPdzOW0H0T8d&>&l$Fg++Y$=6|yPJLSEhS(Q=# zE6CD`b9VZDprg7Md14Z{8bgD^rDo*yw8|CE)bJDZ1D*T&pW-JdJLR#MaJwotui{gLXPv3#RJ){AJGZR6g_xg3NYz8Vb&O=w(t@h(~ zj%gEz_1BRLV~BJ)3Xw(K=UJ~s&U|6HS`l)D+mK{>;X+}@9spno4AMQjyDh3891(H> zV{y@Cf4<{zUp@SVk8Im@TX6p1TXAmUby5iNFBCqNdORt)cSy5}6Luk;$64urvNvt- z9L|Q;4YyvLR~>6tJM-}^xOz5GL05l-$a3JD48J8r!ySC0Px4XDUAY`>jfbT#QliN; z=F7tJ44kd)3@M~N9`dBTafjTWfB7JrX{l^6udyRr8%jb-a_d$HtNC{!X>i__QtZ0K zb13J_75}{H39lp>zl!VmQ3XDT_QZ!9z5Mris%vH6A%MyhZEITqX($S(& z+4|I16(=EwPk_uDU9!5u&Hls7H%|cgW|2-XB_x2B@a2z-)8YjnUYm&Dnjd);&#GU$~| z?DEu8izX;WCEDd6B+$Y!_vt-$D`Zbr_1zOO{GH>tsyY3lydrj8sS=y>V+Z$iTvor| zU!eRqN~m4oscH|}y9bFVQzh;-zk^{3_{>TmBjgLobOUEP^|~(+G3a$UN@&&(zmV0b z?zC%YoP6(Yhg;^GG-C%GJtom;t1drtTcVYgTf!eSm%&lY3`fS{a1|v9lRePCgM9I) z6(ezNAg3eqT==>A4i(Ry=Zqcc&(g|>W%2*>*gfX~B}7h0TKMsx0!M}P%xqE6a<$jv zk*!jS^bN{q&kd)C+mY2UO#VX+@D{aW08nSKS3@p(${wp%L%|39Mc-BhYBY0|h+ISFm=LDos;O?jQVxZb@ zOfDrkBD=>pR&o6j5 zp{ejk2&S#A_FLQjXxp|OaGtf|B`6>e)AKufrK4E5`CfoYHX@ac`Kpiv`)B3vHzY>b zy0eg%*3Datv{Ua`5Zu;wrf)U1&+E1>@ZpEQwT6V?%X&=yE#y7@S=u`kkd!>HmA71D zo4(7`5$6RkBF}VfK(SwNl1$R-HYi7lT#z} zs81aFBc2i0&r|tMig_M5PcNC@Vor#*!CvL*)TQClQ?53gE^R7}uAW|0f8#?2tsG$emYO?UPTWQ|0;fbkg zn;Fmoj)z+fcb(WhS1Q6+EIi}Dy*`=-s0UVgdbuGX@Lr#x^zYHeJS8zFx_%2awzTL# zpPK(8koD!WNe~i<8G>HO%T;MhaqtG-Eg3cG=_Ho*6;=>iMLD^IuF^wFzBZBgCf_I< zIlzSUR@O{zpBK)wPr{m%Kg=pp+?7ux_Ml+%lAiknzN)HFw|{c}<#_>js( zK!NbhPbVOQ@trT}uy9uv8>zO<GOAbYrkH=fDTRvP0}kvJ)BUF&fiIfId; zt_)APi0Fu|l_=i?5%GhYYv3pM)qkVO#h()+LB__$+E^Z_YX%Lfn<{yaN$8qe%62ke zU>)>2J*AGV;$i0lcyAez1|JBd)aBE|8{$CXe~)ffJp9r6hFL^$=DQLDH)bw4F1f`1 z6LOMHWQ*O;46B;O#pfs0TBR2P?ppc#P(+@*$Z9!bVQD#|G{=L99bkjOVD;M_h<(s~ z5^>;FFES_Ff_XRolj*&#*9Umti(D( z`s?v^-BLQ~KdmEblyPsfx(cx-XhpiHwk{1rG2!xI9hiVm($1D2m(}Yi?zE#-;*iMV+G=k+O|Epu{73?jLy9m8PBmG+@!e#MR(S*xjkB)i zUMJ4hGj0*C_VxJ9xgD&-eLKD@dRTOZp9FU(TR$9-POSB>QgN|+q~D}18#@b)T_!Raa_fOUtC!*grx`hyO(I@PVmzG0 zx--yD;jjGt8wZ2#3Zz+n+qK8|^Q&`uX7Ts`uX4QmzsgbKx#7PZ{z8)9K=uaCU$*Iz zTyPO6_65`dkwi~E;`0eess5*jKL|qJG$QaV<h`}+>fqgi9Y@4J=inBKR{m@@q z+SIa$+mU#$P@Oz-2&3NJ4(aX&_uqA2rosm5+EGl%`1DL4*WtQ~+~0>pV=>)c>!S0+KapaGT$|7^=*-ev9P(faxf$occaZLFiwr2;RB-h zNT@Xi1*#>H;3APikG_3+OG^Qzxlf6d@0X{ir}sX)my<%Q9X_pgV-deI#QY-n$4mWZ zYKv|eyDM%-qyE#i!Uhj)^M!o)Wkfd0u5EAkfSXeeAGr`4UJ{%#4v!4W-Yb>InYP;p z!k4TD^_M3l@xx;5XQO%wMpt40!4V&SpM^jS)NWi_doruwyY(x1WZlKwk8fSal>$LL zW$KZEuPIR`-$5)mbAaUb}EeAWMi0+OOLO!fx4G2g#zn1tVx z$GP~(WDN{~t|^r>jWn{kj&E5>Aa6x1*QO$uK9p*#ZBSWBV#MaRRz}3IBU)o&pLD5R zx>jf`JQOnKf=B;I zZl+wbo}hZ&QS<#44Fw@B(p&wALdlPUUTB)BRCfkTc2XyUc3 z7EAb(!BZGel|TcV^yI2E!*gs2G_JpS9wzU(+auPW|0QNN0ebQUC-(ZU3n` zBZ*(#Q)=M%Ni`CzQ1?YA`|R!HsOLR)79P3&{9oJ-IJlw7(rbl8?fIO-T}DVj`1XwcG4D{4gslLuu|>*1biU z<(zijj;+0VAPnv5&w3yMerugCvz8S-syzC(e*RJspw*eHs(*C?A2)2=>}23R!48y7 zeX-*6KL^Hdj?|jVD)D;AKUEVTYFluD71-m?Z3|n-u)z=s*=RQ(aOCU-?b~yZPWw-s zCgS(d#GHgApPK6{{kKd9Y(%tWCG9L8GXL@YfHN#jPxX?{2pHxK}Lb3RxD8F+Q| zM=KELLdsWnlajl9GOdBM9P2s^8_ zW=5W>&0^7_c;v>-I^oa5$}&5xBA%m#PyPGh(R`0wcT;E7a6}O8I>RtS`q-umrKbND zYF2M2Nb!SZcN(iGOgG#{R5zLW9xSx5^PfE+p zkEk;+L-svw94~%&P>!{bjW)zxsKmV8J_Ww?b+Gz+8q$Bp%Ontk)Z;DZJq*@9#GeS* zGee?ox(h_*=*|-i9lOGi$jZQKE6cfeR!JJJ{rQ@UHXpWLQ)^En+0TZ#So*gS_AjsR zt+EA&jOo_C6a7aZ=l3>(hjEkF+t@vs=XSEu@$tkEGAs=wk53!t0fQkg4WNw=uq~R~ zxVjvv(L7UGzpW@;k3=$kLI=WjQ{8{9%>S1et`B8xuOvvj-FWD3^3@$>lu~3)EiFT+ zMH_=?)YVm0Wxf+?)hx@GLd8b)mj2Y2Ki`~)uAT~lURH}M?Z?o-2BodSqHA}H!)jI^ zz%&a&_%)R}lClRXHIR=ktHi}KQ_2>z%Pe+OOwByFP;~4D)mg9n&GNVu!yVh0uNnp{ z6A#*eHIULEREU87#J8nsLu9yTiAdbM2%lIp$w%W|nN=gF5)w4pl5HEtZsyG ziZzM~`9Mu5ItUZGPfr%=`ipEgC2@%q4b>P9GO6Wjjcf%^x5i6bZLdw&TwpcP)QpLK zd+Fau;+5|qutGqs8g?dQqW4%lxQp1jZic*K)O)^@&#-(~K@))=4lgMwId~rtq1Dr7 zQE}L6HCzNv4GBFJn(VC|Jm6-f6oJ~Im@~?q6&qX>?Q>Fl_wVCh8d`?NNJ_0hFeOyN z(vQvu9a-mJju53mOSAJrM2khc&Nly^Y7J8B>`eP;)KvABbDcMfO%TiIlvj7Xqz62L z^Tty=!^#d<~Z!`B+vV~V- zc+_wCDMpjH@Y8!_t0b7YdW8k-jIaug4bx= zpcAJ!{&g?MgD~W}2@u~`dvee+#s=aQenoG1K=@!!Frb zgr+Q}ND6Nh9P8&WjDF*pI@zmhI>LPVRlZ@R^RLIqlgg5kY;5KzRDWD?-xBHb-+dp+ zlO5ky1>AQ&mKQ9gJAJLrgK?v7 zx&8KB_55i*F3gxnctW4!aDuO1xT7u^>1h7K1HjIbmg~PO;SW9+_0EeqY{v`9$Cs%8 z)x%&EV%RaOE8G13tgyg8GjW@Ap^Nr!o z%ItCg*-!?f=S(H4mj&e=aZ4v#r6Yv2Ex6*5!PAYY>8{m4<>*7>?n zg-BUrF8}4Br7L?Fg#(+X11!qbs<>sSyFF@|113v(@`Mwk3w;IV$TYRf1JTmylX;fp zi9($$C|UJ8_~Fedrvv3q0W%!;O>y`#3-VPgC@^DQjy>dZ56Tk45sh)Oh6=pVSTHU1nSyvwiKTGtwa0Q5sQL zYx!%PHtIy-s=ju+)wOhzZii>6E`|CDPY<@ry_%5yC zKng|Ouw%w8s;rqkK=+iosBZGs}2C zSyg?M77A z?w^`XB~@tmJ_v=1=*Ltqi{QRE$*wGD#qbW@-bqEq`1qQ`ch^LxF*a0EeUDy~Qqk3_ z`qBIwKgI7l3GTFI+s7hT(1U9aKnj+!RQ(ek4qb{~FM>O|0>{8~6hLa9b@RUOQI%46 zvLC4H+S-$i8}Ja4QqW9CF(XOK+BINQ32+3>$-s{Gk2eE({GH_}Lz6wS+x8wM8Be27 z)yqIo8^Rdec}&Ka_;)8bN4PzO#TDAx3Y1`bWAEbTT>39fA-W8TjoJN?F-oDn;r4dnp!gZElA`^yQw4YwKi1@fLOyp&dGRIWebyK zI#Tg5;xt>jfNq`#o^N+p%~Xp+s}bR^&7PL4`t~)8I=2AA|L0t9RNiH&qunci&Qk~} zmB;t9%W@}_rVQ%3VxEXS?V|ITDi5V~GLsjy@PB~X+0UW9yt}nT?tC;bqx9jxKBQf5 z=f5@#ovzR(rxq|t$q9z{mSxvAd{b!S)rpAQ#jooLyKSVBQyGZq9lhvqp7I>T;q|M# zCe>p;*2#Q^2$xah_Vc0EwJ1ir%0t~Z{J5A4!!Nqp@`BvXK;*yo7)0bC3!WqQ3fzMq zWIO)Z+)1miEPT53DYSPhlbWMI?d|<$g>0Ur4uh)VZ0*1!pUzp1m4uY_mr5~3bG=|& zTj))A#P<_D#MH2G|nD;fq$$1DbM z`2Zn#FZij`5HnY~$c-PaLxMAPgnCZL)unlpszp4WKVH^e5yLpI*S&I$dW?{&A@C=o zN3p#?fQL)}r)|R#SBR&8?{rSwjWC^`3gSUn7bh#t@xg9#UVfmG)9=(1kSZZ*rT-jh z-gOdxisHo(DHg#!P?hoe@?{ZU;UoV8vIz>50kjvrchef5cCkow>%oknpzOIVqS+pN zxjN;B?jb==b3~!Or%u+qY!pbYce8P~`+h7edw?J*19vAg61m~BQ48Fh>@b}7SZU_1 zY-$U6hVtJ+Oz6GV*PMdzUveuEQ;L6F=0Nf6?_*5~m4gT?Tklc{`N4JLo~q%HnU9Lg z?l#j+&reK9yPpy>8e^OBI*%E>CA%5V6C6TUVLN{G?qJ#YJ~aRqU`x3to{~TA28d8M zlVA46MfM*^fpSq4ryoXM3X!p}j405n6~}fR)f6Gt3?MfYm)m**vHPHyAeCI}k;Tu8 z?d6(}X<9VBsA7?*7yNus=P{RG7Lv<9$e7O?@czU5kZA)F2lh43!%TtFotP*8i zPFH~rYLh=PdT`PYvHLeebyMYNh7>o!NSim-zfm>Y5VP4qk6;2j=DUg-<~QsV=>K2zT**o@*A4j;fKtOI`m>Cbg z3JQrmz`a72UgK!bFL$49RjN75g;93QMJqth8NHus{_Y7*jP-XMtTbBNH65j7AU=0V z$;97;#!5@1`H1gPs4X$WI3;1qskpCeZ^HQWQ;&4+JVOd`^kYR zE519NvZ1&`D9SPCbGn3x=J()R#^t}^ps1!jTy(Rel}23b!w&P&eogcUbUr?|dtfJmhl>&Ml zp|{;vgEd7We!ohCN6}{46e8LP+@$D(yR5YFg1Nc&@;N7u!Z--u%ZsdXQoYyKakI1p zgzwjx-hNXfWQ??#MUgaK?5FIE7taf{Y|%ZXmcJ?3JONdpR&`>W7~= zO{M#`i;7@4)$?3?2)A!VGC5xZI}D?@+Lfv5A8xh0p7#+i$%HLGL(95=nj=1sLHu|U zq=%FE*g2`SgDH_>ukj8k__AAQvlwIOe#a&0Wb`zT2(68Cu9Ha>es^{aB#o4mb<6*g z-p*j4>?r~s-k8do{MDF1@aL$4>nNytJ&wpTPCHEBTl>)vqE9Bua*6PT{@)IrhROwq z@?P@h(PyeKo=&I{;~?tj-;dK;bo*9(;VfT5nv=cBRnJ=ZCX4!hM98+c6qIO~~0+Q~@%&i6pmsis>oINXaD1grXIVX>~-+@fN z^LhD=z5zqJ9JG_a9us=FRzENpKexlat@KvZXsj{T&jweTBJ8E7(KV+NN_RBsApHea zxvNk916?ozrVIKNVmZ4mVsT5vSF=@&he}*b;-SfH_rKv) z4clf74PLHB-Kgl=Va5)SdU;D86}PnikAoP$fUzmpzD#PN&!2i`&Ta0YeCK`^A;)}Y zv-s{=!`&)xr=d$unGx&g1fSslc%V}l@Bl4socIPP$5&soWt(|5oj0iQ={Y+=7zI^l zvSYaY?H8&rwvKBI;RaYXRp%_j@s3;pJ3@8ps1hP1=3&uuvV&5&EA*<{V~kN^Nv<5G z$U4wG(LPY6<78S!(B;cbGXE)~pHg64%hSMvv(VJd1V_=nI z{4}O6>$|HHQW<~I0>n* zF(^duz8k$Kw!I_f&VfnVVJ1osHAn%I3ysSkj=K3a4r7x?>n8K^$FKfm;*<+8 zIF!k8-3+4=VSAb>h2it@o{xUNz5CzV#K#PIE_fPy3wB1Jz5l_3dWg!6dN8N9R%V66W=3o;j2#eYkS zKQ@?Id*k!W1-epaq5W9O3FGTmutK$wIn3Cu1zGpr;pJPPc7 zr}2NVUZ{WSp$@QSVZ-q|%p80!SXGz*EZ&KuiU35|&>2AifhuKm_Dt^Sjc*1JoaQPl zVLK~L$+Pi3`eUCjZpa*cd_3Sg<+)NG%i?!LQ$}96dG~dZdlaDZJI1qfSB86{Z|lvE zg%0$xtcyGhW0gmDlr@I1YA6Pz7+3BUWmzFEQ9tDivHo#w+7RsyJ688^#q4WPF{DL5 zUp}_5;4u&|I2unb^#i1VWHGKeiKR%IVb|~R&oEirNp54!gd7r{kZB3o(ZX9192x0p zs#lT8rd|I>Jp(GRWzGOsx#gv~Tx9oor#HB8?DKN=1!IHtS7Ag~)!pY}4{ z?eE*nB0|P`j@Inl$wu-b{Ws5S1@g7xY2nTcBb*zo{zH%A=H23d#bv|dWY63z@$Fr9 zf(S}neFWU|xV)M!y}WupgigSE&GG0%kVR_Ba|s4?YgEo4QEdAV}62~Nt#whd%L z1O(`7dnHC(eunXl1TDz>(L{(!mdujatQDrF_NtB?OLxlNb&?l#QAY9KDoZKN6Hz`; z8I7%LlMObp{}3^|>Dn+K?XkwHCqh2y>Dji2xCd?3<03O;oE7+QK6crt__&*+G|f*2 zIQKW3_|K2|R7x{Q?Mm^`+Ufn`-5CA9XiBd2G^i6f%T+#6$AmkC(Af>VyE6D^z$)9I zLd`@IDai2=h!0x$dP+vp$wyFa61dG*QdHXtYD$87T_#UIkt=3iFgQ8X? zC0dRrTF0!k8FG=;TIHeU2bB5z?LS?ar~S92_`s*jCgQH`3 zmXmxg<>dBs4GbVrr6zT5J%x`AZo+5!cj6~7&O|9g zz5lBM%gB6#iD2e)#D0k+6QUNH^`z-^o#(Gt?(P4q%YUvAq!j9epa>9M90WaMt>)RD1=q_De?(=xynM;gDY z-`03KRPL8#wx__tWnhwT7DSCi!A<nXdtrAk$-k2!8Zb3m5q7z=O(a9^48MK#0%Lyd*pwo!^zZ4h+XSH8 ziR|7-%l>i)coduR(Wn?`+VW)O6IdhrW%e8V$3#KDU|{`8=LFlyN9p?vj1{PUOn|K& zr5GTcapFL;2*TK)#yqnZU{`9&3Xto%unw3(Ve*sX`7wS2)}ac?&cr`^3f7D4>*?Db z7dzIDX7#`WKOSq4$u{8l-vJ&$0OEA?SbG8o=IHtV-5)qB>raS(H1gZ%l}YWgj*d;7 zN|?WHlZXlj9RUAy(8%rz4qmVuK1^!Ii#go}h-RU~By?K*fX>(!og{uA2zwhlU(s>Y z0da_xz;Akao_*Irm(po?eq@y3t27F+3tyLf7kRx z){D4UAtvm8Y_K7NlKEe3$wAS$K63r3!`kPTwow4pzJtpsGgf=Q-k_~(?5?EMe~OG0 z?5wH4cF`SNJ^S80%`B)X(#mq6!E7ZWrvSav89e}G^WWn@qie>l2MTAimYeZ|{YW`h z!KWZ&3^1Syp$t)r2|mV}oMT(2RIl#(HHTisi@8)eAWc@Jm#4)>pRv{ZH~#p*rVem- zBCrhDjwSSh*Iit1`yk_gU%$jDcR}D0acf{3eGs?<3i{rJb}=|qHQP_dy(?9oEx!0o z?4Af0SC%?R!OGNd%0g{s+G43bcl|yGGqfdISy)+#xoIDB9fU#{R4?3`F6+8|Sg#xG z54XZ5NZ6_Gkv{(tfqa6TO1L@_SvLA?GE}0VZgVjDnV;>vf2}c*A#!~&J@?r4lQUEx zg+50jk^GU7s6P0mF-0>y&fX9k{oVZIB{P0h41o4gy3<&eOPeTk5TbkMeSELK*xui& zA2Y!& zy)y7Vd;I&s;QM`X0X?6VJ}JlW_pVAx;^!(n-*lJ3ii?Yx--90T8zZqoR_IYA;lOG$ zwVQ{#Rn`F`ajb9`0nJ!^M`M{T)=^Ww7ya6n09PCIVu~)C8U{D>RNukfD=P?L-!tof z!UyHbT*7Y8@<|+9yOh0E!}W~rvuvOud%1?0n_CmwBt?$Y*%~MAhee-em6Gy7p}3GL zxYMv0z}5DSS=;lEh~+ov*DXue|MTQFnd;NAJ4>Otxw((ARsD7mM)T0KN#NWPat3=G#2p^tP$czA(tWrrB4lEU zH#!(>o?9BJi4n0H0ph9LW}l9F3cCtDi^X8LY_SQ)!!as?&3zAFl7V%B10M`?V&3b& z8`%?0h&!W%4p|nPxwu0jKEz2OHKBg9#C>^i3M?c}^62aZ1VV8g@X;ef`(4wr0=jpM z62;3&J55iDl6(4QA3C&$6@c3^r;0#5AhrzQ{!=R%kimF7ff#~%1T*v1p+g+xBF(LPxZS)q1#ipSW*r%pW3+iP8^o z_45^nXb?L~L_{Qi7EZ!b8{kEX?eeSA?e0B4yn%M@Z`HXf?^w5YiXP%UKnX?wTxq&t zh#%fVqA!OuojwG3*jrvb1OzbfVxZcJJ9pI7)NayeTo#wtwaAw|W>4r~$u2 zVN{KdQp=D4(GZ?O1MpjHAhyaBc3OGv#w-Q4$_Hw!7r(1Fmv9xpU?M8&&5wmOMP{5# zk;fS;0SkY}EVC2dWi33^rsjfmk1WL!Y7rS383!F90%$!ZCu$*LXsl`!%2|B3teP1J z&Q1I<%NBdS9P7iLmy5?F>zo z_)r?WStSg6Fcdi2t+TBlB{lNyu8sR1TQHd(pTKvvmhh>d|z3_N4a--KE$8rhr z3W6M4UdR*^>2Y=&^4{~5-2X=}WSF5S0*ag(UXZ^{PfvG+DWz#<37(06;H~n-TF7a% zHV_>9(!r4+pIXL4^G-FcG<{&cDmX}fXPooG+tq=^N8G)PuOB!62s=$LGt-fb(Bp`Z z7$wxguvLmU%dxG4s;3xa8Jmo#nQ1(@X6=ruYP=IT1FF>*5A`G{si^0nf7?km$6JwEF;=;RWx(pOIcugL5QuIu`-&{0@hRM%94E& zx_tRA@A0&J22(PdKh2wclEk_t#ME%W*!HV^6nxwy(hthT_6Va%vs{Bx>knH!TI#9~ z@ymN{s$wIh=7P=1o}*qA@)~aTm*ho~@cNhJ<4>PH&1_Qq6hjDPQa(o(B!v%~UzYrl z01sTeN~{_j9PIx%K$(P3{GA|m2LM5XCu^Lj8dpZxr0<(O`Y4Oo@6x!$&R%DT>#7qb z#-jvYJ$|-)o0(bA5*mS7{y1P&JcO-E`Sj`2UG+A?S?)9(Oz}de$m1kJt|Gn*Y^xn9V*bsCN zdZw{8Xy!bG_}vSixRtHKL8wQXaAu{(ScU@dh_aGWekG`h$NSixlf@&kRbGBZlhQzi zXx_WmD06S?RKSPxWY3oqYIxDi5`{q=Qtb=XJ3Bk-)ahejhCGSz5Pk zs-IA+&SzY`{#b*QDzMC~;l)e5SNO+)4Qv&SvZMs(F62F1a4I_zJ-GNa1*W-_k*yZB zj(>V<``3B;>wNIE!p_UkdnbKzy ze`KcTm9$j|Upk2&wm_<3C}mGB0@IyoZEwFDAG@cn_UA)%&&O{2R8;@c-jC;gJW)!j zQEoaFE1y+09XmB1TP8c%+0_V~dI5k5tJ2G~_~Eb2`7VR5!%li0F>WlX_GSn*6}9{KW=(1 z4FmsCd5v903^z&gAcXZ4wQ$Kn=s~o)^3D_BBg)giE@>2$E(Wc@xcBczMm(~%6eGLy z@HTGpt$ z>=Q8#AJglIiiku#OA>2sLyspI%DnNXlIf_q zZ4w<|$M}wY5y=d^TV8+lXN8hbJ~+0W=f;i9(~X6`n+pRL8kd-65{UVz8~HjLi>#+c zhqWjOK#_1{%}f4}*xCjfr_@|K&eA^g>u??mJTZ-|J9#5xR>*EP54 zFuM0>sPh|D3VH)=Ba@YqV%DG-ewN+=U=uEbBazC{y!y#C2mmDffU<)6@y4p4pIDkk zOf}hfkNgOwr#Jo{deyTE?pTgeNQ8^U4@9xaaF|7AMmHJRZHcXUmEU>BURe)T|e#Hi2k zo77gS;#&St(F0Jq;idr0YTa$jp<<+56&H$6M(i8Ux_OtOl!W3DpdFllZqVRTKM_6F z*(`!>o}Zg5|CYSIk$PjN6g5?NTilHP<3Ka8*jWVkUwEK@498vj&cEqz^^)FaP^mX{ z#nwrpzgKm&p`{onDP99)7gq!(H&)mN*RtR(cIRBJGOqHD8$4o}h*`3Oe=A_JgZhb{ zdZCI$^I@QV4{(lY6Mkbf(5Os;*Y@J;*RP$HU6I)S+zy}*vn)M6p-vbW8jd}HytwoB zz-4~CWO0S{Y*4Df>XCZ?C_wE z?}TLRKwAR-o~elIa^(8xACLMnujfUXpFaJXsau>JhIb@>RD`0>Io&R{XpQdJfS-CF z<5)Ev9SX!t%;lL$Pgj>qCJKQsr)*pa+S@3BR9*$Yv<v?#2YgzH#FUM+#OEukxtb}@&RKbSdWUll0mi!KJdvuC{ z!dy*5L&KqVCZcU&?$5!x3GnsR?ilT4cS?9};L?;?7?2I5Uf1`DJchw8cY*EQ67}(B zx(^|RuvvqED+x9Cj4*wknOcxrB}salYV|8tKpc-2Jyal9@xzT0@to^@*fzD60i&C> zpuGz}et2jyUPCew%~pc|?~jtx89jV#DeC(9#AYJ6?cHktDT@@9*I4(J4O$4DI(vFmVLRQYXej7i4vmdBD1y81yAYlOW=a3Rd{J=l<3Qf3B$dn^rmwLkQ|Ku_=Rf;H0>>(||8l83EtL=Sd$77oR$pD42J%@$%;)x_J;f;GWi zN2UFMCUyr>AY-CC9-8$i+qpMeTjLzrfoKVPUS8gTPcxGzI1pg!8(Jbby4wlx>_4S< z!%684K?|d?gtKyO3mr0L1AsM)v$L}c6yw-uc?kH9gL$xJp87!<`T0x0Mus=Vd%k-7 z2SRcR^6tGd=w$d4c<8mUAl5z4d_gev(D?yYj|$dg>0wU)x}IhBCdp?F`q#04?(T|# zZ1cL}IWo_W1GX?Ue2E@r)kJk_G*J=y;sdjgph1)SXvVjAfu7!8V+YF^ce@#wBu2th z)5~jH9;i(zAAt3~`oOI6%lpi{yu?MX(dM3Qj_zmp;XBAMp%P7)s^#V@!7~K|5omB_ zli?#1lTr6jb4%cC@p^0T?!5vQTvdpuSwWP6H3L6NfS(^Ne(FWlV|w&YErnGPtUEFo z=tmJ@;bDp0MvCvz&J z(`Rt2(q+=00dY&$(xVq_r!MvE`18jepv`&|tYtq;R+3uQpv_+6l6>m_;UB_fDm@OPSF^?Hdezf@mf4gAX2OLf+*1^3+ z@^{oxBiCR3xo5_Nq!ktxPH-7=sBqB2USxn2(g0+lUsK!YRj2*3)YOR_HfgBYeeyfb zZ({j^#blXZ|C%{uq3ou#OZj3YS`)_Y$fW2g<+$^RmX!>kAxFSLfl=ZF6**+&4?3Cn zx|a;Lh#WOAH9auH?q~2N$;I}{k7GyF9jPu5Z#>Y zk$lZ2E_Q^8tRWdU>o$^CF}l-YCVBS7cq@|st=MwBxXZ+J<1KG9dSHGp(_M0_GnTxg z`CVcwOz_My#%6Q<1v%AzK~d4F7;=U3j2YW zaB_MoBxWk3ec|5f%sp^bT=IO5-#M}psIkE8)HB^p$xK#%J|5(H31G`55Ny;T0Cx-A zJV6H8ECT;Ui68EtY*)DO_FGMU)l6K^DHgJa7svN=|EIQA-gk7TdxP3Flu_Fmt&^ttc<;QP~kuDY%wz1DL)p8HlL zKKCv0yHXNLozKRvhayRgNyR1`=a$+-XMh5D)^IcM&Xkr3MxZWf;7v(sDFL8B0=RJz zfyM%CsY*1@*6V7z*YDlC=ZYcmo1kJ4z>3Op=h6*lrRuECF9Gor%B1k+TkocS;@s@7 zU-rr;E_*jSk#ZqR20QC6DS+%faB~?m06JImEk@Sf~zB7&4Cp|uo2QFSPnu&jQ zEJ(bXcom_@6hkwhGqdXeg7n5yp>`yl_D@7?xjdF?Y~uWAe5!EiV+e~F!4L3=Q!_r$yYnV7(Tqew z{8kRgy+dsgdxX(?!Ep8Ldi7eJDaPHJ6c{_w?mZ}YQgXWXWZ|S4=!h|)mYg^>13vBs zUc6M z{NJU*(Z|TROV$xl2u8((7h>4{Fm7DElYUu0ueO5*nl~y=O+pK&UdixPugaZc%<++? zoo4557-K9?yY@*DJZtnU#jPs6YOr(D_c8D;%CHKRRG%O-^q<8lkG<-1ty60BmB*QZ zs)99;DpSl^2cTN0sWLm!!h|FUQy^gRNF(921gG=;)n5KX=RP1O`2nDK27>w1frlEH zpSGK>uyg>_vMXaaf4M8s?dwM=FmdseTQ3_SxlDNyc`q(j@wb9Pt`M41q)<})F2t3`yc z{rP|zLnm%Ph2oZdMXvEJN67chN&nW~(R-gprJ=N&x*EwnLQW#vkP!QG}j!t@SM(m*QF zO7sq%!2_$zyuzfe@%d>0Xq_ugY2n1;hs5|2HFOgn^0%LqdZzP&A%AAJFs&*417 z1GmKj*sg08JR9~1W(b(VhX8UH<^8n`fI4c7R!ku3q;y;R#k}Cy%OM&cS6W;w%7dsq z!wCI~-oky~|F=G37A9~xNh&o&2G}#3r6oX8$yN8b30M4K=q-Gz@eIJ>YOrrWxKDJN zfq<%qszI6iVGnO@9}_Tt{()NaEqj0UOa`2{J_S%DvtYeJ* z(2S$yqIt1yoUOsSew6zF#`%Kke>DzNy@~UsDv7h_GtD1`LG6MQMHf@pqF(g&arTv1 z(ys3TtVXm`vm6oskn$xryFcw|5qvhzOmTQ`Z<|VV^m7wCZX1@zAB1ns;g}OB8d?H) z`xZb}fT1Wo9K>igA$e*^8c0LkBy$h9krrDM1b|ux(2f0os5O`a{8G>`XuBe1BD|}Q z6KJ<>G%P7T+UszcGOYkJvuHJ}faK$2~g7pL+F?$0D``M&h zmreroI%1kIp?L!^RS_;+#R7mPw^}&S`dR+!@l9&=&%U%Mb%114z{hDRn{a@};22LZ z`vHKL3S~ZYJo)LC(XYRH@lLzNBKAVqMfY+H2!LJaxe=j!ORryz*L#U6VIK&8J8T0A zN}kdhbw{0VJX`p%kgj~{_rVN|b>v{n(-dSKb6=DXw{3S7D5!204avj=mG^InAZFd? zk_16oz=qCvC3!vGrT1{sI>*AZ%1TK@KRk13gad;JCl-d}#cL-7u+}~@HS&~SKZ(Ya zPUXg}9v>fXnmcGP1AzXE!M-(Tp8)}c_x$Ln)6{3Y$E4m^hr1{0nhpdf8b`l4Pb#y7 zm|Om6u*OZ>#$Vj(fWCC`o4#iu8_REf0^z0L^n|&RPsl-29w5)wXkHGm%Ao^S1A_d& zl_5YYsD>8}^k~w|y!EUhnG*NNn|Ao|7C!ra?-e`&VjptOV%6HcC>M>~xLRD=-+tEs z9?EMi5#AG0P~09xMRF?i=2!%BR-{vo>?@YRTcJR>c;v4BmkTgUlL|%0KmD+G_nuOTa63`=8HN&kgqGws$CbDY#Nn^OKYjWX zF1l?5^u*|)#Rf8YN}$M8@G&_khCvGUQvN&vYIimyL*oUY&CieiD?mV@-T8+7KY_h2 zVGP>;JomIa0Koe9@okU<%<+GpeSAQu|NH#k5B%RP{U2%k|K*2!^rF5W9%4uY1E#+K z0xXCq6Q3|MCbgqd5WlrNg<`r>%)#Z1amiD?Fr@RqC*WH&Kiwjn2m1NTvl!xp5Qg!G z2*Bbot6uQF7?2QeNz;%!{{lB*(2%!EsE`;ofO)g9kY^tJ$K%}3)>0_epNHuHcmNWT z`KJ-=;t!t^#gHon@a%WL!`qn28xxad*QHmj9u{S-eVn)Ei;2-yU#f6*9?<3!3taUz z!FxPu>Jwn``H*$hc?d`~e^GT`(c9HdLg2*Us@KC05c;aB zbMF8|{u>vBv()bcSIw_paG9~4DLa`M8*3aBJkbL&0*$J8u>GfuNx=Znpyc(0G@K@q|mhA{rWsx3pGyF|9AD>(p zO}b|_^ZLaeZsHB~sq%mEV_#7jlroZ#(9mXw<#2xQ=dMOPi76)IYODET9AVA5j0RsQ zyk%9rysl_~xRPuCmOL!NexN_W2}*GFf#Z69?c(~=+{8HmU#o%l5_cK!dOiHSP_x)0 z0X~B%&~X86i+mP0d?25&aRzkT7%)%YwlZxh1u>_>6KO8L7AT4Got&P?d%PajKo|L+ zBmmE_N7|l?w~%~(Mhpm9@GGjmWI44Z4IDfi0~T21xuVQJt6dK?l~ zxm@VZbrl>P%T4J&>N_Sy?ZQ3~*$GQ&@7dWXp1VZ`vK}wyKUf2vV&qlRPI}^qdFd5k zZ|m##$PLt1%l|B3G9+L_n7LK*m1SB%nP_!NcA zy}XPc@Rw_e+tNfdCmer!BBLdqsE{-0odTWmW(CTA8>TGT@@nAg#+c~W_XqznMXypB820jjjd)NWJES!Je} z#33y`(3I5JSe1LZp@qet+%sg_dAG8QAONKB>i)}EM8Wiv`Xw{}aVvajX{q?CqQBAS zb@c^P$3hk|G>@Px9a)D43qP5qPv|}z`QREJDVkHIn5-^hCTA|rM(w?j&RKWbUgqSP zm1ql1R0w5zW&x_Gurboo7&`>gGkN*`#QeA8r~nkx6|-K6S_-?Gj9YNh_%bXrubsVK z|8tM$dTwzuQIbw5w4~bGgCad?ylB02GfglzhtIkWEh@fKi$){f3P%_Snk2HvsMO`j zs=03cDvcBwHhU1tqhhS0d+#1u={N4}gxHD;DXIL-%pVb%FqjJ)3+Sx9-I9%6!E?FO z^;AmAvKjuu;H_9m8;w@lzFhCHp^lD_iq2H@Gd5*CQ1|Z`ig%w+o3!5Qsye-OFkWsKweXr7{W|Fs-VptZbZ|oo*Ts+`D;vcdiRm62-!_eZNI99MrC^UZ#h~m8D+& zj#aKEU<1Zpk-<=p&D>@pX_XbTfX4{^6YsiBA@iK#1)FTG_3`nN8E+6M-IgPy=xcH1 zE8F7w%bPHU$_}Fdvoz+?B7JXAa6=}Ydv^AIZ_f$|NiQ2`ypbknDg2G5Izw}Xy0>Lw z!_s?qDXIO=$Q_ZKni{ANFhA1am63v~j!tk#LPF1hOR2ygcW)gDKO+r&b+iI)x&TWQ04%K+%{ogGHsbLLOw95dd}g~M5IH3=o+xJ-{8)H*sh6#|qNk>|O2!_q zxr;4iYN#lDnN|IZQvS0TP0LQw>!0;dA_hhK0gwuOcKyYauJly8)2MATLpH;DEn<`! z0%<-2w`Zt_ItQ}Mtm=pIT0bwhbu7^VbHH5WrWZ5wq|zpqq*Su{bRSD`L|3#iJ`y$% zno|WrY?l!vMzc9h=+AK*g$lv-J@ZzW+qB+%yG_x`3cw*&P>S+q_~{e{(8xK_GYE@whTkCyUoQZj=c@ZZ^IFe>qqyZ9ZN+6jh_O8CpHA7~kAOfHJf@+8;fpI)+GnsIv%4mpYRc>1As;05uCGt#$i#ws`e>{RV2TTJEnwX+k#E$ zX9mc!Kyh{3!TwRUZ~#m}H&{V;mCDvDkTv*OR@rwEJt@|Bb&h=9y`=-CdQ4VFB?FwH z6%4jCC=B5|@IIK%R++)cQz`GgYGJ5kY}4zwuA(tG5N$L$dD{-Lwe63YVkH3yiPnEV zyS_O3EhApw1cjDj*_^h~Q~=%0oO`&uGwzq0o4Yn^0ZoIiYY002RWktjRZ$P)Wf{EF zffOj%qk-CT#@jFyfN-8#<_MYFUzS{u(}0hC9O4)U`v&3Th57>t{rMvq6-RN*+(j6!yA|8g&)3 zli%<*wmjK5rt=3%_)(_l0#XUU#RMx*hB;MiKPhnf#6e|S|A{sABwIb+YUhE5oGR76 z{tI8;NIBrEJ*jc9IjV&LJdKqU5m2;_R-USWNuXW2V7Vf=*s-J>SDPjyL`tPFu~M+S z1DPS$bD)dUH{GG71rgc?;_9MdSN$;j9=oFR@#%D`TCEHM?bLPIcHUU zIcs}o#6PXx)!|*47!Bm?ruYNn-xUYv%)z03Td$olaRGOp0YqO2p$oWBnle29+6zFs zLJ*@nEbT-Dg1q%^L|&8wDL;U3h1Of`s)-wSVRFO`hzQ@NO#9W$jlkA`FhUpuhi*le zUajM*dEZt~&Dl;H_lFr;YUDcXI_jdMsn@jP%nz#qAn~y(hpeKnuU3O7GtuYwp8(?S zGqMws@PfnexA2acdFnGFjou=#FRxP0&rKQJV3>M+2#+Okj;@7g_wpE`DPvknzuPDgZP4vA4V#K{V3hr4u7p1q*_P{G_y%*N>5R$_%M{ijO zCt{$Y-Z5fcUjah7c<;ADB%>C<=Ki=p0CXNxVHVZ7?OKDW~05^Z&UU#Z}D)uzPe z{{N5|+Gw4NFH`IcTl8bC0* zEsfMrL=&g#`~N~B`6^oQCt!huYS5B9W(&m=N8I)oVfiBnTRqoRJB z2Dmf$7?CZXASUu_@A!Q&JZ71UDxuSwTA`0+ZuF^T0DOkQ;NhTHD>p^Sy`@$4ZFrJh zYc~VvlO*3UzIX=kE9VCcwIY7$#+q?YtF(?w(`bBXS|vq^51`5<=8EbHjjAmh&P@wj z&h0<4kr3-Dn7WKQWwyShjHe3SoC?f7ddHmSehgDjk@kS%7Q{9oZ&`fmqgD+G8_iGRw$_|Du8L#Ba@6+g1Is0`lmoNe)vK5v)p@P;;lVV`%)9YK?3Efbrxs!y+jD82pX^`8Lj}ww^;jcm zCRL~5C1HKVW@8D7)J(;W75!t%bA&fm5nKa#)FVrQ)wwXJ2YopK=`f9T6k_avw3{X zvNJ{*|IaDF#$zlK2FwRH<$)JF>E587>#-dTLNlk90colluh1OG!mL=MgGpxvmEL8+ z+BW0bY#IiA;}i$!UO%-UBAD3)e^KymH@?O)fQwf28?c+l$`%DmaQ*&Q<|&tpUORbW ztH1N>4@asjW3KmF36Ax8ta>OG@`!wP(HT3!XUu%sOst(iZK93T2^3+JH721s+mo4= zGu3$>oto~P8%H&w-z0`vW5!L}q9dMpFq|EZBnRy?+^yR37RU$peF}3ZY2`26ZW7=4 z^9#zqP{h}KnXNm%Q)eT0mJwvtaj{SuFd*uhkVvB=em*1TwKsr;CHiDRDrvMqa>UU; z8oe4aRAHMO_n9XES*isN56K(@17pV-dQ7QBPZG^v;?05n9kP`kSS|ya2rp!0aa2m% zHcTwA>?h|dHDEjNic?H4DO(@8*xHqBZrX`961`NXGaOm*71hUr%R^eb{D32I$IK^} zxIRp@J;}5%v*UiBKWc&i-2M(-O8?y3hkig#d*FZ*XwY0T1j}$XkBFd1^~VXOlf67^ zF*848#DOoS-UU<;(%k!G?yY`7o@!#AE|||jr^G68OjdJy#Y!Z98i-jE+ng~=$4z5)OrSvwC;n@xxoG4?c`o2yBU#^r8vB0 z*7OB#@1=5OrKBdgC$>@0%~ekdUCr>BKR;Fo$9M0p0?Q0%hFYHrIbab{70v=! z)-)F?D(mnvkRg-WqP|3B-)Xconp7q%B*MaV3C>1oRIVSVi) z#Z{t8yC0^FFTBgf!_$kLiI{8`v<<&24SNXMM&+vv6emn!3hF`P=imNj9_Qn1aGQz3 z`)8P$+=eP}8*vz}SX~<vIjt7;d8&-q6uFe!|$ z?caC2Is0A>vWm57TzUDW!Y~Jq(=mL_veC>&lGS)~W;}Pi&RUGyDd4V{u_f;nz^QG^ zYPV^qgL7npx#5b%`+YC6i{6M9#Q>Q^UNF0(Y z>*1JiwNmqRL^U8p281qpDjROxGw9O#Z$7X5a8|}V0Bm{ua~p; z+8)Lm2qw96srf$ly`}I$VW5yQAMCrG9`6(lZzedXk;c1Fm+ZbUyu67hnr&KkUY^m5 zWZSe5Ei1}e)rc$ZS0hS1{QAUkN4~UGb_%1GS~X9s!Zn_;H;}<9)_jv#ilVGsE+xT| zeNT z20k8Mdk7MbYIFaK(>|vR}C(UF% zcM1x?llB+}51-3UN2O}K&*|uzIyZRYGBKSn_v6#hFOkgW{RxNEAfp7Qx8k-t35RE= zcOAlBMc#7Rf}rZK${zDHFU$~jm>mrKM^tnHN2e`*vjOu_sk+ zZ|q@&Yk{pUSI32qRbMnW5BHp~`8B=W&$=&4_0qCo-f_~8Tr2jE_hl(VBR~F|JKoDeYZ2dq^=`cp`@W140 zaJs_AdkcGT>m)ziiZC~vD&d+tivoB%w4RTXbN2}FM#veZK~s8M@m_N#9QJ#?0RLT& zTl#jrV|meg^h{J6a7o~3N<9^f4=9XSl53o|KX!8rYAB8I67wC;!Z-G)yjvw4P`HNy zPy!}#83af(+WPk3a+Bv(NBNb=Bm&$caz2{a!;!5HQS0%|%WR+Vh^h!Nf+W7|*VP72 zIrx-D@pEwz<`*K*e=grKk_qW;;6>2ebGMZ^|IO0dgR6nJ4EQpEJfzXFJeIaS2kCa~ z96pv;H6X5=`n6xF1e7n>%FE$4WprBfYL#$u5HSot>IG$JB<{E!PQAH#oB%XDK!39F z&2ZA`_x0}n8K>#W=AnUOKQs1Db>-po>x)!Y&fW6*c=>|4-p;#%^nL8xJ)rMyO5!Iz zTM#b-q#%Gq5yn2k5mA$5#e3b6{Nk-{T9>F{+m3>xyI-gPs<8{JK$COGs zVhU1UD5@?JhMPeuaXeZQ{jnX>uy^CqM~0@Gi-F`1zk7d;907E@ntpqXuXe|)=R?nY%4);qWS7(J8yG4`} z%gPR^06*S6dL>e>8D!gS5>{h>z?^p~iCsXiQ%SpLRs7Q+5 zi8OAPhX5sV<9gsoUqd>=_O=K5cl+?eMIcq6@=>w~%G&DI&+TeTKr+AcMPDKXLvhc2 znX*>da)#PZ-T0u*{19_r&JB!fUG8R~2JiBl*oQYHXG=Tvq#=Dyl zz-RWg+z_8sYufpueOu9>dI8`>p`FRL!{bD({7kq-f(f9R)tcQe?{OIJ!PDl;3}A<^ zP1NjA9Dmb#yZq%F+Ccy|qWG%(z5(|=lamh;wj3wKp!WhW9fP4y(Y8O5Eg( zuCFBP@{t@Kn~SNno#6!HV|y7!3nx*DbBM=tJMN!uCTn*^lLMC={=TR0_uC3SUzMW8 zKUp}TGc)Fggkh9VyJ>!?Z9fS+1xKbF{3H?%+NCrYCOdiM2Put#*Qa@aa;Zf$mO~x| zY%K37hO@FMSe*ZK1P$NRBNoor(rMB;6gQo4RqrlUWqe@&d-!)w z0FXd=hfALS?kAj&O65>?e?6Cf$E;aA`q0=p@NxZUztv2Q3fH_#^2-IE=INJqvBZz_ zwlqqIQK4&pzCs70wbVyVf)HG1F-W(|PuBy<@rSV~nzDAEcwLP`n~_F#i$5&5Xzpq^ zNzDKmkJ3dyk>>V3)8pbeu>{(BB)RHdJ_Zm4M?PZZo$?nx))38P9W8-JW;~H;7k#|w z9D>d{@Oqc2<&-pF7`y0R77feD^z^a>S12Hb(N|9;lw!G{LO5d(;fVfCb+GMJVw7=|NZ_zD%P3GDB0&rX3|8Ce77#8QOW&a5IO;p7X1va``;^2sgi>j+;0zRbFT`=k$4FHr;-ieRPaP!Ekc1NY=>2a$b99Khx z_JYJ4K;Sfn;;W<5qg{j;|8FGV6X`$ehp4~w@^G0Lfq~bmSad2*--<8K)2?GMr@k8w z_I!@RM8Do`v(7#^6_Oh4Kv4IoJ3@5p?wWCVZ;$yc*>kOrWwOru>X6z$8i+F^ZEu2_ z5TYJOT1|AI5LK3|y~B~Q^Znj{4HLjEv-z>Gq-Ty#et5aDvijZxlU%Mx>2q^P)D}jf zQk0W=HKQyhJ>ygstlnt&ff`t9g!ra$T5zwE_%9V@-Ig1mkbe8S;&gjG*MkDqvu>IG zk1T@{&tT(I&Q#|zc!31Lns^oHJU0;;xuSV$xaLQNBmT{d>-1qC-)I6|bX zLy*5$Xo5I#H6@v&+=MaC8R9ujpZ=T zM+LAXHim_hO=qL|`W>;&BB~Xs?C~jU-hMq@OT~LRO+Zq#&bnj}xq-lCgDBK{7hT%W zoe@Qt#{K8A(dmyud_A;D|EVWG?B##hKFcf1Xu<5MDwOSpasUf@(@y^&)@$B z*wxy5>&mWzzEX7hl^+E2-Q7`&F2<`T_hZtXm`Si)s*t1(=9WK3=Ym=wZ&fUM~V=Pt_eA=BbqLhjp9LWPxZCrXxg>4B;KKw$wrB}1EKMR{2dh60SfZ^`9 zpOwR}XtxK(ja@*WKyxE4TdJCwycktWt+PLGzGfqW)a7sg%JrkE;&<&nT+ffr$$1_f z|Go>uT8(ynXX&$qyPV1Lv@2w$s@hrCW$%h!M4``aL}>HTJ9`4;hYDv+V5GMqOK-%i z`*Q2NPVC*)cIgG(J>%Pfdzz?ZD8_0;K3tq@m5lOV1Jaf0$jDM|AU7SSpKxaIOVK$o zlIoILL_d9Ekt`_asN#q~A+lhJQozidGn&8e^p+Cz>dcvfKi-^pfu9xItE9ePzG@%@ zb$zahDz^UM2SstYKMz-3ev>N+c%Ft8q&$pnP6vaO82Z+!`uEp?^mi(=9kBA`y^ez^jT>L z9dNX{`?xw^RJw8|Rlq&Owr`W1SMXcw4nhg64?w%HIl>e86bNyXWP8dS5Q}-U* z^L}fLJlKer0lYl1^~$!n0*=&CQ!>Cjkbrj(Gmr5mEgb0=cGMzPzX}7S6(*AnqN>E% z2q4X$op@vhiS~ZQkH1NdcOP1so>%^Fk&}OmgsA_1@|(s_@Rj}SiSsL#UHadp=&>e| zSMHam{vC&hmY8ahY!N9qrbq3fk~m4$Y9rRiE4XF*{)>Xb2SL+KTOW?iR!7>GWO={c zXU3;?J;<(%HsEqsQJExh|HqMsAOBK~BP%(+0-7`$UUw??reBhuQW4kRMRH`Av zK+maSiBLc-yI4xQk8}A>vt+xs$K1$8tbRZ68!rU=qHJF4piAsSBIQ}K|EL1K^&hyiZrY@C#Pe9N5ckFdTdnHGNfC4SHu1i#nGMeMx%?W&o z^Hgv!HPYKL4oR z>+UY;4EBS{2M3rRB~D5>tZc>8i+dO;S_#!dF)yxD8hVl}&a2jFRpZkv*i*H?FMl88 zH1dXXAzAL27GiLBdf8Im0o8QaxPDxcL*8@pxhM^zlMfPJfFrF@ zlfA=4vgZ^r+hwCIhsV`WHIkBZ>e%O<9 zAJr^%>Ad^r;%G)kwXROJvY*} zBoZ*G4P&Q91z2*wyV!dhC|dnCUYI?tS^8YvFs=tkWb10%!mZ@ww9yM+EWa&ILsyhj z+FgB`)jJ{R*mEZX-^`b-c^9~8D=Dtl^CTse^w|}pM~`WXTmFoeB+H7Vd?(xg@Vs2$ z{oAz9Z^jL(y|2=mYFQvya(<)Zeo5Oi?nkXyQ`Jr^e8Mj8qOo(P$ z-L0C?LWTMzTs#y1O9#)fQ?L3 zt@}$GP@lU(8{Kp+Sd+Dc9cxtWVB$LS7Vq9T;|`Tp?|%qCUp&v%s2T3!-2iYWKX2LC!MX&S*@VCP+JSfHJNRC<%r#(15DbIo2X zSGm##81P*6kF(ybDR6SISPDDw?OK#FvHs-+$BkBXhbDh zAT-3j6 z1h-SZp}YsTej+h+^CrYdsK1!$w^1nL-+xPsf{$`B>y?nmLE!&;3aCQ>1|}Ton3&%F zShQbR>7OdAcb5D2UX5$*kbz#Pez8d~YYwMhKT%cotm#^PgVCv{Bw#6{- zv~Ow5R-+5|+0+LuS{oDEC>NJ5T&GPK7XCR7m-;IhFlFoSMQO9U_$AJfhql{UT=ga= zR`NTubC37EZ{ag0MH_wm8$D^?Wg zMKM-) zX+2)_sRhxuWh?qQ@!p4LxNQW)Po6ZP%^Couz%iB96EBZ}o=CT!+^V|FsBBe$(SItATt!I;&1 z&D8uECCGJKPDI3g-)^?r;;O@Ei78^&8h_9gLc!f3IZ zuw-aBtt%J$;?cPRjkVX1oaU1*OetErkbdaVhrL#J zArhdY?7h@TMiNfp;xsVNoW9bo>{T%Goa2%4JeN=RSDo^R2+^`@KC#P9W{~2G7$dFz zZ%J|wHVV2+3&Cz0Qt#h5O9@o0*>mR|%M#Y4J0-}KJ};C-rm$f3^m`E?>m^Sd9|adr z*v)881wW(P2HoRCFF|EO&+?Ui$G`h%m;2j;T|XuD+Z*zT1X_{_(Nbw|Bde3AXgoIw zp}gfke*EbD!F^ef$bkaXoh<>Gly%2lNw<=%A8kvV(A$L`wG#j2;)wsQh#-DGpU z7b#3^a<0|%<7YBN47}CNQSWwx9_hSsUew_csG-GER0s1v-^jWbGyc7(K-Uuf%0W2wK}0p$sp@{K=yymb6v}~{=?PL` z<`(1}**d1DeOZt2V5}W|Lv-fMClg9{<~;UzRHOQ_tQ9MnKJ?4ylR?R&jKqm-IG<*= z*|;X$oJtUu=Ji#Gqj+D|V<4k3QE;Xjm#q5isG&jf>8Q*j&1mc&btt6-^wA-@{*s1H zYBw5CxcCZMGsgT(`z8`ij3Dm|6F}JePt3caug-0gOB0Vaul~~J{1OsVOtJSNt#)#t z`cY}~Kp`XJmglv*mFxBo-y(-)Qtz|Xu;xWf)q{h`0b9@Qle8Pp_KEb*=xO)iM@MMW zNIJo3yTYbyS)PVESfBT-lxj?pl9}{N;`OPm-T?q%d-o#3Y>v%W`L_pqit#z}FbeOL z-ovL*7uK|PtE33RvzjX&&lv8rew~N+y6}Oh$RkijRpQr|#Z661_KMKrg`=rJZ@rWX zK5Xp=DHAUCo@RW?2|M74MRGd7=a%-=S_+g>-W|!;e9us?B{;s{o@stsp%VM{$)eS! zJ$=P1z4PoW=!7}47w1u4M)cl2#FfhjZW~lNVSI3)DvP zyZS6yqD&b>8P++ZZc%$)WR45n@beA72LVDs9?DHv8xE}8tlWjX4fB$v_Bgup$y(Z^ zqxX!1P5!uN>WKXnPgF{#`*ZqRXYL6-< z4>k+3wzuiXR5T={)oyGn1co?aUOH!6gFS7-FUcsHkKM zJ}So9J=b;FI>^jiYf`F9XUB}7h8-xJ*#UASS3q^a?MEmRLH9BNe^aQ#*;KLQ{dY{? zsv-}FZy!u7^A6c|CUQVoB4U2Hr(6uptMY5Mn;t0Dge;CE zC?GaiI#aGLAO3Fj?rWT&G*Z9+{ZN+Fl!4BWyK1TB%a8_EAVG04xlrEmZcQuSm}D8b z^#Lyh#lb$g)&Bm5HBVpTVBsSM*J#R~z6>7GLNn%Whk9AS^2vERU1=b4weltNfp+Th z5hn5WV-4L94lps*6Ac&sof8@^yA1@NDTWoRSI%ilfnUb0PhC}p z!kZazSUZU|z6s54KL7iK?gpF2N1cx~@W&}dx@%c?u&(V7+t4HTR^kl|FYKJRfQ z^jlngk$s|e>9Qurxzl=+GA);zVZgB0D3-wX7nj;Cw zClB2U55Hc`)^DuNv$Ab*;c7XKcb?CEOAsZQfO73ez4y%O@3wN@$;);hi;JDX8#L-a zt9-XCBrE>e<^90(_unT4!N<7V&jd%Yw@|J8zQ20;_BT>IwEcawn~1m1PA5!LY*i$b$GwyzFoP(d2hV(_+hxV>aF<+?kHAyIc~f zQ1ui>tzF|{YvRbP=q>}j7V-Wdp(fXZ!Ar3!!Cl7X8vW)6H*@*-r@(JNiAs$WjkEJT zHF8`R!B`Vb{4JMf{Lct}*blNrFV5^-w#a0LuScgm%TEk`1C38y6*k4hNX&>acdJ@X z1WQ!aA_Pr^OvzU$Oc@st0xM{V-4niKX$KwKu9V)(r5S)K=nn!btrT>duyhF=8zpP8 z6`URfZeLc|&{G_1p?zyCJGVeJ^--LwFkU#*JbWR8h4`}Po*^e|R-b_G;TbTy#W2AfvNr8R`<@8i>jVTobrqbp!J!j_3!7W@E*A*v^q zfU@OsX$({L*uB<2%dXLG@)@S;`{~x2&5Wj+4i$OJO;{&$n5!9{?u6mUT5wz7admpi zvlWM+F}?p)JT2dy4!GOU*#2ss7-0=xryyKidA)<$%|rnK65mYbp3`Nv z(!Hybrtn^-Fp>4j;9qC$8~qmU1`6QF9W*hVSyfHV z;~2w!-P<2}6Oj-nGTUJHl_)xG-JayWLW|d9?o1jztuZ}E1UA?cfCGTz^{Yx&mC^O# zh*uNud;2{uD1}9j!tX>0Iu*jFNn}apV?RxqO0mBu%G4Bch~1E8I#B2DhhB#~6o zcF9%Rso&RIj8)N=w~u10f=05Qr7F4XWmH(=@uCBJ^M*N%+amdYsg)3s5#v z2bk_BvTN`aUR!&1P^eYv4b2*b1F6&5tE;PHXm~>wPCtRNvq+~Gu0R_fC%(>YCT9*O-4%BHT>gZ*Ro4=%2;V}p3=8ahV1-&5%(%NA4@Mn0`U?# z^=1gojL(JMaq}*kv**bpI6O+wg`K{n#{c_{k9c%gmxdmeAO z)?cK<2u4OxBT-9HkC0+LeI+Q;%(*wsz=_(g>KSeY2LPX=iMHvUfBDT_QjV}Y45_M@ z{W=R12EG1Y8=+fP<(+ucg3#{1&n4C>fr$P7W4ed$7tZjr77o&?+6D=(hP`$yWsRlj zzU2ohLqC)CWv+gJrOA>utbLmgbNk#`Jf)?+uoujq3jS-?&Or|eop^B`;NUueGYkCV5o+=QG0EWhl?+!Y%RnB=3(07MIC{z|ag~ z3?LxgjUvsE5$dlkY5({ESC+MO!t6IvZ` zv4Wh23<)_xeIxfYo@O$mjabq&dy2j8-m#dTR;LfI!pDMFyYKQ32&8&5rAOn zT6z0uCE`KNtp+g0-W;pL|&B+xrGlxEsZ^S$;=8jBkF_)sZ6WIA58v5Gr!cntG%TWK*OWL%CVPLZ=A%LR1b zHGzcXwPe{oir7mlnLFy0W5pNw$ z;7}a5XwiI*5msnDJ*v664^y+JFTasD^>eF!>&t6?xG;}k#48X@4OL!h?@G8NNPvju zDftZo7}>YySaEw#Y`i(#z-~nm45gnt-|(M?3w>2HSf-0Yp^S8kEl_n*9skk;;DY=- zA+Mn`-iTJ)`kg5?FbAOuaU3WzM^asf6r5B~nr}x0j2*h2yX%6<{N-$@B+$ zx7w=LU9-A1EJEVyqFJSH;~sTR{V1z8@t(3G%e@@YpL{o`($r~475?wR$=}k1R4#rF z>$=qVr_qF_>t3;}%$)*4Pcb2(QZvvz=Se^TXqS2Gf-l`Zzj4FushmyEV+IdO(wDNQ z(&gNI$oz*VP|i;>0z`ttV`E_#`E4g8cq=#RzNDoYl)M9sr+CuDdo=CG>v!#xpFh3Bv+Fqb*LEezIS0b z!B-(-D-HWTexu?`KeYkNk91bn*|Y#D2;T3XiH8LRr<_OzQ2Y@YQyQ;zMGfZi-JtkG z_!_SqiYyQpr%Qx+O1e~1H_+F#j1i7T0VQv>?NrC=%L^twe&Y3z>(8+ipiJ`#CKWyi z5#~e0JGn>4yA>IDNuQcpQ0G6dbhaC10$olx8WsZc2}NbBETo}O=s`PZBz9>RSM)Ey zkeemfI>$})hu>^Y8hg!$A)rQ+S{2u>0~%+co=EE)V>c%K*WWNoSXpe};w5&jPEfk> z=Y@^z>`1PGPVa!!FF#{E;y@(P@+uGs5B#xiqtd^}R2%#W@k+&brPJ5%UCSG$-KOl% z5!tXZ@X6%o0kVG-m?A^#=paao#el9|8@A%sz}m%wwwP~bc_XA_Vq^V2)*6F)tXnB? z_!i8g{$5-HqoF2tCl46CXHU{J3|yt##@+-#>OU zjH;C0pEx1WmI5WPz3>Fg?MX1PAmcZH)JPs+7V|vmix+MwUU=P-?>85#Q(fOVVSW~y zP-O{1KO4&=peB6eefyY!=>uA9Z0K(w&$1y5FMH13#k$;O{0IMZZUd3LzcFPU15P1? zN6oqCazsn9SQ05ez#5>{pQDIlUUdK)Lj>-ln$GQ0soe^C+wdqiw*bO9ls7kEgbnrM ztC7L3XFFEL(_fCa4jU;(!ue%KK;X#evbXw z5tEZEiD&U&SKE7zB9YF=)Ts)_Q6E0kn=$?&FxJzt-)pU0n6EgJx4Xz(T&2%q#q(~; zkXBek+G(xK4krG+HtqWL$+R@9if$Oww(J1GA}6~i4Y*1eor}_A0!TGReG{s zvuVti&I|U+k_O!V)VI%VyroN?=cWn^S3Ys1Ca$~STMQa> zIF3RA7c3!A%~wghUkG4V4hgS0P#54ArK&_=Pa<{k`MF#5yI-h0&+XSYeDRC@xsjoq zc)8)+8?Oo@g7@n$-dS`GmQcyjYHFk!;C(s9^ii7+cAwk)3Tw+EBxqiA4qINv@!jQ_z5BfW)jLRSiq(~3epzr=7KFwoB=NlcDN)5_>9`Vjh zi0mj~=6+?ojSe@~M^Nb(2fk+rQpH2eI$%GDqhbf-Mb_5Re}N^Sz3^c8O*{ zn6VC^KM5IXwFOpV`veMYdp|?!P%#~JG=?4NB67s6fU@f?W$KN8sU>D+?CR!CfuiN* z6+Qy0p1%7lKk~}L?%yRi=u9`wVNnrp5li{Chd z>q!f`#)nAlH?v2QD*_x$V5c_%%PrP(;e3{iEOox#=!7v%keGsa~l{{k7BO`RFkB85zVD*flUcKm#$u5NR&9Rl11JoXEdsCTbcIP zQ|9~1aX4%bf&?vtg|bFlmlGg$HP zEBi$K0w_rZkzssmwD8AYaJ#?50B_krhXOsk|EUgW>#QpW*qz?bE59E_Au{&I-UH{d zHB$?=BF)O-G^q}6U}|PAGH(!VRndH=)&1a;RUL0w?Y6?HTAay27P`@`Ciu1=pHYTa zTi2QT8hcb4=7IQnPEo0;Wf|3i*eIAWSIcKkXi50x6+hbD)}}}XL?gE1j0<(Y@p@6U z^1WuN@B>hEuGZ@fV4KL504QK~q>H>s^!?{VUCWX^XainPocCq!&sHVAKmOo^#2MW! zH!ByHAg{runr!{AIqf9utERDFwCEO#dHmzgTa4XAOA_vH(BY-B^ ze1Hlm`j<+0TOn!QK>7+1=uxtb3)i1=nlhYHBaHb1b}tjq3kDRO3jUW~S&m^BZr;3E z4+Cut5F^}f&46X-b9Ql=G__zPo=A~cq%+o`38K!^FI5bF>(=Ks1QU5c8@{f{FjnRS zx>hcDk*bZHh3c7^VTER^!|#7}c2-{6?)2kzycyZo#P7pzu>AC8$WNomdh-tJ(cSO= zKj84kL~HG}E;TA)3lHZLmj?DglwWc@`0{e}T)YuOZgzGR@m-RjvV*+A&QwA}BJGMJ zrA<#?2cLRhJ^*NcuTv+W<$*6}GX7>nIm-#-AR;0XV2J`Z7h7D?-}qTROp4N1hav(lK721VnhdZmkGBU!z9O9DB zq}Z_=J=P?1G92sa6xP;Y{z3KL(@AsRm#rY_BSvWS+4;;;>rZaHmv>n59+jHVIT=lk zJj~%t_ll+F$y=*kCGceYV_dYRrSl9z_KMv{lo9AaL#Lg~I{@fNOer<6zj}S`xy$7T zF=IUU?;b3FWw%I4#MXdDesq8iniyc`dVm5I?^ZngJZKTu=Rj9Zd;nR}fyu461*(^T zIyf}lIHll0lsTF;nvFu`O~*ZhDW0{W4EK9-=ZXg^>W$ZxG^Yx4z~HsMCrhasLH6$ zxwlwMO(?KzMN=F3ZW`yCd6QI~9Io(Pd~NKtHPZ+#>`^ z`&^)!fd-MB1eq|>(AZkI*0d73y8=bgA0Ng{gr4P?W~TZD9CY;DiIDO(8UH{}Ey5@z z!DsuDwzuhW2$Q6r>GDU}j(&DEL#g@bwCAzH-mU-~__T{Y)uBE>FY9!NZiq_k%Gizn zyhEXKEr&LVPoW}hQTCT=$m7>oG)L5Kr8S2^u$hHzczCA)PVKE`ho**@RDl$ifPl2L z_>qYK7sN5xL9#r_L8>?@L+&W0yzk4EIw$kn<*@s?YkyLQC>f4rG+kUAHk9#rBj!y6 zy_Bz=(d2>(aby{wcG#D8S>6{HPUJRdVZUQ) z?6fs=1V+^`i1r=_><0%Vq((&*&Sgqtt+AVv<6xp52k5XpNg@@0%Ue=X((gARr9=-G zPaA03A8_f)F7^~dh(-&pPN1Up6|;YvKZ}j+eLhf%qL=j+L-%JyYd%1%Zu2qOEDLh? zsYi$O57mu$53c8%VNdSZiau+af20+oqutv-`OPf-apL{E@z6KU3A&M}olghKba86> z$aDc6e|urHo`bEz!Ed9u?JsjH;x~>u;=5-j^Ag;4wxgEyKRnA?sRT}z{sW8I9w}VJ z$ptc|HINJx<}&Ul#~gK@IjYrv?av||7?WqJ4f>1OGf@v02jEVe)TFVlE^0Hp`X!5) zhEj;d-exd^_hQ{dtH;q^BXQiwPU6J7(*!VP2g!*s+t_X?fud~Nru`%yM9V;YeAn#D#{bmoR zrk}mJk0`4581}V?`+fjsZ1(3^W8t0PiQb{|C1(P;!xp@esvpDpLp*T#tV(gdmGQs3 z+%V~F5z=7LLuH}J?^ERQu4MNw-bz59)7Q7HuT9Cj%DydT(JdPDxHHvrGKgaI@a}jy zQT1+W%<8l-I^<_y!Xxqo6PR>OG97P1YweH`N!y@~z{Vkk0j0YgY4_VNL4S_f^R2~q zq^8thC}7f&`8$hQ1WV%UC!4|>8ymS5*4EZJD=QK1t+al>(Wi=#dECWIiTaJ_)~-wun84%#WwEGCJM;&6i{Gd3KYCK0u&MES6jR@ddpzB}F<#-MBh9lAGbL>} zM)Xaojsa5e`!`dj*D4F8ZANuB5igO&xkk0?D@7OXMAQXXV_xx6OOF_eI62y{^xVMb zPqk*r5l3qF><$@8bDV$e)fUl>n-{4^_ZSqetgPgsp4j0|F>#dtCO-H5Ro`qFprR}@ zg@s_`+z_fMDYAlVO^ykHM?`NT*aGq2hKGsag2Hii3#CJxhjy}==lM7b$;8$rcS&+4X!Zv>5&cP<=Puu_WEC5lj78BH25S4ceAaNi@yHv zX%0ARG>*mS*uFjH!j%Nebr<@H@sM%iD`TcIGxRYD&OLh zmbzc6svL#d=a9s)8f_5fouf&PomfkFRDAzKr92-JB(V0`JcEcfk>9*O%V~U_rztd; z!E@?WQrGix$LSwAccNO?jc|uUHX}#=C%|*K{V3=-I1!e1ODr-jPP-3LdFK4?#H|S1 zbCb3kbXV<<$8cObr)%s`(#iP%`fjoJ^?6^8(!#>|>9%NG5FWMVp{sV&nK1t#&2Ui#Xi8?A|7;$nFCW-YFF3Q29PU{x7T7t5$;Kzx1ZaTr8+VBF*$I z^I;`cy#eQp)_?wbWKp({H|}=bMQ7Z!sE~v}fPaZ|%ZHm5WsqXxhIE;i@vjrsh*Lf8 zQXrBTs`F}&OQn?de?^k565J7~5s81#c&W`rj?H&PN09Bu z(5>oX_eXoRhDH3nnRup6^ui4p)!TT-0%YE$;x?@S)YuUBStFI+|9-F6YA3~n#_**D zH5=u9x)Eo#Tfu=^4W~H+tz?Hv_+H|KfkVF5OW+nPQW+rQt=A87$$orbjBfpp$P%=#aW;{u)%5WF)t+Aai*SQhk3r+h5 zvYls%o1;PT1|M3Aw7NU(}QSmp4^MMVM-1_m;Sz zJUi}a2I2XlL$yrj86m%kBkxACU=ZR(^v&eNiM_){BWy?L=!wt4h#F*Dyej1TB!8X0 z)^TCxk-I3^M2ElGq;hgyR`rPc<_{rc` ztj3o-aLeg}d?;n$joe>^`-+u8<5w(OBH$6q3I*xge21*lP&MB!~{}~$g zX4SEibbRfSu?A`X!-C1jV|Cv9dkA67#8vPD{p4?ut)bZ#@2Lpc%VYSEPM<&O>DilS zum9_;SXo$bpKq*ed)*4|4Rzz{ciXH-)+Ln(y%^xr)<*QLh1})8N;9hQ)tIz^+6sf* z{xF=2L7GuS_@CeRm|DG*AvAp~Cae3*7 zgAa;Qel}_5d5{0|8|!cqOmN72Kz^m^W~#p`sJu{p#4bVPH~39Y^9@tQl?q}S*Rdfj zi#;w6oD<-3v!%Mvf(?M#DL3mwezJC~M4%dNdDjbhgU-LAAW?GSvpe6|g0H2ji0G4y zg3!cqYyZ=*(jfKmiDlw2bwFxt?8N>}?)|I#n>=Ou1IF$iC50#ToVabx8O!oA0#1&1z+?Zu(m8kNlK2Q|=pUaVMNA zYI+2R=R5d3zT=hK=TYDsfXTH2V6;wC!;=woneK&S?yDik7%;fCBDY24+S!JSQv44o z*t1ozB*9c0X0m6p_wAAO&(#o&-LPZPWK$?R>_htwR3r;?m#8UX2fAWDk;9@zz8R1 zI)SMxYorS#dv(Y=Klmv*A3G~iu5fREH_#1K9tiMdpES1w%uEzFqUAxw->;c-t$--v z1+mC`f4;k?D(X@s6PlIZ%yGle{odS91Fqj+g(uJo5}S%O5lOrxcrwvu@Iolz+9{h@ zTlH=Ab4*PQE`PTg)P16Ys@Iq0F3;e@AQ!-hGWVUZ29K(ekE*RFhuDQT0TjN|7cy%9 zS`LRvBYgfQNGiie;z)u`Jik=)k#tF}ue|iYrB~yu2C}tmKm+4=O(Ua#Ykx$IUpRNw z?dypKVRFoaWiR0oh;lJ!nB*JsP0|RA5(y=^eGN#A8CCblrzXN zS6_UwI7@l^Z!SP-Y1rU7Q<+?C8yF{#xYo+mF&TpZyMxfdbk1u}!``w~gdII(x)5pB zg*|%n)8W0q?MO3{A4hJm=bfV6eyInySUh1a-Chj;RyPNxbYe*vDxUmYa7@Mh``VXY;3mdZfti&j~s|b$uo=1^9A(gJqi|1JAB$_2wyH=0{ylz zF_lIakz6c(LgsA6nKzb)Rx-o=kX-j65O)cK0SNj>KLZyF_8x8c1jw^d%eV1ci@g1) z2!sF+NTCZh+qjszTF`m3T5S6Cn;`DqVI-6jN+Cac?~8v=k7iv%WV`1_s|^;=IULV= zwq<3$gvmE)*G?{khPrlwxpES_ZcyBC#-Ftqaj%IB_v;n=3Z4n^O5RleljEk@A~6xG z2Z4;%^9ak7{V90@TD6U1BS5l^!Esu<`V;zr95AMg5L(Ns0sfMQ<|2*U758~s zQzSNsIBK*lg3Hy*hUeFI=3Dhjg^o=1p|X z`qa$Im@GGH=@2VY{?l*m{39aL0_x_b{j<2lbx`Mu&|gXD|j*ee1Ebf#L`5g4Y{m#{p-Gd#F*x)B8wq2t%! z?Fj$zyO;{(LufW`@rzw*`9P_U>%(8}+q&E_B@K#78{N>=Bl_qU&^_4;EPR))MLEo= zCVDt9e^wIt*<6c%+ri62DZOZ%ZTGuS_Y2Y>*Y!KB_L`8XvVSGAyPT7Zh3^B4V0L#*<#wao z%v`CCs;BrhF9OI?v@>O-Nn;R2lxyoqsm%tMf;1AdXLkC6MNSviaIOBUx;U|!_jXCM z`}H_jB_XLWBj`YonUdgy80NF@Xj{??c*R{Iw*}LP8Gt6)MSbHMYU%RgLtP<&SQj;^ z^qihd&sy@GC2c6Ynkvon^Gl-uzZ|wjj~-bu&>12w^D$KaSLMC(@%8x5wc^{O0e6dy zpv&>!n$u|os#$$B8y%#oydSz9YMz5sX|(_ML_4gOMlDO5GAYb=Q(MjPPq+VG+se-% zifLS`YhO!BQo);vdW*5cB#^*&f%eNAGxu;LMXrry8TxL7McYC^6_4?wb#rC?kR6}JVg_cB&j({AMJs`m>;mBZ5dM)&>{Y`&<($!SDf zH{WQ(9*!(m(H&??gkj|x8mY(w!0Xyt z2A^Iyncy{E>vUu{6cPVJ->qLI`?x=CHbkzE?DaQp`knr?<%aF9quH?_kBQzpllwum zHd0GoHJq4@i0te`A2ItEHoHlJmN+Zp_)0-l4MDHi+V#Fzx2T~7VY{MBkYR#!+dy)9 zv7LRU^HfS2G(nAE#1WOl27ZbO$UcaL4{Gb^Y_zd0pGwGRdKCPGmm}vu4#kzfI5%qF z?-L=NN8wP*3SF-4mZEhWa}t|McKPL#<|kG8;9EW=BW|z!O)2i6+tO0l;3;E}G-qD6 zx3mhTNb4}Ji}99lP<)%KJ6*@meE1Gxq?NARhnp%xlo|5z4cH)k!Fy7ie0-Cr@)zYh z(~ZHDV1ynzqw&tn=DtA64Vu$0N?A65pKx<52;5nR>t(NGUqc9|V22)E675OnVwv;L z__1ml&r1)}6IC+UL~Drca-<0Sy!QQiTbL$QrMB*rrcK6&`WD#eoF4=t#WlyaXi?_T z-w|uje;kPf!<%Ax=0!i=AvhE1^z~TRZ^*f{o6zy&{c_};JCfeVyCv=Ic!&B~pR|)`RvJ?OYIxSi}dAE!v6B8UxlnDH2$DF3meaU3a9d-F^=uj_HdM_)Y@$V z$S4b#%{ERdSUa|?l4Iz**(7G|A|gTFC`Eq(wATQ?K;H7_8d1n%R;;GRBX|;MNIban zv$a>H;}I0D3M*ZXRgaA|62V-BGM3c!q~{Zb{B$AP-s06WrdrynMw7VdBx77rzns{K zK7EKi-ZT?h_eYLVEhr}*$)!PE>XJ`lAc472&KJG`?Rx;PW6zRch@iGZA%p4NhZ#U^ z)P^v9Dt$!D#^U>e(=AsBs{@Uy{OXpJ@@!bN$`-3bieUqlSE0xF}UkA?!$qsl?Y1Qbzq-#B0Nugl?&J$w$A zGKWe%`am$iAqiazzfSbssT<_snWiM%Jbm+MCF#YBs%8AgUpn{H?vLHI_V#n%%Ma7} zHoQFWq_0UiPTaif=DPb^max=6-etl~< zeTMqiCKRpUIw6u`66LYh~TQwb`)Am&jA57E@C$2CM70((blr-4N${kJvDmx7= zZRYbLovg@*{bh5)@m9v%cepjbwIPkVwVmylf%S*;5UbnfgmQ@ZBC*L%3t{@I>Ta^v zQuA|d+%&a;`TFGi$Bx|yg%4CbGqor;BX-|yDZFRXpLP}EZfIZ| z2pW9K8G=Hl1Y`$`{K&n9BaqgPZy-Bn&2e@^{SweWj*net{cDlktXW^9kA58vL z?b4+D2Enw}e*y~5_G^G@ZUGme)X%yWZ&sn+w_{lA4cjYSNXy5c%wVlipw( zhvZ|s>7F#mA?1aH%^A$bB_1u5Y z$m`_hY^Qw+^DFFBWZhNJ*vjkl7tQ|sdk{RsqBgUW?n-NZjH@r5d3VJ@Y-#!oqq3z?dTfId{ea8#xlf1nA9TqH1quwq#jpS63L&R1c2uat`kttY%%CzW`hSe-4 za`t3>t=$(Rjc$R7+#c=80%LYb$k*4+d6)7-|EbRlNx?i!x^u4K5|=q4^6S^H<;aWB zBf*rHF+2Yt<2zSXJSKZS99#nzzDiZ)wBK%E%HWTh8clQeFr;5Jxk&5k;VS?8l;>Kd z9E6)?iLr4cmD5s_7h(1H&>ydxe=@^7W}Y@5DBR5H$KQYlr#e}@WgH;_KXhP@qN&B} zi;|4f#!C==J$|dF^{WbI*+?=LVyL3F0gdVdyWM5ho9~8h3p-h8ZxHC2sxU;C=!6!L zM9;JSSo~GR)dh>jOMRnN4#EA#adw3*e)3>2eR8$lTJ2Q*L68Mjf2O`jl3OZ@J!mWF zSlv7P_ATvtzV4$I66DwrkHI+-%_PpxTHTz zu@dX9nl_lio;VJ_F+9N7()>*&KoK%5Ra#2g$_-tBdJ8i|L@4+GuMPkEn8H9Sc$e== zNN0@e^CG8chL^55&~`U_LOG!7!-|fWV7{;Qe@dG{zoRX|Fe$#)cKXo3ToVh**@ZNR^&!P&1oHC;a(F8{8)3R`LUPqzH?3oS zZC&p$af}cCOF$ldF3PG9P(=U|A)9C?3cQxy&4G6V%gx_XDgTkcp~Q_cFS8#`~6 z(xs^MX3R0o;jO(+qN{Oe(bFQIJ5hg%mWTHT@M4q_`d0@63S(<4bbOT(K#Kb{y{J6v z*7mAw&!*5ru-(u8(;-sweG?q*w8}~G=f7yK_*yS!pb>@$r)@>n1wHXE3nO8sNQnSQ1ATQ=6kzpDpqCZZ(6_mwrGOi5)fBiHb_D z@I|82;fI-bb7IkqMdzvyXND6>@yi@V!cOf;BA5~K(!x|e*MacCQ@NVT!6d=nwitE`8yU1%Zl zwTB+qXBv~&%~#BYYoA2=4Fne!52XWN$u<`7H$j)^y?rkec_@xZqCHng6x7vw?cs*; zzm)n0fN{`)Mbe$VYS9@GNK(HV9pjMGP_j;{e?oo|XM$1PhQI(t)ujt~kTrfw>%cNY zB{gIGm@q3ZZH^{pho~JCfS$36|7+GHnX^3lv&vb4d3)IB$!Z-a2rHNAy9qaZ-!k*4 zYX6L^3gq2hY>n!5vl%>YJ$1$!{&U90ts2KCqUYD>F8IQgW?1AkV`@3T+j3S;W<{`` zns~WG02i>68(&GqyYv*w%TWe4(gx7o>PF9=2|m-P)DV;jqM&ontHxC>RY?M7lhnHE zY*gAuC5Z=~e;WA7ad($i+L~3oxvzvMKk%Dtw=ZS!&F?!fddK#|=wO~t?ukZB?Q+rN zuiW;O8S|zP!6!t4$k)#Z9|d2M%*#5s4ebYyEt!8DoLGu(6E5DGk2j%V7)yM0s#XJ) zAGi%<>pa%dPBmL+WviX^9y|5ED6e0CE>-;XE|&m@_+-#LK7&Gbww zxkb*Ot0P>qvUe+#g5R#I@pN|AJAIG5J-)nMSjE*WZ6M$_mStk~L}|~ekGcQTx^~<( z#F1IrFz7!;c>!W4Br{fP+20XvAigvm%sAn&T@(yQj@YT5nS9%p$2wY)v|upvbBiH` zm$exAXMJzcySsc6k@1*Pa{1N!ZaVM%vcYu=;!jDIA?ZZExVAF@=IzL zj4k7UZNeF}IM(N;3ZB1Y?N1*fH!+@Z#%48Knu-y!S$?eb?D?`r)L698Ig%vwBsJCb z7@pRSQAxrp)zAK=0u@^*qDMpEscP!(uZi`O#Ld^GU6d9WQ-O(c*8s~n>EH1=d3WW` zmcb=KVPSjgYdghBN{#%_N2X&=52nH0-qn201-pk{P-4TfEM?zaZ$ew-FxnRwk zVLkCo0{l}WprTaa!uDgsrXaO)7d1pdCv00$EzQee(02!1?fsqcOQ)X^>4mv*{nq6Q zTpRLQbU5Ou(M0gDv6oAyF6qP-*3H({*?#jfwhY<9N};Si$TS4I@V1bmzsrXe5O=FY z;I6S`ef?@xhujdNpST$!=YQNO(CrIKR6M^XO6F5hToxz>#>Jr$7|Cj@Z4F&^;FuSO z^}F)@-2-!VL&HLZN_>d{d|IqhE!U{_u<8Y7@F>`oOuLGy+T*ju`!*%kwZzZgCXfdv zpEtKgxY%n_!1AjKfm-=XHmH>^_T`Bb*H<1@!+CARJn9nXs*gli{0f`qihplMaoI4Wcb;9=xv039&jqugG*TMg7eDT&4^H=3 zRpksWxDryX)p~5m*{@%(#68zQ?t(tq)##tVLmT(jJNO@!{195J@&BmgahYmbCe#P9 z<*$YaVY@>(5)4)eOx$(C>{^tukv9fV&ttn{BD@t+$do^0EzL z#alW;53ULa@_hd5nws?xdU?I+v<*VeXvQ4#z!i?CV&V z;|VB7_ID>;INKz5PRznW+EoSM!XwNoWG#j;Ir;U+6*`9K1hCoh|3zek+o`Hwcf8E} zpqJEa1t~KHg<->6S0bgGXEqrXHB3yVp%#0Nr2jgm(RNd3OaDkgxiGhzD}rEKItP`7 z!$BROvIHCD4mCmkbMGw}c-2Ch9V3V3kl5||CQX=$wh+hvI4 zm(cDDh>p2M6Eyw%EirL9FU@_kA#yq8>LhDZ>Y>Mz+=AOzp;{d6s{DEq9_=+nb?L=h zz*}r^{|Qis{(jpl^bt@*ZcwqU);mYSf`YSdR?Y$uEi>Xx-v69#g^W(3-m@5?k5z{+ z5@QvYHxthld$7Rn<6ZyvM4b@C0|72enVnHMZ@eJCyxv`OZOA*`@ym2a&fprg@(atJ z*$nr~loYfv@$Vj6wn{E#OtDGMn(Q~K=jhZ&owz2N{Ku0yL(|moknfnk*VAh)_Syvg z%HMqWS7?T#&PbvYA81=#UA8bsSxxrxe1cEHtAB2q)K~DZXIf&3i>9u&c|iZ=yyT1W zo->Ls)BWgy?c|8FO& zizg;rBIgqq9IsS5%1RF^N1$e(F9)3rRUHE1u@|^UpEkYuzuXX0l7aV zFg|4wBKJEcgK>->L{H0Ox8p#piBS|-%v!PJGw-p1D#cKJ^Jlf+5d#}WiFKfyRydyR z7b4f2Ng8KxGc@5IT^S+(&r3`bq*9%sw5gLFln?0HbwCePb7~FDvLSK zwk{s-uB;&D84U~#rRs~%opCl+>;gVu!M>-C-;DvbrZ^p~@mnrxTXJ%kA)mh0J0Oon zqfbY3AOYPk0D`%VlTxb|1!%wa~x%I6Z zvo!9UR0{tP^Q?COLu6cBmI|?+xO}&YV*4>`qA+fzfM@9J6Bh4!Fv8UD^}jYQP-=^- z+*s(NcrrUDx%X7|`xH4#X9eJhe5x##D`wt2ZBab&EK0&2EiibE$R5QD2c(YB1Rc&b zb}ueU^ZrUs&)I2jSm7`D?^gH%z$-pSy0el;gOLLk$S4j##klfY2i9~l1F59GtU zhmJNVK@gOo%xHQi`EdL6XY9Z6@_J%%_eJx7GF^3r`$)w@0luhb2XA4Ai|-#@+Bfsv z>x-@OXyRH+b?B3h<2;$qth?jCL{*n?>0@-s?wdW#d;n1+|1q{T>W)vDC5Ws1AVjVH z&S;E}=Y_Q=oen~PG`PRm;mZFeiO2iU7FO(55&HHgbadF(wk0>M!~=BQ?eWxVU%#b& zVgO<_DG>WqhDlNz?9U3{6h-5pensAIP2M;Jc>Ewa=3bHWuit>D0_a0C(={Brw$oQkt?u-0)i9UTj- z4zQL-66BW9m$lbV44vy8Ok}^m=8vkF+8M~1?0EW1c_j0o$;H8M*xmeMNY8GXhtw|} z(lu$LX1NI1{i-78 zxU!v3FECq0$X9Sz^kmwAidx?A)(vPUpH$wQAu}0Etm})%5U8zFaSF&$#DZ~)pDf(d zkd9?aJZACp_cvtsFW=LYI!JaYpI94V6U`cT z@h+9{m3Ctd?CP7ps*3{A=e;DP0|lehaUef=y@f^NxSxl|hPA~CYc1~*6pDM-GBW^U ztRBtg1$~Z|8+I22MWj1zzx!;|Vp2dQfuL~sxYwYb<@k-D=^41U(xE0u-IX;rH_sjN zI7LnksVUePAfyTWS&7<; zbm(4ND3O?Nez%|ValXz(*Fk%(0AWN^+0I)R2z@~lYeCPhKKH9#6OevrPoH2}ij;*9 zLTPnDd9nIR5-pQ9o z=*dl6lHcha7*?!0oVM|4@bL*ltvak&>sqpR&q>wxXiI>zZzm)5GN_#OMUPvOgnUD< zDrDTUDV<-t zhi4_PJ;Fpe=PPSCf33v%0OIRC@uMJ?Q4yrLE=!gy{Il%GEThpX;^*FScS2L1?ze5` zFy;?!Z}{GgzZ8icFe%wYjkUQrpmsg`D`Z!RuUE{#pg3!> zvSQOQ5!PQ4VW$M{d(p~@5nf1kf$Oj608JYAed^mva5x=b zH=IXCD1bHj)k|CBgH!8*VHaIqmflrUOYBl-_LKsE)N?(iazWqPy1I-P(j)92S;iLy z=CwzIpgc2qW1R}39XHg;ptdXbL_k3NtCy&NfR71TX?OLJ3EWvbSHCn3sUvn@OPY6Gl%RGb_7`GW_o8)7&k_l^1+8mi41K`C5^kEpE3XsnvJ$==frG7LtF~>0m-o zDOn`d=2$J$>i)Dlk=nulwQzNEXQLS3w*bxT9l;V#bB|d%O5y!V>+Jf3E->d=#XsD2 zc=jMr^Dl`gP+2mQ4zkmqr@i=qi`^N>Xp{mH&OyyAvE3<ET_P~3?M z$;^MAXp4)a?-c=qw6Zp|4a@cWtl`>a66nmGGRc}k|8Ly;pJtCrCEvzY3l{UfDEGGQ zY_@B?wCbvR&PIG{y&GiIvW|nQvpv=AgOF?N7JfUuPcoCx8!UdZea85?Xx-nIGpsTd94BM;cQ0PQ2C9~*@l0OQfSsim83!)?Ln03#^Iz#m$+>Y9yHl*7Rwk{o5c-V zc8{wrE|-T?9ic6#(8sB9wtVk);mr;mvldkD52jU(zrQ9HVG)-$ZGKMz#rSO_CVfGZ z2C4pELqQsd1mpIyZkW`3y6w5pC4T9v|9m2L4>y-CBuYv@=6!9KUeWK-n+fdHOmnJa z(a_w^I{M2KcX#*838mklEI%A)G7b-uswn8_XlcK|FODP$&|VPa3@{3BpA;!PoJoqn zZKdgWPZ(`J?hX&XU;{I#EtK;49$+-O@k%Ry0~3qIjJeK#KXQ<8uOAnm6Odv8hUj2k zGzBNshRFLr?EQH>)a@HSj8CalinLH#+p5Zgs~1;$C9PGqmpFo#3+O8 zWH*?k>|+`GGN!UMmQl9BSbmrL#{KzzU%$Vf*Yn5YPsY5j_qCkYc^>C+9;Zm`=XGw* zi20N^SJm>s9+N|DeZXslnXw4pd!&@}M*zwp(u`aECU(cV=w8d@&b5(_3heguQ3qDt z5-Y3t@5*{J0&w@8v(>8V|BVUlzO-FnCRkKAW3AyXAW_ogC(d}x*3iP!bwZ!!HC0b zDS^%z_1vZ4VhTcp+2*g8aw4gQ_yVAne84Q;G;NW0R*p5P37F4f&2nx7y`>3KnaSSvieRIr7nQFZn7 zKr0Bc6ykS)5cqnVxasG1o+eL7i4K^1iimXH_GMVJ2VQI>KqcF^tqm#_fqP7wD=(N? z+T|eyW4g1mW2wVV1-x48FEJgWz7rPj9$6L@rhXrJeQ2c4K!;u5P+xY1V3AaUZsk{B zcYQ^;MGzFP~J&h)50C3q9)-dl#gzFYwG#hT2Re=Fx|bX zERKJ;h(lS{c759HGB%3~_sY1N-L3J*ZM>DW3qs1*H5260c0jK58=`NoJ;5-Qt~CdX zh$Q_j`kOc(SUw-?*e*MhtAxss;=TE1Hen*(I91W~no|2C}>S>MI|Q(oS^;N*$cuQ^?⪙J6uM%b+#4 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�-g=`cE2llUI5>aI$$%Z`_#JH|w9&D(xON&jvF4`NwjgG4I!@^Hu?c(4so?Q9$Rx%iC)r90FfxR5pn$T%;g~QoNXFdU z|M6O@Wqy=F?|=VPn0D`=kZSy3t5&1cc}CatvWl#d+S=Nx)}+1rjJp-A0l*<%W>_N? zWzEfnS;Ew0#l6;letFJNZj-LG_jaFNfMxCJ?UlchCD?XZ$9Rfj8QUY~wQ;wPZGSn# zcD~Ayzj0naGqmwx5qY@(zGv6%HMloox@5GC(&Q4i_iZ-x2h>~u4?m>m&m0KZX-XEH7{O=$BCr*2({GTu9 z{vTr<^8ds?_!5Z_?|>))9ZD1$jVp(O1L#~kmEzy$h1B`n{tX$Nr;?a*-ZP$xUsC&Xj+zziXKnENFzl|!ZqD_Oeg)MG-b6%#*_M${F zfZuiD(upLuLb(^;9v+6T_`>S>mOZFIzd#FV2{0p>Qe^d9P~)+u-)r8yrn50y#9@Kc zdXftC!r1401BXf+(ooIg_7d#QaHaDh^T1b(Id|?{2NqlI^)5D$3AD7}Ko)>1KAPo5 z+>rNc2FXp0_G>70qP!zq7si{2=l8q1Qvx|D{UrGdz+2w9Q{9nh9&)gxtymSU7XUk?{pwGjo|qq z0O*gyxS@`BMDgRgQ-alyU4Zr}b^pG-X#OmS-w z%v`#Bg33O}|h=xG*#LB+`l((a2C~;EQok~yRS)ayRQ#1PeL$mgT)p%lo{Yscp4W=AgL&}}KD&b!NdI4m+ zIG!2E0yD=kN3oozCo|zQOjiFCVM;+nGWDDicyFqN(MAV^Y8I$BE-Zl+7^FT9 z4b|@ll@Jy0-&+kXk-O>3B(+Z+TEx#LiEO+nt~D8aPpK`;&7D=OTG2mXF2oWx*9B6A zws3E);@{S37-Rh>@1f@^Xdk`b_~&9R32Pj5$zn&Js!L#d+eD)!%S=|gIB}j-R~ZIH zHoa}qAB*C|(@2~mOBlXc@~$uowui{&%o6yR+hNcfM<4D+ZL}^LxbQQ~X*LxJ6>+D| zV6n^(1j@SFCKCoZ$`uDDs-K8IC>I5b;$Idomeb#^ z)gux&A#!0mI+(X4uz(tz9kmp`Jk!qvO5jyNev>!s)vF`0burj`%nNJ>z?(O#u&$|L zc~K<;ZGj_^p+I)018_!F`8X1*Jaqv74E)al@LYS4G881=LgGf+Qph8HPjUyYkeT4# zZl@0M(H%MQi#ei^8s0cY%d^DQb`o{Aw}-Kds~@u$gTAAu+H4}f9X;syZ793Ph^MJ7 z`BawqPeOL7=-UycoRU7Hs(X2XIGiJEdXMPPij$es3~P=Tt2^DjyKZ8NBBsqF#|-Q8 z@=U3RZDlScRCdfqy!(N?@JaJ8>5vZEa!c3^YKlL_BP!u<543;#fwxJrf5s9tCz0kQ zrN=&d@wiI{*En<8T?}^1_Vdk;;N?;DFsDk;dHAXXIIYYM@`ooJ*0Ffy zW{2FsVzpJInoSUdq}SW<*RYp4k_jSH7@>?!^@4Ef^$ID!3`rTt%?@IT90Ms#_aM2I zW*c#9gJnI)1+)22pj8>8>hG$2ny%bIPDt5MC?ECD&H1Rxz_%~%!=pBIAwjYr_N0!p zarf|Yt#^ig0+*5E;Q6Q&#h@*A$kl-Lr5X_E1u=O$t0;$OZ)vNr^!NAU(72ApYUF|Y ziJJT}16KYI(U|q&?&PR~;4U6_p5V1-XRhgPGe-_-@)tXHeYjmvr)?oN;4agWoQ*o}Od!=fz zU9Nx15I3Y9Ks4c+67Towr)%Py7CZD?4QGB{SJ9;0g-C^H-lmaWkN~uQKiaZ!loeZ6 ze?(TMUz-nou<&!B(Tfma!%c1I={4%p!wg%=!;@7MVaQ>{2kF_1D&rJ@{va2rA{N!F z@({(moE(2km95~FZIb!X?@t(qvd%<`n{D_iE7w>54jg8x8u2319e79gV7{!ZY%Brt zo-;whP8$-u=yUp9>ihRU)+y5;r+XoybXQM*j-)$tp{vu_%uKHLyvLJ(<2Gg2GD2oz znM=<^KJzFr^zyY^HdwyIe50R5E{QA7KCX||=>(9bykM;|jx8Iw?)LMmXr=}C6{B)e zAg#(q+&3aS|{Aq*Z=yOR6v)gZV(Wm8o0#V6(;R6oB!rTTk)|kBhld;y=0i; zuZw0k|JHxN%zTokW6|_LwPV=3l)sx4YMfqI9srHP^MBu*=X%C*rt9v9>|vISa1|br zL+)%m}e0e9Ga}6Dxw2v`*G87r~=XncNG)udSsi9v62Vt(Jxq4Disdm$d5k zCahe#{i3ONMZQM=e!obmzU6I$Wn*sx7G{%_Dcb|p&SAXf{X{GC^3j!N*AM>v!v0im zPmfCD8xAZ^r1o0Vk5ea)0RaJAo2U)#3lPf)lpgqV>ZDXdyn%~Kbhgm}pATt%N~a9M z)bj8B9_dlRvKz{`*S3Mx8jTuOaO%tbAtE9&RtCCYdjm%;>4?~0AD&pz_!|d)&YTg@ z-q3L!Dw4??Xnb#OLYY4Zk_d#6nJ66v-+RC_Q2>bFJkfg?!R}8;&E8T|xpJTy&@x`M z(qtceFei>wdYlZVbN(ZebZStWelyiT6){2GeFIP)x)N5I`N3ehuI^2!eIfqc4UbPR zHn_0%gEDg$Q&i5n4_JkY9R6PKo#Eup;GN#Q7~c}D2Dut!b+RVEdB2zbPAgbQ^}x_jRh<_xh%c(SRYz{Fq^8QLW5rFh zDBzvPVB@8st{s8Pi@^cTf8M{DzUVz*g`CWQ8}zoq+utQL73doqBcHx_+{m*1)7K)A z_tuLSN18!%;t;wfk?E0)Y~z#eYAVlK6uf-sf=?T6lE87pF?wsND0hK5IN0x{bExp> z=gimFf{^CO$``ps-B&b^{DzqY2nLItbZ=5oj@{fIIB)itFF|uun5S6wquvL67F^2XZUrd6h#CifKqRie4K4rZ zk#sGD;byn!Z52#@z9{wVx)6YF`(HGb%YF1K%-;G4G~<@Qc}}SS+Ig(9j$jV9oN3p0 z4vY^bs36$B-(zLaE-q)<6>*K>yD>*^5;*%imURqRRvw7zVWmQX7ZH~|&1S7>U>I>K za%BAyG8Q;5handa{G}p!R7E8*DQWw}cW$%V$H4S$U!1LYaikkaJ=QXDGk(Ww@-J@g zY>&%}H|L39o;p5GGXccvjZyFX$LVtC1#6*TSKk!mt0~_kdO3>^@3ZsrM5-0)G7Y_0 zf~hLw)j;L83s~QXY)%GlWc~CR!1@*wNbz|%$o*WihjqoUSJp6(?$L*2zmh|rognS9 zvxWb^_P+cd%KiQS9z>-uWXWz4CyA7OPb0F2NhQn4nthjjD!nNpIf{_v2qRmz>{=LF zENLt=whoc8RT>jx_+C2a{XT!d_t($;TRqIoeP8$MdS1_Kf3@_*ydYn<=Y^+b`Nq@g z?3dV+I0uKZ0HlGVvuJpl$c}F45(?gl4@7i1CF_s=fazZHwYz9y$s%e?QOKpb)RmU2 zO}vjCh%nT({OxUhTar`MLwblusGy?bh6R9T5sqd};nqBb?Wt!zx?CrrOj&83s~-(| zD-f^Shs7%6y}Z5S4q?iVj298~B&P2qvg3Sx7m2r(^eQ|2Cn9EZTP}p8dxk4PxZ@n$ z*pbyI{7CbT$q2?4L15HSYKZcATmCURD0+( zf~rR?G=DWp7S#w6!0YWb=)!6p*?G8Cj6BBbqv)}0AkORtD3U7lF zC6A77>_sTIuK+Whk+r2AtBD(IeWlCQpK@_1mvd6yKH3#v`F@yPnBy zcRem=e`Mw2kd8<@ARseo7Z2t!3U;#6`Os_r_8VIG#uR~Y4B6pbuGWx{iyvae<(xJf z5&lbw&V#g0bY>=?7IsWJ;Fv)m@|FfB22)#Gdm7!qrJteX-Z0;2qum=79&kWb_->tu zlv|PW=%z?Xcp%iCuzd zbr=ntVDj$E$Fs~f&*6eC>-B&r>oV`z`~5DF5T>yWNJhy&x8Ca9>^c(B&HX4w*)Oa! zdH)2M2`4rlblSkHT|7gf2awG@kM^`XQRn9c_fER;Eb;<&bs!4W9kvkC?si~~LAP73 zGvfq5GLB9=PovT3v#Y)EYxpapW(qBtPE8H}_y)WA{q)7H``8;*(*Rz3$Dap_*mp_>>Ur z6Nt07r<`uMY?K(L0wFhwS5Y5|Y-GkPt8NU_DORbw@_J#U+BArPosN!T4P(WxtZVr_ zcDOy?C|FG8uY0bU-klRb@vZk=pbELX<5yinA%5y>sHRhi@NSE#Y70-kjrgo4`~nVr zkkJjy-E1ng1TbQ)BT3L-Xu2|yJvT9Wyw#`2y;`lQoN}g?JAvv%ZCq;b+~V%*;1rPe z6fQn@lRewPc!jg>XEb2p_Z})#5=DX)Y+!F6#{})hbFwQ~KX!NpUUVH$OJO`~-=^A3 zhaXo2f4dPXIRGeX@5%!X8SBSar7%MT>QLW9D?Rr1jdE&Jc@zpiy7y@jK;Nu(@07A$ zO)109^Fjap#uA1c{xpJt>JQ<)lfE@^v30aSWc1@{iCKK#yafD=3S*tOcjbdt3_tdy zEoik5dhPZRUBTO@Qfb=DE#)ayyE^%NzwPf`5ubZno+yuejY0}+X|6KcrbYi))? z=0C4=xhGeW1QnOQ-`DE*^VDOIa$hY9+J=T~B^WA)EC6SUayynaiph2e>zaL+#rM3N zaW|JEe4`y}Tw{8HuW?tcky>bQjHj52m+h0hDU5Ic)QJkqr7RN4=Nl*3?lfJcnaQMU z46ZcSGDW1$Y}t@hFn3My`_{uzS!PcPN}^V4oyK<216P;Mv}2p@xE@=>q1T`W{%bEB zym#C4@WR505Q^~g*YZ_uoacymct6yE?uHZ~$)IY9#d%X8SANdhe@ z!-43%{Dej`Y-7|jY5-zH9^yt_K`&Z{HIHwhdH0HCnaOAub~)}4y=%%F)M)tFqL|9W z1T`NKzcl1YdGU*Xob>%xW-xS0lAIyr!nN}n;<@D$^5C7ZOu7@tR}Km>LMr>cc+-_{ ze}%IjJNtMOgW*O37U!=wm2B=}EI)y1xc@QI8{?eR8xys^T*ShTPe5%@9| z8E2xQ@*hCVH|m-+A=GSu)8Spr{WcHNBZb+e)gMcBt~9$dln0EE*A_7ToI7;zaxv(? zXR=0@K;Hgg`a$B|L;nHClA!5n8J+Y{JL&B?30d+|Q1j8HU+oGxV< zVoO{N4C21R6fvDyfr{zBYXRE(7pAPz&hLKIq3i3&IY~~D1HoG+JfSk%z^3d9Vrcg= z9KvO*Y`Q-4O2&QHu4t`LzTO#O^K`l7l+1% zR+_ma6w2XdU6VEX1oA#%zF@IT;1zxXcoBoP(bN^~RLfF6bbrsAgNSMM$in-goS-*d z8@tQrQ&c)fMai$ZRL;l(FdJh1Dm#D)>&UjH{Bo#nA0ZGNbt=#BE&`j6J8x&FW*#(h zTiYWqCM@DuR`W%yJH^}^)b8a*BuMm~mBg$YVpN@avIArpj#Hs)ZG8b}ad~Da3zF5b zgh+>SdCW$W{>Pi}znZv~9r|GXJ2MMrd-Jw}6d!zFXmdmS!W_b}u{Y)hic*hvj_xDd zDiX+yFPH28Fq5gUC6W7{?8IL@>uc)wq9_MCWWY@P;7~Pr{9?9o$sK8kAWyLNEnb@i z-`JQ-OqQG`h6>^*FKadcb~RPQcWw`yu?drMN3Mvq8#Hy=VsWy!j2)Ivha#n_{^QZp z+vvk}X&B3V4AKLSWVi3#K97R^?O~RMNnNlojFvi6@1kcH$8q$9-vt@W+iQ};(wKDc z!XCX`Vr0xlOw89OVW=GC^W~_3OlEeKHO@)7(`VN;=j24uos;QdNBp)s9IlPDg2Z7_d9P#b(4Z;dvfa{X;c@(=_DkjQtT$uegWrj5R;_SYp*n1 z#Y?L$#8`j*p+z8H)&qsO@8#vCs{z$B1IbDQz8-P$VxKnE@!6pDc6o*t%6J)zoO8?{ z1D3>OB_dgtOk@@E7}B`ngv(?5`Y2I*GQzPg>4^egnwXzSC;-R4V8T8!gyZ&yQ z?C7-SarX*rcXe@?!!Z+X9*?s4*|6aB} z&v$B~|GoIdw$0-IuHr98!PEHnGE4wA`R^sCX@=+d_rquUe+OIi?{$ldPx9Z-Vr@gV zA^m^Xte{SgSEH(ocv6p@g4*_{rd!cOJ`VV zkt$=BX;nAm7^OjoOeEacc#?9B6@9pBWOyrbM4|mkJ#Z>dP(_$PSM}Mk@`lQnVE4ab8Kl; ziGy)t`}s8eIq|tBc=ePOBlJz=T((JJ?DONk+p_Fmy6*jtuG7%C7Ww-dJZVYLL6fl7 zs`rM@>|gcvmB=}u;Y+U3+5MD}k*nh*tNSNGZ+jfEeP}4{Au}YUvZ93AK!{vNa+0<& z;uf3Hf4>k#43tC6syd2nN(|N=8}r4-SUO;ny5+<>lq#+>^u2E}XU9Lc!Q8 zC++R+Uke34SDLXWL?(}2%;ac1T`I3P;r2IA(Wm@4sGfX6PAC_driiZDNi`{d;Jv$beTA%1xHt1}kd#KVOK- z)QlDQAqtRGvW`@9CXGe{3JDvuDmI3AbOEpi{zDMFhAy_AyC8pYCgl2bcwi)Z!@i)!7t-?xj{ry zg75YzHTv`eLsxFn>Oo!G+Q}O|QIAM6#}tqNGmz*{2*vzWYjG(JQoq@oUKxqnSxLSg zB?QfsU?u!gv0-_HN$>u{cjTGdqTbe8Z&{4U z<=Lu)Gqp6$g33b1v^Xke=TT z9U9?AplX96N<1%xX)`Xg<_;TtIHg`hpw|0-qlRe4*xAj7i_Tua>AZfp^?KuV{FHh^ zDHRvC)zZ4`1huH4`aEp+5o4BN${+=qT$S7zJNWVAk5fxOAx(5!?#K})7rq+GNOUi$ z)oZ4#K$uiA*Fulm((`q~xk@|3A&k8}s_Qy8>A%#To{sS3bRe|)L^ZmB4?k-FCng<9f z?y?xHEG|OsrdR*Rj;y&3R5=CSQOGxk%IV*?7l*zRT85D$3Rw9RaMtoKL?&g z0dE?d6p^q{K$w8Vg}M8aI#T?-yds~KhJh6Co0yoC?>PGG`q(SOX;+-iNMKGjDjG6T za-ErX`{)s`KbF|&-Fxr8yfk@1DR$%M#uZMOiJ2;xwuY=yo$1E7T)*V3hsM%=-hO_% zMc2^=aFfjMb&CfujCi%guIBOAf`d@r%}os4L{08QoR;KKycagK)x4&sb9KUX(Ghw- z8hZr|6b~J``Jcg~-6IEn#15ar)ibgnk8-{k!@xabm43YDwcpoaTzl?)*OD6PDKUM9}xI zIsT~QjN=f`SPW#5PBV@^i@isFEr@8B64ZoU91*L00+E7NKZWa+S5#E&b^2Y@iY$`8jZpap+-3*k6@NzN-Qb1Czbsu ztA0u1yX^%J45W4JL{s9af_hZfK|M#7fYL;5Sb!DGbAop?@F=G$VR~9Zi?5z2x4eIIfPSG(q&Z&K?Zbo9EA8SG0E%rFQ zz0RWeiO+sD2^~}4PGf><&1035y38i%_h)e4#RS5-FAp0x>ZcH15fbV*;Fp&aE@j8B z=JosIXi*UdPAM$UG=@3z?Wm8xD^XuxQxmP?A5T1zGBwKPybB+M)I!PaQ(L)E?{WhG zM^;c0~E7&OlxN~7_V7}(S9bunK2RJ9SffK5= z!Q>i`;dm+J;v8f1pjI6_@*E?Obh~z!#x@|1k-1JT-`u7vVSIYVMFU!94uyoPN;53T z{-(M3tK55$fYY(xSr=_2TjVfpoW2D10AKhwa<;;;Wq*5Wuv?RWfmF|1(^v$7Mf6n= z>w1o;lFeZO0)gvIg-3FhOZpBgl7EqP$;LFX&ReNd8a3@_wH1!48p|^&R9Hyr7{k%b z5RT!$s>P)B@T)WhaVyetLJFgG_|uN-`6VTD4hVht++Ao0q#S6T5K0$0y;7GrIy5v3 zZP_0^dox``*3xO@&LchCKZO zPB2W>T!5_SUk0Wobyd0tI3f<+@K#1o*NQZtX%aiU;-7u(tx&MHQD_iQ+VMrdTbjS* zg!+dpXpzqWy8C))iHL|yuvB&m7(spA)!4g{+bbovK6Y#pU*3Sk(tM8``w5^bOmdn>}f~bVuDiFed&i%-6hRN%xq0cIeAQ>#_H=2%1G%t=H9p!$qgAt9qm!LqARhemwG;bd8@}PPDOj? zH4e^1m$bxcuBpTl1ohU>pX43W|D&;bTw>{Wu58`0+6kRI7MH zcX&DT`bv+Q(hu@!X; zPABffH{oc(bsJb7Hd)H$_lRFz%wQnL^)}$z)Em|p4+J6#K*-m_IFW2Nv*v9_0 z|6xCRE`(5EmCM3z@FQDc3U-YM3!|*N_8IMPN=yvN-YKN&Gt4L}qZo*0)JKIBm&Frg z`dB+N(GCmaqv>^xylgLibE$j3bHh=JDC9E!wnY{zz17I^${bN(;{g$RK&|L!C4|F; zap+m(JS);riPb^$3`^mYiA&;@pWRJe0*Z7 zsT4A~^@6qa2bM{Bav71W*?mF8m*vMp{G__MYh+tg z)l-7y@eo+7$|j=JPhxu#v6ukS*~`dYq>Zbch)EV4>!B zC)LjAcS~fib?L7!P?MXm6IdZ&8#dC(V@|ZSU8n z5F+ZKht@cYYuoAEDE9uCBTf)JG22yAP2evbethj=2mn2pM6u{QQBs(xM#68H&K^qJ zVfE&w-I!yCY)6;6X_7l%s>K$qUUrS~1g~N_{;nDWfMwCX{dc2yM|y~>XaDv}zglM~m8{Ss( z2n~HoV22lf5oxQ>?!4Lc9bA(i%3L+6yCaTgn2b>wt=>hQ7yQG;8ll(hK-7Q?9J4c3 z&VPp_iv=Mw-Amc}R89pCSsJgy&?D#uUIH_B|3HV~^dEim#FbShzrNqqyS;W$f}&a5 z=lmhea{A2)9{7cy4D8`zly8AGWXaeNV186>|;K^OhO2rBubmC;gCO2L|vYG}!b0!b|$6 zlDCcjFhZrj!>u1Vfg4HW{}l-Dyikl(U7$C^b+@V7a>LDvJZu#D-d*aPxf>V@coEa*G#zoq1 z%Epw)fjPfB;PzaTRAXVm94oAj4Exv{M>`Wu5$HHWGQT1IheeU%S&{_h63p?VYo*u> z*i{L+>`wW`T!sF3pD-_{g2kBf*Cv2TTU~dGFGL%Rz&94Lr3oRq7O#$fOzf(FYT<8d zl+w~tBFBkJ>6(Y#ds~;=MqYdiHW>JtBc4k1&rorW7x;Sxvs9y|y zevf3m@s9-9A}nAD191{)lDs!xYap>antsLyYqpoMwr-;{gEr_)9FVZB?QT^@VyD$D zP79Lk;vKgF-u!V$qPv18se^0JwaM0{!Ddk1iBQqmIH=%Xuj-)=)88Fzc&0Ry=BMDH zH5U?DPKfOlFhZUe74+s!sn^3CrIp5YdBDem3!0M19sV>aCF^Y+_pA&+|I&xYj=X7k z#Z+GV4GUOv-~&C&mN>PWT}E%;zJ)rev$*@Wx~?KJ+(BJ8o{P8J8MtWI$Dw7Z1t9UT@kxc3c)lmaI&b*OubSs zzed6`tNKJ>&Jf~LM-hiG4ogj(!tyikfoRe8=f={{Is>nL%epFD`c-NvR4u<+K<9~d$-#UtjuPsA2*ucGq*NPVqj53j*g67L9eoN8l9&A@|AV5G?xS+4lB9X&7BRY9Y|w)YLTf;cf|e%=Z8uw%eGXz4&xn znl!q*VzowTh7%5BZh6HWi=t)dip;Ym*(0`OS&BEVR`sIdj~HuYYbn8$Y7L>BbU^HC z0@-=UR7e&xo6n3wr&R21=Z6E(qfa!}m&>>Sf#5h#Bf$(7A+E_jtBm?!#pnrtn7%P! zI2{Xg97`MuW}IC1sDJ^D^YC!Ft;<+xkw|VcYtrcmU!MX(DkSN`X;e~~)`I+ka7ESW zJM+jNC0-|C8qncfiy?|!Lv5%D^0C-!uR&hERnB>&&9rDhkS@cu4Y8MA{x=K*a`y%( zFsYenHscTII)*GiV$Q9oX_ihiHr?PMD!?0(#S9?HRrCDXM=)w@t!?@^5=2FU4v0d} zYuq%Q1P+zo=`WlC%v_!8Z~N3F52 z$|gk*(XUR_t{|+~U$`*CAC#_^VN%AM)}1mHt+ex6y5Y1j!XOuY9%6+QY&GV)CwQY# zBmz!xwq6M;81D@Z4j%TcqIfUf2CE1oiN04t*iDgD-5e`}65@1D(wV)E35wa~4y9r6 zgp|(A!~L5NBc3TJ`fLCYBF@?5b+KIFj~`=V+r z2c^Mp(9473|7L);WF_}&F_y0$POUXJ_F81CE+#?_b_GYX%^tmlT;ao45b6sD=9>C+ zJ4PgIL;obG&gKo!nR!|%)vsklboWk5GQ`C_CM5g`UT=h|A;vgSnlF#dBy7G&k(v7* zoNiL+2SHHp-~tbc&3DjDqqn^yASGETeH%vl-eeq}pg`@Y5{zdcoFxh4%Gi&Jx9cLO vSkHOzCB{Jt9A*YQclT%=+BT&fe{G@oHo|a991k+K`*KbjT42i!oUi>qT+6C> literal 0 HcmV?d00001 diff --git a/doc/src/JPG/speed-vs-settings.png b/doc/src/JPG/speed-vs-settings.png new file mode 100644 index 0000000000000000000000000000000000000000..30d68169c16d1e2d74f05cd02d8be5c197b9dde7 GIT binary patch literal 97294 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

XnHOIoo#rkJs}%gy!m+Jhu-3joVL}viu+RzWfo& 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 JPDHLkV1hH#`?LT6 literal 0 HcmV?d00001 diff --git a/doc/src/SVG/speed-parallel-scaling.svg b/doc/src/SVG/speed-parallel-scaling.svg new file mode 100644 index 00000000000..574fbcecb3d --- /dev/null +++ b/doc/src/SVG/speed-parallel-scaling.svg @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + +0.2 + +0.5 + +1 + +2 + +5 + +10 + +20 + +performance (Matom-step/s) + +ideal scaling + + + + + + + + + + + + + + + + + + +1 +2 +4 +8 +16 +32 +64 +128 + +0 + +25 + +50 + +75 + +100 + +parallel efficiency (%) + + + + + + + + + + + + + + + + + + +1 +2 +4 +8 +16 +32 +64 +128 +number of MPI tasks + + +256000 atoms + +32000 atoms + diff --git a/doc/src/SVG/speed-vs-settings.svg b/doc/src/SVG/speed-vs-settings.svg new file mode 100644 index 00000000000..c21fcae3df7 --- /dev/null +++ b/doc/src/SVG/speed-vs-settings.svg @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + +0 + +50 + +100 + +150 + +200 + +250 + +settings item (numbered list in the text) +performance (katom-step/s) + +reference: 2 (-O2 -g) + +184 +1 + +231 +2 + +236 +3 + +240 +4 + +267 +5 + +273 +6 + +181 +7 + +162 +8 + +20 +9 + + +compiler optimization (1-4) + +code/settings (5-6) + +model accuracy (7-9) + diff --git a/doc/src/SVG/speed-vs-size.svg b/doc/src/SVG/speed-vs-size.svg new file mode 100644 index 00000000000..e81f09d3d1e --- /dev/null +++ b/doc/src/SVG/speed-vs-size.svg @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + +0 + +50 + +100 + +150 + +200 + +250 + +number of atoms +performance (katom-step/s) + +229 + +220 +32k + +232 + +222 +64k + +231 + +217 +128k + +226 + +221 +256k + +230 + +221 +864k + + + +AMD Ryzen Threadripper PRO 9985WX (2025) + +AMD Ryzen 7 7840HS (2023) + +Intel Xeon E5-2650 v4 (2016) + diff --git a/doc/src/Speed_measure.rst b/doc/src/Speed_measure.rst index 2fe838cb22e..5c29472df70 100644 --- a/doc/src/Speed_measure.rst +++ b/doc/src/Speed_measure.rst @@ -116,6 +116,12 @@ larger through replication in the three dimensions by settings variables "x", "y", "z" to values other than 1 from the command line with the "-var" flag. Example: +.. only:: html + + .. image:: JPG/speed-vs-size.png + :width: 60% + :align: right + - 32000 atoms: 228.8 katom-step/s - 64000 atoms: 231.6 katom-step/s - 128000 atoms: 231.1 katom-step/s @@ -141,6 +147,14 @@ DDR4-2400 memory channels) leads to a lower performance of approximately cases, when looking at multiple runs, the katom-step/s property fluctuates by approximately 1% around the average. +.. only:: latex + + .. image:: JPG/speed-vs-size.png + :width: 75% + :align: center + +------ + From here on we are looking at the performance for the 256000 atom system only and change several settings incrementally: @@ -162,6 +176,15 @@ slowdown (to about half the speed). Finally, using regular Ewald summation causes a massive slowdown due to the bad algorithmic scaling with system size. +.. image:: JPG/speed-vs-settings.png + :width: 75% + :align: center + +.. trick to add a little space +.. only:: html + + .. image:: JPG/empty.png + Examples comparing parallel performance ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -203,6 +226,18 @@ to the communication overhead: - 64 MPI tasks: 7.477 Matom-step/s, :math:`P_{eff} = 42\%` - 128 MPI tasks: 8.069 Matom-step/s, :math:`P_{eff} = 23\%` +.. figure:: JPG/speed-parallel-scaling.png + :figwidth: 70% + :align: center + + Parallel scaling of the two data sets above on the AMD Ryzen + Threadripper PRO 9985WX: absolute performance compared to ideal + linear scaling (top, double-logarithmic scale) and the corresponding + parallel efficiency (bottom). The smaller system drops off earlier + because its number of work units per MPI task is smaller relative to + the communication overhead; the 128-task data points use + hyper-threading (the CPU has 64 physical cores). + Measuring performance of your input deck ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ From 9db9aa35bec2d956c9d31408521e57a4dc1497cc Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 8 Jul 2026 18:11:28 -0400 Subject: [PATCH 082/116] upgrade MathJax to bugfix release 4.1.3 --- doc/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/Makefile b/doc/Makefile index 726b2963f09..9733a06c3cf 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -13,7 +13,7 @@ VENV = $(BUILDDIR)/docenv ANCHORCHECK = $(VENV)/bin/rst_anchor_check SPHINXCONFIG = $(BUILDDIR)/utils/sphinx-config MATHJAX = $(SPHINXCONFIG)/_static/mathjax -MATHJAXTAG = 4.1.2 +MATHJAXTAG = 4.1.3 PYTHON = $(word 3,$(shell type python3)) DOXYGEN = $(word 3,$(shell type doxygen)) From 56da6efab19d87b2e8312ce98a424bafc37f1e05 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 8 Jul 2026 23:11:36 -0400 Subject: [PATCH 083/116] we don't want to run coverity scan on GitHub anymore --- .github/workflows/coverity.yml | 125 --------------------------------- 1 file changed, 125 deletions(-) delete mode 100644 .github/workflows/coverity.yml diff --git a/.github/workflows/coverity.yml b/.github/workflows/coverity.yml deleted file mode 100644 index fa54ec8abd1..00000000000 --- a/.github/workflows/coverity.yml +++ /dev/null @@ -1,125 +0,0 @@ -name: "Run Coverity Scan" - -on: - schedule: - - cron: "0 0 * * FRI" - - workflow_dispatch: - -# Coverity Scan project name. Override by setting a repository variable named -# COVERITY_PROJECT (Settings -> Secrets and variables -> Actions -> Variables); -# it falls back to "LAMMPS" when the variable is unset. Keep this in sync with -# the exact project name shown on scan.coverity.com. The matching COVERITY_TOKEN -# and COVERITY_EMAIL live in Actions secrets. -env: - COVERITY_PROJECT: ${{ vars.COVERITY_PROJECT || 'LAMMPS' }} - -jobs: - analyze: - name: Analyze - if: ${{ github.repository == 'lammps/lammps' }} - runs-on: ubuntu-latest - container: - image: lammps/buildenv:ubuntu22.04 - - steps: - - name: Checkout repository - uses: actions/checkout@v7 - with: - fetch-depth: 2 - - - name: Create Build and Download Folder - run: mkdir build download - - - name: Cache Coverity - id: cache-coverity - uses: actions/cache@v5 - with: - path: ./download/ - key: ${{ runner.os }}-download-${{ hashFiles('**/coverity_tool.*') }} - - - name: Download Coverity if necessary - id: download-coverity - if: steps.cache-coverity.outputs.cache-hit != 'true' - working-directory: download - run: | - if ! wget -nv --server-response \ - --post-data "token=${{ secrets.COVERITY_TOKEN }}&project=${{ env.COVERITY_PROJECT }}" \ - -O coverity_tool.tgz \ - https://scan.coverity.com/download/linux64 2> wget.log; then - cat wget.log - if grep -q "ERROR 404" wget.log; then - echo "::warning::Coverity Scan endpoint returned 404 (service likely offline); skipping." - echo "skip=true" >> "$GITHUB_OUTPUT" - exit 0 - fi - exit 1 - fi - wget -nv https://scan.coverity.com/download/linux64 --post-data "token=${{ secrets.COVERITY_TOKEN }}&project=${{ env.COVERITY_PROJECT }}&md5=1" -O coverity_tool.md5 - echo " coverity_tool.tgz" >> coverity_tool.md5 - md5sum -c coverity_tool.md5 - - - name: Setup Coverity - if: steps.download-coverity.outputs.skip != 'true' - run: | - tar xzf download/coverity_tool.tgz - ln -s cov-analysis-linux64-* coverity - - - name: Configure LAMMPS via CMake - if: steps.download-coverity.outputs.skip != 'true' - shell: bash - working-directory: build - run: | - cmake \ - -C ../cmake/presets/clang.cmake \ - -C ../cmake/presets/most.cmake \ - -C ../cmake/presets/kokkos-openmp.cmake \ - -D CMAKE_BUILD_TYPE="RelWithDebug" \ - -D CMAKE_TUNE_FLAGS="-Wall -Wextra -Wno-unused-result" \ - -D BUILD_MPI=on \ - -D BUILD_OMP=on \ - -D BUILD_SHARED_LIBS=on \ - -D LAMMPS_SIZES=SMALLBIG \ - -D DOWNLOAD_POTENTIALS=off \ - -D PKG_H5MD=on \ - -D PKG_INTEL=on \ - -D PKG_LATBOLTZ=on \ - -D PKG_MANIFOLD=on \ - -D PKG_MDI=on \ - -D PKG_MGPT=on \ - -D PKG_ML-RANN=on \ - -D PKG_ML-RUNNER=on \ - -D PKG_ML-HDNNP=on \ - -D PKG_ML-PACE=on \ - -D PKG_APIP=on \ - -D PKG_MOLFILE=on \ - -D PKG_NETCDF=on \ - -D PKG_PTM=on \ - -D PKG_QTB=on \ - -D PKG_SMTBQ=on \ - ../cmake - - - name: Run Coverity Scan - if: steps.download-coverity.outputs.skip != 'true' - shell: bash - working-directory: build - run: | - export PATH=$GITHUB_WORKSPACE/coverity/bin:$PATH - cov-build --dir cov-int cmake --build . --parallel 2 - - - name: Create tarball with scan results - if: steps.download-coverity.outputs.skip != 'true' - shell: bash - working-directory: build - run: tar czf lammps.tgz cov-int - - - name: Upload scan result to Coverity - if: steps.download-coverity.outputs.skip != 'true' - shell: bash - run: | - curl --form token=${{ secrets.COVERITY_TOKEN }} \ - --form email=${{ secrets.COVERITY_EMAIL }} \ - --form file=@build/lammps.tgz \ - --form version=${{ github.sha }} \ - --form description="LAMMPS automated build" \ - https://scan.coverity.com/builds?project=${{ env.COVERITY_PROJECT }} From 87bf224b68640596bdc5c873cb065b0985979bad Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 8 Jul 2026 23:22:34 -0400 Subject: [PATCH 084/116] import updated and revised coding agent config that is shared between claude code copilot --- .claude/CLAUDE.md | 13 + .claude/rules/documentation.md | 8 + .claude/rules/force-style-tests.md | 8 + .claude/rules/granular-tests.md | 9 + .claude/rules/kokkos.md | 10 + .gitattributes | 1 + .github/copilot-instructions.md | 1883 ++--------------- .github/dev-docs/finite-size-particles.md | 86 + .github/dev-docs/kokkos-porting-backlog.md | 90 + .github/dev-docs/kokkos-porting-guide.md | 620 ++++++ .github/dev-docs/respa-integration.md | 61 + .../dev-docs/style-implementation-notes.md | 103 + .github/dev-docs/testing-and-verification.md | 74 + .../documentation.instructions.md | 71 + .../force-style-tests.instructions.md | 43 + .../granular-tests.instructions.md | 86 + .github/instructions/kokkos.instructions.md | 145 ++ .github/release_steps.md | 62 +- .gitignore | 3 + 19 files changed, 1639 insertions(+), 1737 deletions(-) create mode 100644 .claude/CLAUDE.md create mode 100644 .claude/rules/documentation.md create mode 100644 .claude/rules/force-style-tests.md create mode 100644 .claude/rules/granular-tests.md create mode 100644 .claude/rules/kokkos.md create mode 100644 .github/dev-docs/finite-size-particles.md create mode 100644 .github/dev-docs/kokkos-porting-backlog.md create mode 100644 .github/dev-docs/kokkos-porting-guide.md create mode 100644 .github/dev-docs/respa-integration.md create mode 100644 .github/dev-docs/style-implementation-notes.md create mode 100644 .github/dev-docs/testing-and-verification.md create mode 100644 .github/instructions/documentation.instructions.md create mode 100644 .github/instructions/force-style-tests.instructions.md create mode 100644 .github/instructions/granular-tests.instructions.md create mode 100644 .github/instructions/kokkos.instructions.md diff --git a/.claude/CLAUDE.md b/.claude/CLAUDE.md new file mode 100644 index 00000000000..733c8ac4cc2 --- /dev/null +++ b/.claude/CLAUDE.md @@ -0,0 +1,13 @@ +# LAMMPS Project Instructions (Claude Code entry point) + +@../.github/copilot-instructions.md + +The imported file above is the always-loaded core shared with GitHub Copilot. Its +"Task-Specific Guides" index lists the detailed guides in `.github/instructions/` and +`.github/dev-docs/`; read the matching guide BEFORE starting that kind of work. The +files in `.claude/rules/` load the path-scoped guides automatically when matching +source files are read. + +Machine- and user-specific facts (local build directory, git remotes, worktrees) live +in the untracked, gitignored `CLAUDE.local.md` at the repository root, which Claude +Code loads automatically when present. diff --git a/.claude/rules/documentation.md b/.claude/rules/documentation.md new file mode 100644 index 00000000000..d954d1325ad --- /dev/null +++ b/.claude/rules/documentation.md @@ -0,0 +1,8 @@ +--- +paths: + - "doc/**" +--- + +Working on documentation: read `.github/instructions/documentation.instructions.md` +now (versionadded/versionchanged policy, build/spelling mechanics, wording rules, +figure workflow). diff --git a/.claude/rules/force-style-tests.md b/.claude/rules/force-style-tests.md new file mode 100644 index 00000000000..5916544d641 --- /dev/null +++ b/.claude/rules/force-style-tests.md @@ -0,0 +1,8 @@ +--- +paths: + - "unittest/**" +--- + +Working on unit tests: read `.github/instructions/force-style-tests.instructions.md` +now (YAML force-style test mechanics, accelerator-suffix auto-testing, respa +tolerances, reference regeneration). diff --git a/.claude/rules/granular-tests.md b/.claude/rules/granular-tests.md new file mode 100644 index 00000000000..51c0bbbfbd0 --- /dev/null +++ b/.claude/rules/granular-tests.md @@ -0,0 +1,9 @@ +--- +paths: + - "unittest/granular/**" + - "src/GRANULAR/**" +--- + +Working on granular/DEM code or tests: read +`.github/instructions/granular-tests.instructions.md` now (test-suite architecture, +YAML regeneration, atom-map and physics-setup gotchas). diff --git a/.claude/rules/kokkos.md b/.claude/rules/kokkos.md new file mode 100644 index 00000000000..372cc9ac9b0 --- /dev/null +++ b/.claude/rules/kokkos.md @@ -0,0 +1,10 @@ +--- +paths: + - "src/KOKKOS/**" +--- + +Working on KOKKOS package files: read `.github/instructions/kokkos.instructions.md` +now (rules and policies). When porting a style to KOKKOS, also read +`.github/dev-docs/kokkos-porting-guide.md` (templates, lessons) and +`.github/dev-docs/kokkos-porting-backlog.md` (what remains; trust `ls src/KOKKOS/` +and `git log` over its tables). diff --git a/.gitattributes b/.gitattributes index 77eb7f93f31..2ea6a6b53ab 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,6 +1,7 @@ .gitattributes export-ignore .gitignore export-ignore .github export-ignore +.claude export-ignore .lgtm.yml export-ignore SECURITY.md export-ignore CITATION.cff export-ignore diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index 061ba3cac6e..620e631c5ec 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -1,1719 +1,220 @@ -# LAMMPS Copilot Instructions +# LAMMPS Instructions for AI Coding Agents -## Repository Overview +This file is the compact, always-loaded core read by GitHub Copilot (coding/cloud agent, +code review, chat) and, via an import from `.claude/CLAUDE.md`, by Claude Code. Detailed, +task-specific guides live in `.github/instructions/` (auto-attached by path patterns) and +`.github/dev-docs/` (read on demand); see the index at the end of this file. -**LAMMPS** (Large-scale Atomic/Molecular Massively Parallel Simulator) is a classical molecular dynamics simulation code designed for parallel computers. This is a large, mature C++ codebase (~600MB, ~4,000 C++ files in src/) maintained by an international team of developers lead by staff at Sandia National Laboratories as open-source software under GPL v2. +## Repository Overview -**Primary Languages:** C++17 (core), C, Fortran, Python (interfaces) -**Build Systems:** CMake (primary, modern), Make (traditional, still supported) -**Key Frameworks:** MPI (parallel execution), OpenMP (threading), Kokkos (performance portability) +**LAMMPS** (Large-scale Atomic/Molecular Massively Parallel Simulator) is a classical +molecular dynamics simulation code for parallel computers: a large, mature C++ codebase +(~600MB, ~4,000 C++ files in `src/`) maintained by an international team of developers led by +staff at Sandia National Laboratories, open-source under GPL v2. -## Build System & Workflow +**Primary languages:** C++17 (core), C, Fortran, Python (interfaces) +**Build systems:** CMake (primary), traditional Make (legacy, subset of packages) +**Key frameworks:** MPI (parallelization), OpenMP (threading), Kokkos (GPU/many-core) -### CMake Build (Recommended) +## Build System -**ALWAYS use CMake for new builds.** The traditional Make system is maintained and only supports a subset of packages. Thus CMake is the primary build system. +**Always use CMake for new builds; always build out-of-source.** The `CMakeLists.txt` +is in `cmake/`, NOT the repository root. -**Basic build sequence:** ```bash -# 1. Create build directory (REQUIRED - out-of-source builds only) -mkdir build - -# 2. Configure with CMake -cmake -S cmake -B build -C cmake/presets/basic.cmake - -# 3. Build +cmake -S cmake -B build -C cmake/presets/gcc.cmake -C cmake/presets/most.cmake \ + -D ENABLE_TESTING=on -D DOWNLOAD_POTENTIALS=off -G Ninja cmake --build build -j 4 - -# 4. The executable will be: build/lmp -``` - -**Important CMake details:** -- CMake configuration files are in `cmake/` directory (NOT at repo root) -- Use `-S cmake` to specify the source directory (this is NOT standard - most projects use `-S .`) -- Presets are in `cmake/presets/` - use `-C` to load them -- Common presets: `basic.cmake`, `gcc.cmake`, `most.cmake` -- Combine presets: `-C cmake/presets/gcc.cmake -C cmake/presets/most.cmake` -- Standard CMake options work: `-D BUILD_SHARED_LIBS=on`, `-D ENABLE_TESTING=on` - -**Typical CI build configuration (from workflows):** -```bash -cmake -S cmake -B build \ - -C cmake/presets/gcc.cmake \ - -C cmake/presets/most.cmake \ - -D CMAKE_CXX_COMPILER_LAUNCHER=ccache \ - -D CMAKE_C_COMPILER_LAUNCHER=ccache \ - -D BUILD_SHARED_LIBS=off \ - -D DOWNLOAD_POTENTIALS=off \ - -D ENABLE_TESTING=on \ - -G Ninja -cmake --build build -``` - -**IMPORTANT:** Use `-D DOWNLOAD_POTENTIALS=off` by default to avoid network dependency issues in CI/restricted environments. Only omit this flag if you specifically need LAMMPS to download potential files during the build. - -**Build time:** Basic build: ~3-5 minutes, Full build with most packages: ~10-15 minutes - -### Traditional Make Build (Legacy, Still Supported) - -```bash -cd src -make serial # Serial build (no MPI) -make mpi # MPI parallel build -# Executable will be: lmp_serial or lmp_mpi -``` - -**Available Make targets in src/:** -- `make serial` or `make mpi` - basic builds -- Machine-specific makefiles in `src/MAKE/MACHINES/` -- Options in `src/MAKE/OPTIONS/` for different compiler/feature combinations - -### Package Management - -LAMMPS has 80+ optional packages. Packages are in `src/[PACKAGE-NAME]/` directories. - -**With CMake:** Use `-D PKG_[NAME]=on` (e.g., `-D PKG_MOLECULE=on`, `-D PKG_PYTHON=on`) - -**With Make:** Use `make yes-[package]` or `make no-[package]` before building; also -some presets exist: `make yes-basic` or `make-yes-most`; packages requiring extra libraries -or downloads are only supported by CMake. -```bash -cd src -make yes-basic # Enable MANYBODY, MOLECULE, KSPACE, and RIGID packages -make yes-openmp # Enable OPENMP package -make yes-misc # Enable MISC -make serial # Then build -``` - -**View package status:** `cd src && make pi` (shows which packages are installed) +# Executable: build/lmp +``` + +- Use `-S cmake` (NOT `-S .`); never run cmake or make in the repository root or `src/`. +- Presets are in `cmake/presets/` (`basic.cmake`, `gcc.cmake`, `most.cmake`, ...); they + can be combined with repeated `-C` options. +- Enable packages with `-D PKG_=on` (e.g. `-D PKG_MOLECULE=on`); LAMMPS has 80+ + optional packages in `src//` directories. +- Use `-D DOWNLOAD_POTENTIALS=off` to avoid network dependence in CI or restricted + environments. +- If MPI is not found, install your distribution's MPI development package or set + `-D MPI_CXX_COMPILER=mpicxx` explicitly. LAMMPS uses its bundled KISS FFT by + default; FFTW3 is optional, not required. +- Build times: basic preset ~3-5 minutes; most packages ~10-15 minutes. + +**Traditional Make (legacy):** `cd src && make serial` (or `make mpi`); the executables +are `lmp_serial` / `lmp_mpi`. Enable/disable packages first with `make yes-` / +`make no-` or preset bundles like `make yes-basic` (MANYBODY, MOLECULE, KSPACE, +RIGID); `make pi` shows package status. Packages needing external libraries or +downloads are CMake-only. + +**Switching build systems:** Make -> CMake requires `make -C src purge` first; +CMake -> Make requires `make -C src clean-all` first. CMake errors out if it detects +make-generated header files in `src/`. ## Testing & Validation -### Unit Tests (via CMake + CTest) - +**Style checks (run before every commit/PR):** ```bash -# Configure with testing enabled -cmake -S cmake -B build -C cmake/presets/gcc.cmake -C cmake/presets/most.cmake -D ENABLE_TESTING=on -G Ninja - -# Build -cmake --build build - -# Run all tests -cd build && ctest -V - -# Note: Tests require the executable to be built first +cd src && make check # all checks +cd src && make check-whitespace # most common CI failure +cd src && make fix-whitespace # auto-fix whitespace +cd src && make fix-permissions # auto-fix file permissions ``` +Further named targets: `make check-homepage` (verifies https://www.lammps.org URLs), +`make check-errordocs`, `make check-fmtlib`. -**Test organization** (in `unittest/`): -- `c-library/` - C library interface tests -- `commands/` - Input command tests -- `force-styles/` - Pair, bond, angle, kspace style tests -- `formats/` - File format tests -- `fortran/` - Fortran module tests -- `python/` - Python module tests -- `utils/` - Utility function tests - -### Regression Tests - -```bash -# Setup Python environment (REQUIRED) -python3 -m venv testenv -source testenv/bin/activate -pip install numpy pyyaml junit_xml - -# Run regression tests -python3 tools/regression-tests/run_tests.py \ - --lmp-bin=build/lmp \ - --config-file=tools/regression-tests/config_quick.yaml \ - --examples-top-level=examples -``` - -### Style/Coding Standard Checks - -**ALWAYS run these before submitting PRs:** -```bash -cd src -make check-whitespace # Check whitespace/formatting issues -make check-permissions # Check file permissions -make check-homepage # Verify homepage URLs -make check-errordocs # Check error documentation -make check-fmtlib # Check fmtlib formatting library -``` - -**To auto-fix issues:** +**Unit tests (CTest; requires `-D ENABLE_TESTING=on` and a completed build):** ```bash -make fix-whitespace -make fix-permissions +cd build && ctest -V # all tests +cd build && ctest -V -R # subset by regex ``` +Tests live in `unittest/` by category: `c-library/`, `commands/`, `force-styles/`, +`formats/`, `fortran/`, `python/`, `utils/`, `granular/`. -**All style checks:** +**Regression tests** (CI runs them after code review; local runs rarely needed): ```bash -cd src && make check -``` - -## GitHub Workflows / CI - -The repository uses GitHub Actions for CI with multiple workflows: - -**Pull Request Checks (run on all PRs to develop branch):** -1. **style-check.yml** - Runs coding standard checks (`make check-*` targets in src/) -2. **quick-regression.yml** - Builds with most packages, runs regression tests on modified code -3. **unittest-linux.yml** - Builds with LAMMPS_BIGBIG, runs unit tests via CTest - -**Additional Checks:** -- **codeql-analysis.yml** - Security scanning -- **check-vla.yml** - Checks for variable-length arrays (not allowed) -- **check-cpp23.yml** - C++23 compatibility check -- **compile-msvc.yml** - Windows MSVC compilation -- **full-regression.yml** - Complete regression suite (on push to develop) - -**Workflow dependencies:** -- Ubuntu latest with `ccache`, `ninja-build`, `libeigen3-dev`, `libcurl4-openssl-dev`, `python3-dev`, `mpi-default-bin`, `mpi-default-dev` -- Python packages: `numpy`, `pyyaml`, `junit_xml` -- Build typically uses Ninja generator for speed - -## Key Repository Structure - -``` -lammps/ -├── .github/ # GitHub workflows, templates, CodeQL config -│ ├── workflows/ # CI/CD workflow files (12 workflows) -│ ├── CONTRIBUTING.md -│ └── CODEOWNERS -├── cmake/ # CMake build system (USE -S cmake for CMake!) -│ ├── CMakeLists.txt # Main CMake file -│ ├── presets/ # CMake preset files -│ ├── Modules/ # CMake modules -│ └── packaging/ # Packaging scripts -├── src/ # Source code (~3,777 C++/H files) -│ ├── main.cpp # Main entry point -│ ├── lammps.cpp/h # Main LAMMPS class -│ ├── Makefile # Traditional make system -│ ├── MAKE/ # Make configurations -│ │ ├── Makefile.serial # Serial build -│ │ ├── Makefile.mpi # MPI build -│ │ ├── OPTIONS/ # Compiler/feature options -│ │ └── MACHINES/ # Machine-specific configs -│ ├── [PACKAGE]/ # 80+ optional package directories -│ │ ├── MOLECULE/ # Molecular systems -│ │ ├── KSPACE/ # Long-range electrostatics -│ │ ├── RIGID/ # Rigid body dynamics -│ │ ├── KOKKOS/ # Kokkos acceleration -│ │ └── ... -│ ├── Package.sh # Package management script -│ └── .clang-format # Code formatting rules -├── unittest/ # Unit test suite (CTest-based) -├── examples/ # Example input files -├── bench/ # Benchmark inputs -├── tools/ # Pre/post-processing tools -│ ├── coding_standard/ # Style checking scripts -│ ├── regression-tests/ # Regression test framework -│ └── ... -├── doc/ # Documentation source -├── lib/ # External libraries (colvars, kokkos, etc.) -├── python/ # Python interface -├── potentials/ # Potential files -└── README # Main readme (not .md!) -``` - -## Common Pitfalls & Important Notes - -### Build Issues - -1. **CMake source directory:** Use `-S cmake` NOT `-S .` (CMakeLists.txt is in cmake/, not root) - -2. **Out-of-source builds only:** ALWAYS create a separate build directory. Never build in source tree. - -3. **Switching between Make and CMake:** If you previously used `make` to build, you MUST run `make -C src purge` before using CMake. CMake will error if it detects make-generated header files. Similarly, run `make clean-all` in src/ before switching from CMake to Make. - -4. **Package dependencies:** Some packages require others. CMake will warn you; check console output. - -5. **MPI detection:** If MPI is not found, install `mpi-default-dev` or set `MPI_CXX_COMPILER=mpicxx` explicitly. - -6. **FFTW not required:** LAMMPS uses KISS FFT by default. FFTW3 is optional. - -### Code Style - -1. **All source must be ASCII:** Unicode characters are not allowed (security policy). - -2. **Whitespace matters:** Run `make check-whitespace` and `make fix-whitespace` before committing. - -3. **Use .clang-format:** Code should follow .clang-format rules in src/. - -4. **No VLAs:** Variable-length arrays are not allowed (checked by CI). - -5. **Documentation:** All new commands or features must be documented. This does *not* apply to - *internal* commands which can be recognized by their style name written in upper case. The - following applies only to publicly visible commands that have style names in lower case. - Put `.. versionadded:: TBD` or `.. versionchanged:: TBD` in front of paragraphs documenting - the new or changed functionality or in front of the "Description" headline for completely - new commands. The `.. versionadded:: TBD` directive should be used with new features or added - keywords. The `.. versionchanged:: TBD` directive should be used when the behavior of a - keyword changes. The `TBD` will be manually replaced with the release version string during - the release preparation. This does not apply when the change is only adding an accelerated - version of an existing style. Instead the corresponding code letter should be added to the - respective Commands_\*.rst file. Also the documentation should pass running "make check" - in the doc folder without any output indicating non-ASCII characters, missing entries, or - duplicate anchors. - -### Testing - -1. **Build before test:** CTest requires the executable to be built first. If tests fail to find executable, run `cmake --build build` first. - -2. **Python environment:** Regression tests require a virtual environment with numpy, pyyaml, junit_xml. - -3. **Test selection:** Unit tests are optional packages. Use `-D ENABLE_TESTING=on` with CMake. - -### File Permissions & Naming - -1. **Source files:** `.cpp` and `.h` files, no executable permission -2. **Scripts:** `.sh` and `.py` files should have executable permission -3. **README vs README.md:** Root README has no extension; subdirs may use .md +python3 -m venv testenv && source testenv/bin/activate +pip install numpy pyyaml junit_xml +python3 tools/regression-tests/run_tests.py --lmp-bin=build/lmp \ + --config-file=tools/regression-tests/config_quick.yaml --examples-top-level=examples +``` + +**Documentation build:** `cd doc && make html` must complete without new warnings; +`make spelling` must not report issues (see the documentation guide in the index below). + +## Continuous Integration + +GitHub Actions workflows in `.github/workflows/` (16 files). On every PR to `develop`: +`style-check.yml` (coding standards), `unittest-linux.yml` (CTest), and +`quick-regression.yml` (regression subset). Others: `unittest-macos/-arm64/-single/ +-kokkos`, `kokkos-regression.yaml`, `check-vla.yml` (no variable-length arrays), +`check-cpp23.yml`, `check-gnu-make.yml`, `compile-msvc.yml` (Windows), +`codeql-analysis.yml`, `coverity.yml`, `lammps-gui-flatpak.yml`, and +`full-regression.yml` (manual trigger only, via workflow_dispatch). + +**Debugging CI failures:** style-check -> run the matching `make check-*` target in +`src/` and the corresponding `make fix-*`; build failures -> check for `-S cmake`, +package dependencies, and VLA usage; unit tests -> rerun the single test with +`ctest -V -R `; regression tests -> verify the Python environment and whether +example inputs were modified. + +## Repository Structure + +``` +cmake/ CMake build system (main CMakeLists.txt, presets/, Modules/) +src/ core sources + 80+ package subdirectories (MOLECULE/, KSPACE/, + RIGID/, KOKKOS/, GRANULAR/, ...); Makefile + MAKE/ for legacy build +unittest/ CTest-based unit tests, by category +examples/ example input decks bench/ benchmark inputs +doc/ documentation sources (doc/src/*.rst, Sphinx) +lib/ bundled external libraries (kokkos, colvars, ...) +python/ Python module potentials/ potential files +tools/ pre/post-processing; tools/coding_standard/ = style-check scripts +``` + +The top-level `LAMMPS` class (`src/lammps.h`) owns pointers to all subsystems (`atom`, +`force`, `neighbor`, `comm`, `domain`, `modify`, `update`, `output`, `error`, `memory`). +Almost all physics is implemented as named "styles" inheriting from abstract base +classes (`Pair`, `Fix`, `Compute`, `Bond`, `Angle`, `Dihedral`, `Improper`, `Command`), +mapped to keywords via macros (`PairStyle`, `FixStyle`, ...) in the style headers. + +## Coding Standards + +- **C++17**; follow `.clang-format` in `src/`; keep code ASCII-only. +- **7-bit US-ASCII everywhere** (sources, docs, scripts); Unicode is forbidden + (security policy) and fails CI. +- **No variable-length arrays** (checked by CI); use `memory->create()` or + `std::vector`. +- **No alternative logical-operator tokens:** use `&&`, `||`, `!`, `^` -- never `and`, + `or`, `not`, `xor` (breaks MSVC). +- **Parenthesize each operand of chained `&&`/`||` conditionals** for readability. +- **String formatting with fmtlib** (`fmt::format()`), not `sprintf`. +- **Error handling:** `error->all()` when all MPI ranks hit the error, `error->one()` + for a single rank; `error->warning()` prints on every rank, so guard with + `comm->me == 0` where a single message is wanted. +- **User-facing text** (error messages, docs) must avoid computer-science jargon; + the audience is researchers, not software engineers. +- **RAII for C resources:** prefer `SafeFilePtr` (`src/safe_pointers.h`) over raw + `FILE *`/`fopen` when touching such code. +- **MPI stubs:** if a serial build misses an MPI symbol, add it to `src/STUBS/mpi.h` + instead of special-casing the caller. +- **Block comments:** inside `/* ... */`, an embedded `*/` (e.g. in a glob like + `gb_*/ga_*`) silently terminates the comment; reword or use `//` comments. +- **File permissions:** `.cpp`/`.h` must NOT be executable; `.sh`/`.py` scripts SHOULD + be (checked by `make check-permissions`). +- Root `README` has no extension; subdirectories may use `.md`. + +## Adding New Styles + +1. Place `style_name.cpp`/`.h` in `src/` or the appropriate package directory; use a + similar existing style as template (see https://docs.lammps.org/Modify_style.html). +2. Add new package files to `src/.gitignore`; add renamed/removed file names to + `src/Purge.list`. +3. Create/update the matching `doc/src/*.rst` file; new publicly visible commands and + keywords need `.. versionadded:: TBD` (see the documentation guide). +4. Internal styles (upper-case style names) need no documentation. ## Development Workflow -1. **Branch:** Work on feature branches, submit PRs to `develop` (NOT `master` or `release`) - -2. **Style check first:** Run `cd src && make check` before committing - -3. **Build locally:** Test with CMake using gcc.cmake + most.cmake presets to match CI - -4. **Test changes:** Run relevant unit tests if touching core code, regression tests if modifying examples - -5. **Watch CI:** All PR checks must pass. Review CI logs if failures occur. - -6. **Continuous release model:** The `develop` branch is always functional. All changes go through PRs with mandatory CI checks. - -## Quick Reference Commands - -```bash -# Standard development build and test cycle -mkdir build -cmake -S cmake -B build -C cmake/presets/gcc.cmake -C cmake/presets/most.cmake -D ENABLE_TESTING=on -D DOWNLOAD_POTENTIALS=off -cmake --build build -j 4 -cd src && make check # Style checks -cd ../build && ctest -V # Unit tests - -# Minimal build for quick testing -cmake -S cmake -B build -C cmake/presets/basic.cmake -cmake --build build -j 4 - -# Add a package -cmake -S cmake -B build -C cmake/presets/basic.cmake -D PKG_MOLECULE=on -cmake --build build -j 4 - -# Traditional make (if needed) -cd src -make serial # or 'make mpi' -./lmp_serial -in input_file - -# Clean everything -rm -rf build -cd src && make clean-all - -# Switch from Make to CMake (purge make-generated files) -cd src && make purge -cd .. && mkdir build && cmake -S cmake -B build -C cmake/presets/basic.cmake -``` +- Feature branches; PRs target `develop` (NOT `master` or `release`). The `develop` + branch is always kept functional (continuous release model). +- Run `cd src && make check` before committing; watch CI on the PR. +- The PR template contains a mandatory **AI Tools Usage** section whose default text + states no AI was used; when AI tools generated code, edit that section to disclose it + honestly. This section is the ONLY place for AI attribution: do NOT add + `Co-Authored-By:`, `Claude-Session:`, `Generated with ...`, or similar AI-attribution + trailer lines to commit messages or PR descriptions. This applies to Claude Code, + GitHub Copilot, and any other coding agent alike. ## Code Review -When performing a code review, apply the general instructions for contributions -to LAMMPS in https://docs.lammps.org/Modify_requirements.html - -When performing a code review, apply the programming style instructions -for LAMMPS in https://docs.lammps.org/Modify_style.html - -When performing a code review, check any changes to the documentation -(in the `doc/src/` folder) to be written in American English and with -plain ASCII characters. - -When performing a code review, ensure that the documentation for any new -commands or added keywords to existing commands contains a -`.. versionadded:: TBD` directive. For any modified commands or -keywords a `.. versionchanged:: TBD` directive should be included in the -documentation. Check if any examples use the new or modified commands -and check if they need updating. - -When reviewing C++ code, ensure that no alternative tokens are used for -logical operators. That is, use `&&` instead of `and`, `||` instead of -`or`, `!` instead of 'not', `^` instead of `xor` and so on. These -alternative tokens are only required for ASCII text in some non -US-English characters sets, but the LAMMPS sources code are *supposed* -be in US-English 7-bit ASCII. Using alternative tokens causes -compilation failures with some compilers by default, most prominently -Microsoft Visual C++. - -When new files are added to package directories in `src`, make sure -they are added to the `src/.gitignore` file, so that the copies in -`src` make by the traditional make build system are not accidentally -added to the git repository. - -Whe files are renamed or removed from package directories in `src`, -make sure the old file names are added the `src/Purge.list` file so -their copies from the traditional make build system are properly -removed with "make purge". - -## Documentation Changes - -When modifying documentation files in `doc/src/`: - -**Build and validate documentation:** -```bash -cd doc -make html # Build HTML, check for warnings -make pdf # Build PDF (requires pdflatex) -make spelling # Check spelling -make anchor_check # Check for duplicate anchors -make style_check # Verify style lists are complete -``` - -Ensure that building the documentation with "make html" and "make pdf" -can complete and does *NOT* produce any errors or warnings about sphinx -or docutils syntax issues or incorrect references. - -Also make certain that "make spelling" does not report in any spelling -issues; those need to be either remedied or exceptions (e.g. for code -examples or author names of cited references) should be added to the -file "doc/utils/sphinx-config/false-positives.txt". - -**Documentation conventions:** -- Use reStructuredText format (`.rst` files) -- Use American English spelling -- Use ASCII characters only -- Wrap code examples in `.. code-block::` with appropriate language (LAMMPS, bash, c++, python) -- Use `.. note::` for important remarks and `.. warning::` for critical warnings -- New commands require `.. versionadded:: TBD` -- Modified commands require `.. versionchanged:: TBD` - -## Debugging CI Failures - -When a CI check fails, diagnose using these steps: - -**1. Style check failures (`style-check.yml`):** -```bash -cd src -make check-whitespace # Most common - fix with: make fix-whitespace -make check-permissions # Fix with: make fix-permissions -make check-homepage # Verify https://www.lammps.org URLs -make check-errordocs # Check error documentation -make check-fmtlib # Verify fmtlib formatting -``` - -**2. Build failures:** -- Check CMake output for missing dependencies -- Ensure `-S cmake` (not `-S .`) is used -- Verify package dependencies are met -- Check for VLA (variable-length array) usage - not allowed - -**3. Unit test failures:** -- Run specific failing test: `cd build && ctest -V -R ` -- Check if test requires specific packages to be enabled -- Verify the executable was built before running tests - -**4. Regression test failures:** -- Ensure Python environment has numpy, pyyaml, junit_xml -- Check if example inputs were modified correctly - -## Short-Circuit Instructions - -**STOP and check these common mistakes:** - -1. **Wrong CMake source directory:** - - WRONG: `cmake -S . -B build` - - CORRECT: `cmake -S cmake -B build` - -2. **Building in source tree:** - - NEVER run cmake or make in the repository root - - ALWAYS create a separate `build/` directory - -3. **Mixed build systems:** - - If switching from Make to CMake: run `make -C src purge` first - - If switching from CMake to Make: run `make -C src clean-all` first - -4. **Unicode in source files:** - - All source code must be ASCII only - - Unicode characters will cause CI to fail - -5. **Missing whitespace fixes:** - - Always run `cd src && make fix-whitespace` before committing - -6. **Incorrect file permissions:** - - `.cpp` and `.h` files must NOT be executable - - `.sh` and `.py` scripts SHOULD be executable - -## Sample Prompts - -**Adding a new pair style:** -> "Create a new pair style called `pair_example` that implements [description]. Follow the pattern in `src/pair_lj_cut.cpp` and add documentation in `doc/src/pair_example.rst`." - -**Fixing a bug in a compute:** -> "Fix bug in `compute_temp.cpp` where [description]. Add a unit test in `unittest/` to prevent regression." - -**Adding a new package:** -> "Create a new package called MYPACKAGE with [features]. Include CMakeLists.txt entries, documentation, and example inputs." - -**Updating documentation:** -> "Update the documentation for `fix_nve.rst` to include the new `keyword` option. Use `.. versionchanged:: TBD` directive." - -**Debugging build failure:** -> "The CI build is failing with [error]. Diagnose and fix the issue." - -# Porting Pair Styles to KOKKOS - -Below is a structured plan and reference for porting some -pair styles to the KOKKOS package. It covers the required code changes, -documentation updates, and groups the work into Copilot-session-sized -batches ordered from simplest to most complex. - ---- - -## Background and Motivation - -The KOKKOS package provides GPU-accelerated (CUDA/HIP) and many-core CPU -(OpenMP/threads) variants of LAMMPS styles using Kokkos abstractions. -Porting a pair style to KOKKOS means: - -1. Creating `src/KOKKOS/pair__kokkos.h` and - `src/KOKKOS/pair__kokkos.cpp`. -2. Registering the new files in `src/KOKKOS/Install.sh`. -3. Making small changes to the **base class** header (adding `virtual` to - `allocate()` and adding `if (copymode) return;` to the destructor of the - base class if not already present). -4. Updating the RST documentation in `doc/src/pair_.rst`. -5. Updating `doc/src/Commands_pair.rst`. - ---- - -## Key Rules for KOKKOS Porting - -### 1. `if (copymode) return;` in the base-class destructor - -When a Kokkos pair style is copied for use on-device (via `copymode = 1`), -the copy's destructor must not free memory that belongs to the original object. -Every **base class** that a `_kokkos` style will inherit from must have: - -```cpp -PairFoo::~PairFoo() -{ - if (copymode) return; // MUST be the first line - // ... rest of destructor ... -} -``` - -If the base-class destructor already has this line, no change is needed. -Check with: - -```bash -grep -n "copymode" src//pair_.cpp -``` - -### 2. `virtual void allocate()` in the base-class header - -The KOKKOS style overrides `allocate()` to replace plain arrays with dual -views. The override only works correctly in C++ when the base-class -declaration is `virtual`. Change: - -```cpp -void allocate(); // old -virtual void allocate(); // required -``` - -Check with: - -```bash -grep -n "allocate" src//pair_.h -``` - -### 3. Per-atom view members: `typename AT::` not `DAT::` - -Every member that stores a per-atom view obtained from -`atomKK->k_.view()` **must** be declared with the -template-parameterized alias `typename AT::t_`, **never** with the -hardcoded alias `DAT::t_`. - -```cpp -// WRONG — kk/host instantiation fails with Kokkos ViewMapping assertion: -DAT::t_tagint_1d_randomread molecule; - -// CORRECT — adapts to DeviceType (LMPDeviceType or LMPHostType): -typename AT::t_tagint_1d_randomread molecule; -``` - -`AT` is `ArrayTypes`. `DAT` is `ArrayTypes`. -In GPU builds, the pair style is instantiated for *both* `LMPDeviceType` and -`LMPHostType`. Views with `DAT::` types live in GPU memory; assigning a -host-side `atomKK` view to them triggers a static assertion in Kokkos. - -**Safe to use `DAT::`:** dual views that the pair style allocates itself and -never assigns from an `atomKK` view: -`k_eatom`, `k_vatom`, `k_cutsq`, `k_cut_ljsq`, `k_cut_coulsq`. - -**Must use `typename AT::`:** all per-atom views set via -`atomKK->k_.view()`: -`x`, `c_x`, `f`, `type`, `q`, `molecule`, `radius`, etc. - -Quick audit command: -```bash -grep "DAT::t_" src/KOKKOS/pair__kokkos.h -``` -Every hit should be a dual-view (type contains `tdual` or `ttransform`), not -a plain per-atom view (type contains `t_`). - -### 4. `src/KOKKOS/Install.sh` entries - -Add two lines per new file: - -```sh -action pair__kokkos.cpp pair_.cpp # if base is in another package -action pair__kokkos.h pair_.h # idem -``` - -If the base class is in the **core** (`src/`), omit the second argument: - -```sh -action pair__kokkos.cpp -action pair__kokkos.h -``` - -### 5. Documentation changes - -**In `doc/src/pair_.rst`:** - -* Add `.. index:: pair_style /kk` near the top. -* Add `*/kk*` to the `Accelerator Variants:` line. - -**In `doc/src/Commands_pair.rst`:** - -* Add `k` to the accelerator letter string in the entry for this style - (letters: `g`=GPU, `i`=INTEL, `k`=KOKKOS, `o`=OPENMP, `t`=OPT). - ---- - -## Standard KOKKOS Template (pair_kokkos.h framework) - -Most simple pairwise styles (no three-body, no many-body embedding) fit the -`pair_kokkos.h` template. The KOKKOS class must implement: - -| Function | COUL_FLAG=0 | COUL_FLAG=1 | -|---|---|---| -| `compute_fpair` | required | required (VdW part) | -| `compute_evdwl` | required | required | -| `compute_fcoul` | return 0 | required | -| `compute_ecoul` | return 0 | required | - -The template automatically handles half/half-thread/full neighbor list -dispatch, reduction of forces, and energy/virial accumulation. - -See `src/KOKKOS/pair_born_kokkos.{h,cpp}` and -`src/KOKKOS/pair_lj_cut_kokkos.{h,cpp}` as canonical examples. - -### Typical header skeleton (COUL_FLAG=0) - -```cpp -#ifdef PAIR_CLASS -PairStyle(/kk, PairKokkos); -PairStyle(/kk/device,PairKokkos); -PairStyle(/kk/host, PairKokkos); -#else -#ifndef LMP_PAIR__KOKKOS_H -#define LMP_PAIR__KOKKOS_H -#include "pair_kokkos.h" -#include "pair_.h" -#include "neigh_list_kokkos.h" -namespace LAMMPS_NS { -template -class PairKokkos : public Pair { - public: - enum {EnabledNeighFlags=FULL|HALFTHREAD|HALF}; - enum {COUL_FLAG=0}; - typedef DeviceType device_type; - typedef ArrayTypes AT; - PairKokkos(class LAMMPS *); - ~PairKokkos() override; - void compute(int, int) override; - void init_style() override; - double init_one(int, int) override; - - struct params_ { - KOKKOS_INLINE_FUNCTION params_() { /* zero all */ } - KOKKOS_INLINE_FUNCTION params_(int) { /* zero all */ } - KK_FLOAT cutsq, /* ... pair-specific params ... */; - }; - - protected: - template - KOKKOS_INLINE_FUNCTION - KK_FLOAT compute_fpair(...) const; - - template - KOKKOS_INLINE_FUNCTION - KK_FLOAT compute_evdwl(...) const; - - template - KOKKOS_INLINE_FUNCTION - KK_FLOAT compute_ecoul(...) const { return 0; } - - Kokkos::DualView**,Kokkos::LayoutRight,DeviceType> k_params; - typename Kokkos::DualView**,...>::t_dev_const_um params; - params_ m_params[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; - KK_FLOAT m_cutsq[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; - typename AT::t_kkfloat_1d_3_lr_randomread x; - typename AT::t_kkfloat_1d_3_lr c_x; - typename AT::t_kkacc_1d_3 f; - typename AT::t_int_1d_randomread type; - Kokkos::DualView k_cutsq; - typename Kokkos::DualView::t_dev d_cutsq; - typename AT::t_kkacc_1d d_eatom; - typename AT::t_kkacc_1d_6 d_vatom; - Kokkos::DualView k_eatom, k_vatom; - int neighflag, newton_pair; - int nlocal, nall, eflag, vflag; - friend struct PairComputeFunctorKokkos,FULL,true>; - friend struct PairComputeFunctorKokkos,FULL,false>; - friend struct PairComputeFunctorKokkos,HALF,true>; - friend struct PairComputeFunctorKokkos,HALF,false>; - friend struct PairComputeFunctorKokkos,HALFTHREAD,true>; - friend struct PairComputeFunctorKokkos,HALFTHREAD,false>; - friend EV_FLOAT pair_compute_neighlistKokkos, - FULL,CoulLongTable<0>>(PairKokkos*,NeighListKokkos*); - friend EV_FLOAT pair_compute_neighlistKokkos, - HALF,CoulLongTable<0>>(PairKokkos*,NeighListKokkos*); - friend EV_FLOAT pair_compute_neighlistKokkos, - HALFTHREAD,CoulLongTable<0>>(PairKokkos*,NeighListKokkos*); - friend EV_FLOAT pair_computeKokkos, - CoulLongTable<0>>(PairKokkos*,NeighListKokkos*); - friend void pair_virial_fdotr_computeKokkos>( - PairKokkos*); -}; -} -#endif -#endif -``` - -For `COUL_FLAG=1`, add `compute_fcoul` and `compute_ecoul`, add -`special_coul`, `qqrd2e`, `q` array, and change `CoulLongTable<0>` to -`CoulLongTable<1>` in the friend declarations. - -### Typical `.cpp` skeleton - -```cpp -template -PairKokkos::PairKokkos(LAMMPS *lmp) : Pair(lmp) -{ - respa_enable = 0; - kokkosable = 1; - atomKK = (AtomKokkos *) atom; - execution_space = ExecutionSpaceFromDevice::space; - datamask_read = X_MASK | F_MASK | TYPE_MASK | ENERGY_MASK | VIRIAL_MASK; - datamask_modify = F_MASK | ENERGY_MASK | VIRIAL_MASK; -} - -template -PairKokkos::~PairKokkos() -{ - if (copymode) return; - if (allocated) { - memoryKK->destroy_kokkos(k_eatom, eatom); - memoryKK->destroy_kokkos(k_vatom, vatom); - memoryKK->destroy_kokkos(k_cutsq, cutsq); - } -} - -template -void PairKokkos::compute(int eflag_in, int vflag_in) -{ - eflag = eflag_in; vflag = vflag_in; - if (neighflag == FULL) no_virial_fdotr_compute = 1; - ev_init(eflag,vflag,0); - if (eflag_atom) { /* reallocate k_eatom */ } - if (vflag_atom) { /* reallocate k_vatom */ } - atomKK->sync(execution_space,datamask_read); - k_cutsq.template sync(); - k_params.template sync(); - if (eflag || vflag) atomKK->modified(execution_space,datamask_modify); - else atomKK->modified(execution_space,F_MASK); - x = atomKK->k_x.view(); - c_x = atomKK->k_x.view(); - f = atomKK->k_f.view(); - type = atomKK->k_type.view(); - nlocal = atom->nlocal; nall = atom->nlocal + atom->nghost; - newton_pair = force->newton_pair; - special_lj[0..3] = ...; - NeighListKokkos* k_list = ...; - ... - EV_FLOAT ev = pair_computeKokkos, - CoulLongTable>(this, k_list); - if (eflag_global) eng_vdwl += ev.evdwl; - if (vflag_global) { virial[0..5] += ev.v[0..5]; } - if (eflag_atom) { k_eatom.template modify(); k_eatom.sync_host(); } - if (vflag_atom) { k_vatom.template modify(); k_vatom.sync_host(); } - if (vflag_fdotr) pair_virial_fdotr_compute(this); - copymode = 0; -} - -template -void PairKokkos::allocate() -{ - Pair::allocate(); - int n = atom->ntypes; - memory->destroy(cutsq); - memoryKK->create_kokkos(k_cutsq,cutsq,n+1,n+1,"pair:cutsq"); - d_cutsq = k_cutsq.template view(); - k_params = Kokkos::DualView**,...>("Pair::params",n+1,n+1); - params = k_params.template view(); -} - -template -void PairKokkos::init_style() -{ - Pair::init_style(); - // Request full neighbor list - neighbor->add_request(this, NeighConst::REQ_FULL | NeighConst::REQ_GHOST); -} - -template -double PairKokkos::init_one(int i, int j) -{ - double cutone = Pair::init_one(i,j); - k_params.view_host()(i,j). = static_cast([i][j]); - /* ... fill all params fields ... */ - k_params.view_host()(j,i) = k_params.view_host()(i,j); - if (i < MAX_TYPES_STACKPARAMS+1 && j < MAX_TYPES_STACKPARAMS+1) - m_params[i][j] = m_params[j][i] = k_params.view_host()(i,j); - m_cutsq[j][i] = m_cutsq[i][j] = static_cast(cutone*cutone); - k_cutsq.view_host()(i,j) = k_cutsq.view_host()(j,i) = cutone*cutone; - k_cutsq.modify_host(); - k_params.modify_host(); - return cutone; -} - -// Explicit instantiation at the bottom of the .cpp file -namespace LAMMPS_NS { -template class PairKokkos; -#ifdef LMP_KOKKOS_GPU -template class PairKokkos; -#endif -} -``` - ---- - -## Candidate Pair Styles to Port - -52 pair styles are possible candidates for porting to KOKKOS. They are -grouped below by porting complexity, from easiest to hardest. - ---- - -## Group 1 — Simple Pairwise, No Coulomb (EXTRA-PAIR; 13 styles) - -**Status: COMPLETED** - -**Complexity:** Low. Use the `pair_kokkos.h` template with `COUL_FLAG=0`. -Implement `compute_fpair` and `compute_evdwl`; `compute_ecoul` returns 0. -Pattern to follow: `pair_born_kokkos` or `pair_beck_kokkos`. - -**Session size recommendation:** 4–6 styles per session. - -| Pair style | Package | Base header | Status | -|---|---|---|---| -| `mie/cut` | EXTRA-PAIR | `src/EXTRA-PAIR/pair_mie_cut.h` | **done** | -| `nm/cut` | EXTRA-PAIR | `src/EXTRA-PAIR/pair_nm_cut.h` | **done** | -| `gauss/cut` | EXTRA-PAIR | `src/EXTRA-PAIR/pair_gauss_cut.h` | **done** | -| `harmonic/cut` | EXTRA-PAIR | `src/EXTRA-PAIR/pair_harmonic_cut.h` | **done** | -| `cosine/squared` | EXTRA-PAIR | `src/EXTRA-PAIR/pair_cosine_squared.h` | **done** | -| `lj/smooth` | EXTRA-PAIR | `src/EXTRA-PAIR/pair_lj_smooth.h` | **done** | -| `lj/smooth/linear` | EXTRA-PAIR | `src/EXTRA-PAIR/pair_lj_smooth_linear.h` | **done** | -| `morse/smooth/linear` | EXTRA-PAIR | `src/EXTRA-PAIR/pair_morse_smooth_linear.h` | **done** | -| `ufm` | EXTRA-PAIR | `src/EXTRA-PAIR/pair_ufm.h` | **done** | -| `wf/cut` | EXTRA-PAIR | `src/EXTRA-PAIR/pair_wf_cut.h` | **done** | -| `born/gauss` | EXTRA-PAIR | `src/EXTRA-PAIR/pair_born_gauss.h` | **done** | -| `lj/mdf` | EXTRA-PAIR | `src/EXTRA-PAIR/pair_lj_mdf.h` | **done** | -| `lennard/mdf` | EXTRA-PAIR | `src/EXTRA-PAIR/pair_lennard_mdf.h` | **done** | - -**Required base-class changes:** -- Add `virtual void allocate();` in each header (if not already `virtual`). -- Add `if (copymode) return;` as first line of each destructor. - -**Documentation:** Add `.. index:: pair_style /kk` and add `*/kk*` -to `Accelerator Variants`. Add `k` to each entry in `Commands_pair.rst`. - ---- - -## Group 2 — Simple Pairwise, No Coulomb (continued; 5 styles) - -**Status: COMPLETED** - -**Complexity:** Low. Same as Group 1 but with more parameters per pair-type. - -| Pair style | Package | Notes | Status | -|---|---|---|---| -| `momb` | EXTRA-PAIR | London + Buckingham, extra exponent params | **done** | -| `buck/mdf` | EXTRA-PAIR | Buckingham with switching, see `pair_buck_kokkos` | **done** | -| `pedone` | EXTRA-PAIR | Morse-like with r^-6 correction, no Coulomb | **done** | -| `lj/pirani` | EXTRA-PAIR | Generalized LJ with Pirani potential, per-type m,n | **done** | -| `ylz` | ASPHERE | Orientation-dependent potential, requires custom kernel | **done** | - -**Note:** `ylz` is in the ASPHERE package but computes only short-range VdW -with fixed charge; it should use `COUL_FLAG=0`. - ---- - -## Group 3 — Pairwise with Short-Range Coulomb (Wolf/DSF/cut; 8 styles) - -**Status: COMPLETED** - -**Complexity:** Moderate. Use the `pair_kokkos.h` template with `COUL_FLAG=1`. -Add `compute_fcoul` and `compute_ecoul`. The Coulomb part uses no long-range -tables (Wolf damping, DSF cutoff, or plain cut). -Pattern to follow: `pair_lj_cut_coul_dsf_kokkos`. - -| Pair style | Package | Coulomb type | Status | -|---|---|---|---| -| `born/coul/wolf` | EXTRA-PAIR | Wolf damped | **done** | -| `lj/cut/coul/wolf` | EXTRA-PAIR | Wolf damped | **done** | -| `nm/cut/coul/cut` | EXTRA-PAIR | cut | **done** | -| `coul/diel` | EXTRA-PAIR | dielectric screening | **done** | -| `coul/shield` | INTERLAYER | exponential screening | **done** | -| `buck6d/coul/gauss/dsf` | MOFFF | Gaussian-damped DSF | **done** | -| `coul/cut/global` | EXTRA-PAIR | tiny wrapper of `coul/cut` | **done** | -| `lj/cut/sphere` | EXTRA-PAIR | radius from per-atom property; no Coulomb (COUL_FLAG=0) | **done** | - -**Notes:** -- `coul/diel`: stores scalar dielectric parameters (`a_eps`, `b_eps`, `eps_s`) as `KK_FLOAT` - members and copies them before each kernel launch. -- `coul/shield`: includes per-atom `molecule` view to skip same-layer pairs; the taper - function (Tap, dTap) is inlined using Horner's method with hardcoded coefficients. - **Important:** the `molecule` member must be declared `typename AT::t_tagint_1d_randomread` - (not `DAT::t_tagint_1d_randomread`), otherwise the `kk/host` instantiation fails to - compile in GPU builds. See *Lessons Learned* for the general rule. -- `coul/cut/global`: inherits `PairCoulCutKokkos` directly; only overrides - `coeff()` (enforces 2 args) and `extract()`. -- `lj/cut/sphere`: COUL_FLAG=0; the per-atom `radius` view (declared `typename AT:: - t_kkfloat_1d_randomread`) is synced; cutsq stores the maximum possible cutoff per - type pair; the actual per-atom cutoff and sigma are computed inside - `compute_fpair`/`compute_evdwl`. - ---- - -## Group 4 — Pairwise with Long-Range Coulomb (Ewald/PPPM; 4 styles) - -**Status: COMPLETED** - -**Complexity:** Moderate. `COUL_FLAG=1`, use `init_tables()` for Coulomb. -Pattern to follow: `pair_born_kokkos` extended with `pair_lj_cut_coul_long_kokkos`. - -| Pair style | Package | Notes | Status | -|---|---|---|---| -| `nm/cut/coul/long` | EXTRA-PAIR | NM with long-range Ewald | **done** | -| `lj/switch3/coulgauss/long` | YAFF | YAFF + Gaussian charge Ewald | **done** | -| `mm3/switch3/coulgauss/long` | YAFF | YAFF MM3 variant | **done** | -| `buck6d/coul/gauss/long` | MOFFF | MOFFF Buckingham + Ewald | **done** | - ---- - -## Group 5 — TIP4P Water Models (4 styles) - -**Complexity:** High. The TIP4P geometry correction (virtual oxygen site M) -requires special handling in the neighbor loop. Study the existing -`pair_lj_cut_tip4p_long_kokkos` carefully before attempting. - -| Pair style | Package | Notes | -|---|---|---| -| `tip4p/cut` | MOLECULE | TIP4P cut | -| `tip4p/long` | KSPACE | TIP4P long Coulomb | -| `lj/cut/tip4p/cut` | MOLECULE | LJ + TIP4P cut | -| `lj/cut/tip4p/long` | KSPACE | LJ + TIP4P long | - ---- - -## Group 6 — Granular, Colloidal, Lubrication (2 styles) - -**Complexity:** High. These involve contact mechanics (overlap detection, -friction history) or hydrodynamic lubrication requiring per-atom state. - -| Pair style | Package | Notes | -|---|---|---| -| `gran/hooke` | GRANULAR | frictionless Hertz; no history arrays needed | -| `gran/hertz/history` | GRANULAR | requires shear history Kokkos view | - ---- - -## Group 7 — MANYBODY Three-body (SW-like, Tersoff tables; 3 styles) - -**Complexity:** High. These use a short neighbor list in addition to the -regular neighbor list. Follow `pair_sw_kokkos` and `pair_tersoff_kokkos` -as patterns; the short-neigh build kernel and the three-body loop kernel -must be implemented manually (the `pair_kokkos.h` template does not support -three-body). - -| Pair style | Package | Notes | -|---|---|---| -| `sw/mod` | MANYBODY | SW variant; inherits from PairSW; follow `pair_sw_kokkos` | -| `nb3b/harmonic` | MANYBODY | three-body harmonic, independent from SW hierarchy | -| `tersoff/mod/c` | MANYBODY | Tersoff mod + carbon correction | - ---- - -## Group 8 — Moderate Many-Body / Geometry-Dependent (6 styles) - -**Complexity:** High. These require non-trivial per-atom or angle-dependent -loops that do not map onto the `pair_kokkos.h` template. - -| Pair style | Package | Notes | -|---|---|---| -| `atm` | MANYBODY | three-body Axilrod-Teller-Muto; triple loop | -| `local/density` | MANYBODY | local density embedding; two-pass loop | -| `gayberne` | ASPHERE | ellipsoid-ellipsoid; per-atom quaternions on device | -| `resquared` | ASPHERE | re-squared ellipsoid; similar to gayberne | -| `line/lj` | ASPHERE | line-segment LJ; per-atom shape/orientation | -| `tri/lj` | ASPHERE | triangle LJ; per-atom shape/orientation | - ---- - -## Group 9 — H-Bond, Dipole, Peridynamics (6 styles) - -**Complexity:** High. Angle-dependent (H-bond) or orientation-dependent -(dipole) or continuum mechanics (peri) interactions. - -| Pair style | Package | Notes | -|---|---|---| -| `hbond/dreiding/lj` | MOLECULE | angle-dependent H-bond; triple loop | -| `hbond/dreiding/morse` | MOLECULE | Morse variant of above | -| `hbond/dreiding/lj/angleoffset` | EXTRA-MOLECULE | angle-offset extension | -| `hbond/dreiding/morse/angleoffset` | EXTRA-MOLECULE | angle-offset extension | -| `lj/sf/dipole/sf` | DIPOLE | shifted-force dipole + LJ | -| `lj/expand/sphere` | EXTRA-PAIR | per-atom sphere radii required | - ---- - -## Documentation Checklist per Style - -For each pair style ported, update the following: - -1. **`src/KOKKOS/pair__kokkos.h`** — new file -2. **`src/KOKKOS/pair__kokkos.cpp`** — new file -3. **`src/KOKKOS/Install.sh`** — add `action` lines -4. **Base class `.h` in `src//pair_.h`**: - - Make `allocate()` virtual -5. **Base class `.cpp` in `src//pair_.cpp`**: - - Add `if (copymode) return;` as first line of destructor -6. **`doc/src/pair_.rst`**: - - Add `.. index:: pair_style /kk` near the top and so that they are ordered in groups by the base pair style and then for the same base style alphabetically according to the accelerator suffix. So `/kk` follows `/gpu` but comes before `/omp`. - - Add `*/kk*` to `Accelerator Variants:` - - Order the list of accelerator variants alphabetically -7. **`doc/src/Commands_pair.rst`**: - - Add letter `k` to the entry for this style - - When adding to existing letter use (ko) and *not* (o,k), that is order alphabetically and do not use a comma. - ---- - -## Build and Test Instructions - -### Build for testing - -```bash -mkdir -p build -cmake -S cmake -B build \ - -C cmake/presets/gcc.cmake \ - -C cmake/presets/most.cmake \ - -D PKG_KOKKOS=on \ - -D Kokkos_ENABLE_OPENMP=on \ - -D DOWNLOAD_POTENTIALS=off \ - -D ENABLE_TESTING=on \ - -G Ninja -cmake --build build -j 4 -``` - -### Style checks before committing - -```bash -cd src && make check-whitespace && make check-permissions -``` - -### Running unit tests - -```bash -cd build && ctest -V -R pair -``` - ---- - -## Summary of Common Mistakes to Avoid - -1. **Forgetting `if (copymode) return;`** — causes double-free crash on GPU. -2. **Forgetting `virtual void allocate()`** — silently calls the wrong allocate, - missing KK dual-view setup, leading to incorrect results or crashes. -3. **Wrong `CoulLongTable` template parameter** — use `<0>` when - `COUL_FLAG=0`, `<1>` when `COUL_FLAG=1`. -4. **Missing friend declarations** — `pair_compute*` helpers are templated - free functions; the class must declare them as friends. -5. **Not using `KK_FLOAT`** — all floating-point fields in `params_*` structs - must use `KK_FLOAT` (not `double`). -6. **Not adding `// NOLINTNEXTLINE` before each `KOKKOS_INLINE_FUNCTION`** — - required to suppress linter warnings in LAMMPS. -7. **Wrong Install.sh action format** — when base class is in another package - (e.g., EXTRA-PAIR), pass both filenames; when base is in `src/`, omit - second filename. -8. **Not rebuilding with `make purge` after switching build systems.** -9. **Using `DAT::t_` for per-atom views assigned from `atomKK`** — - every per-atom view assigned via `atomKK->k_.view()` - must be declared `typename AT::t_` (not `DAT::t_`). `AT` is - `ArrayTypes`, so the view type adapts to the template parameter. - `DAT` is hardcoded to `ArrayTypes`, which compiles fine for - the `kk/device` instantiation but triggers a Kokkos `ViewMapping` static - assertion when the class is instantiated for `LMPHostType` (the `kk/host` - variant required in GPU builds). Standard views that hold their own data - (e.g., `DAT::ttransform_kkacc_1d k_eatom`, `DAT::ttransform_kkfloat_2d - k_cutsq`) are correctly declared with `DAT::` because they are allocated - locally and are not assigned from an `atomKK->k_*.view()` call. - ---- - -## Lessons Learned (updated after Group 2) - -### Global scalar parameters in pair styles - -Some pair styles (e.g., `momb`) have global scalar parameters set by -`settings()` rather than per-pair parameters set by `pair_coeff`. These -scalars are stored as plain `double` members of the base class (e.g., -`sscale`, `dscale`). For the KOKKOS version, copy them to `KK_FLOAT` -members (e.g., `m_sscale`, `m_dscale`) in `compute()` before the kernel -launch. They can then be captured by the `KOKKOS_INLINE_FUNCTION` methods -through `this` (which is captured by the Kokkos functor). - -### MDF (Mei-Davenport-Fernando) tapering - -The `buck/mdf` style has a smooth taper applied when the inter-atomic -distance is in the range `[cut_inner, cut_outer]`. In the standard -`pair_kokkos.h` template, the `compute_fpair` function receives `rsq` and -must compute `r = sqrt(rsq)` itself. The tapering logic (computing `d`, -`tt`, `dt`) can be inlined directly in `compute_fpair` and `compute_evdwl` -using a conditional `if (rsq > cut_inner_sq)`. Store `cut_inner`, -`cut_inner_sq`, and the outer `cutsq` in the per-pair `params_*` struct so -the kernel can branch correctly. - -### Orientation-dependent pair styles (ylz, gayberne, etc.) - -The `ylz` style computes orientation-dependent forces and torques based on -per-atom quaternion data. It does not fit the `pair_kokkos.h` template -because: -1. It needs to read quaternion data from `AtomVecEllipsoidKokkos`. -2. It accumulates torques as well as forces. -3. The inner loop is not a simple `compute_fpair` scalar. - -For such styles a **custom kernel** is required, following the pattern of -`pair_lj_cut_dipole_cut_kokkos`: - -- Use `TagPairXXXKernel` tags. -- Override `compute()` to launch the appropriate template instantiation with - `Kokkos::parallel_for` or `Kokkos::parallel_reduce`. -- Accumulate torques with atomic operations via a view with - `Kokkos::MemoryTraits::value>`. -- Access the ellipsoid bonus data (quaternions) via - `avecKK->k_bonus.view()` where `avecKK` is a pointer to - `AtomVecEllipsoidKokkos` cast from `atom->style_match("ellipsoid")`. -- Use `MathExtraKokkos::quat_to_mat()` to convert quaternion to rotation - matrix on-device. -- Set `datamask_read` to include `TORQUE_MASK | ELLIPSOID_MASK`. -- Set `datamask_modify` to include `TORQUE_MASK`. -- Store the neighbor-list arrays explicitly (`d_neighbors`, `d_numneigh`, - `d_ilist`) rather than relying on the `pair_compute` helper. - -### lj/pirani: Kokkos::pow in device code - -The ILJ/Pirani potential uses `pow(rx, n(rx))` where `n(rx)` is itself a -function of the inter-atomic distance. `Kokkos::pow(base, exp)` is the -device-portable equivalent of `std::pow`. Using `std::pow` inside a -`KOKKOS_INLINE_FUNCTION` causes a compiler error on GPU targets. Always -prefer `Kokkos::` math functions in device kernels: -`Kokkos::sqrt`, `Kokkos::exp`, `Kokkos::pow`, `Kokkos::log`, -`Kokkos::sin`, `Kokkos::cos`, etc. - -### Force sign convention - -Be careful with force sign conventions. In the base CPU code, forces are -often accumulated as `f[i][0] += delx * fpair` where `fpair = F/r` and -`delx = xj - xi`. The KOKKOS kernel must use the same convention. For the -`ylz` style the force on atom `i` due to atom `j` is `-dU/dr * rhat` where -`rhat` points from `i` to `j` (i.e., `r12 = xj - xi`); the force on `j` -is the Newton-3 partner `-force_on_i`. - ---- - -## Lessons Learned (updated after Group 3, session May 2026) - -### Per-atom views: always use `typename AT::` not `DAT::` - -The most dangerous portability mistake for COUL_FLAG=1 styles (and any style -accessing extra per-atom arrays) is declaring a per-atom view with the -hardcoded `DAT::` type alias instead of the template-parameterized `AT::`: - -```cpp -// WRONG — compiles for kk/device but fails at kk/host instantiation: -DAT::t_tagint_1d_randomread molecule; - -// CORRECT — adapts to DeviceType, works for both kk/device and kk/host: -typename AT::t_tagint_1d_randomread molecule; -``` - -The rule is simple: any member that is assigned from -`atomKK->k_.view()` must be declared with `typename AT::`. -Views that manage their own data (dual views allocated in `allocate()`, e.g., -`k_eatom`, `k_vatom`, `k_cutsq`) are correctly declared with `DAT::` because -they do not hold per-atom data obtained from `atomKK`. - -This bug manifests as a Kokkos `ViewMapping` static assertion at compile time -when targeting GPU architectures (because GPU builds instantiate both -`PairKokkos` and `PairKokkos`). On CPU-only -builds both `LMPDeviceType` and `LMPHostType` share the same memory space, so -the bug is silent. - -The `pair_coul_shield_kokkos` style contains a `molecule` array (to skip -same-layer pairs) that was originally declared as `DAT::t_tagint_1d_randomread` -and was fixed to `typename AT::t_tagint_1d_randomread` in this session. - -**Checklist:** when writing any new KK pair style, audit every per-atom -array member with `grep "DAT::" pair__kokkos.h`. Only these are safe -as `DAT::`: - -- `DAT::ttransform_kkacc_1d k_eatom` -- `DAT::ttransform_kkacc_1d_6 k_vatom` -- `DAT::ttransform_kkfloat_2d k_cutsq` -- `DAT::tdual_kkfloat_2d k_cut_ljsq` / `k_cut_coulsq` - -Everything else that is set to `atomKK->k_.view()` must -use `typename AT::`. - -### `coul/shield`: per-molecule filtering via the `molecule` view - -`pair_coul_shield` skips interactions between atoms in the same layer (same -molecule id). In the KOKKOS kernel this is implemented with a per-atom -`molecule` view: - -```cpp -// in compute_fcoul / compute_ecoul: -if (molecule(i) == molecule(j)) return static_cast(0.0); -``` - -The view is synced in `compute()` before the kernel launch: - -```cpp -molecule = atomKK->k_molecule.view(); -``` - -Because the `molecule` view's type must match `DeviceType`'s memory space, -it must be declared `typename AT::t_tagint_1d_randomread`, not -`DAT::t_tagint_1d_randomread`. This is the concrete example that motivated -the general rule described above. - -### `coul/shield`: inline taper function - -The `coul/shield` potential uses a polynomial taper function to smooth the -force to zero at the cutoff. In the KOKKOS kernel, all math must be -device-portable. The taper and its derivative are computed via Horner's -method with hardcoded coefficients (exactly the same coefficients as the CPU -base class), called directly inside `compute_fcoul` and `compute_ecoul`. -No LAMMPS utility function is needed; the 8 polynomial coefficients are -embedded as literal constants in the kernel. - -### `coul/cut/global`: thin wrapper inheriting from `PairCoulCutKokkos` - -`pair_coul_cut_global_kokkos` does not need its own full implementation. -It is sufficient to: -1. Create a subclass `PairCoulCutGlobalKokkos` that inherits - from `PairCoulCutKokkos`. -2. Override `coeff()` to enforce exactly two arguments (as in the base CPU - class). -3. Override `extract()` to return the `epsilon` pointer. -4. Redirect the `PairStyle` macro entries to the new class. - -No new `compute_fpair`/`compute_fcoul` is needed; the parent handles all -kernel logic. - -### `lj/cut/sphere`: per-atom radius with a global `cutsq` ceiling - -`pair_lj_cut_sphere_kokkos` reads per-atom radii and computes per-pair -cutoffs on-the-fly inside `compute_fpair`/`compute_evdwl`. `cutsq` stores -the **maximum possible** squared cutoff per atom-type pair (set in -`init_one()`), so the neighbor list is built conservatively. Inside the -kernel, the actual cutoff for atoms `i`–`j` is -`(sigma_ij + radius[i] + radius[j])^2`, and pairs beyond that distance -return zero force regardless of the neighbor list entry. - -The `radius` per-atom view is declared `typename AT::t_kkfloat_1d_randomread -radius` (using `typename AT::`, not `DAT::`) and is synced in `compute()`: - -```cpp -radius = atomKK->k_radius.view(); -``` - -The same `typename AT::` rule applies here as to `molecule`. - ---- - -## Candidate Fix Styles to Port - -This section covers porting of **fix styles** from `src/` and the `EXTRA-FIX` package. -Unlike pair styles, fix styles implement a wide range of lifecycle hooks -(`initial_integrate`, `final_integrate`, `post_force`, `end_of_step`, etc.) and -have very different complexity profiles. The groups below are labeled **A through H** -and ordered from simplest to most complex (or least to most GPU-unfriendly). - -### Key differences from pair-style porting - -1. **No `pair_kokkos.h` template** — fix styles have no equivalent of the - pairwise-dispatch framework. Each fix implements one or more lifecycle methods - directly with `Kokkos::parallel_for` / `Kokkos::parallel_reduce`. - -2. **Fix lifecycle hooks** — identify which hooks need acceleration. Common - target hooks are `post_force`, `initial_integrate`, `final_integrate`, and - `end_of_step`. Hooks that run rarely (e.g., `write_restart`) stay on the - CPU and do not need porting. - -3. **`datamask_read` / `datamask_modify`** — every KOKKOS fix must declare - which per-atom arrays it reads and which it modifies, using the bitmask - constants from `atom.h` (e.g., `F_MASK`, `V_MASK`, `X_MASK`). - Override `get_compute_flag()` if needed. - -4. **`atomKK` sync/modified** — before a kernel reads a per-atom array, call - `atomKK->sync(flag)`. After writing, call - `atomKK->modified(flag)`. Use the same `typename AT::` rule - for per-atom view members (see Key Rule 3 in the pair-styles section). - -5. **KokkosBase mixin** — fixes that use per-atom stored data (those that - implement `grow_arrays`, `copy_arrays`, `pack_exchange`, `unpack_exchange`) - must also inherit from `KokkosBase` so the Kokkos atom-map machinery - correctly manages the dual views. See `fix_spring_self_kokkos` for the - pattern. - -6. **`Install.sh` entries** — same format as pair styles. When the base fix - lives in `src/`, omit the second argument; when it lives in an optional - package (e.g., EXTRA-FIX), pass both filenames: - - ```sh - # Base in src/: - action fix_lineforce_kokkos.cpp - action fix_lineforce_kokkos.h - - # Base in EXTRA-FIX: - action fix_drag_kokkos.cpp fix_drag.cpp - action fix_drag_kokkos.h fix_drag.h - ``` - -7. **Documentation** — update `doc/src/fix_.rst` (add `/kk` index entry - and `Accelerator Variants:` line) and `doc/src/Commands_fix.rst` (add letter - `k` to the accelerator string). - ---- - -## Group A — Trivial per-atom force/velocity loops (src/ and EXTRA-FIX) ✓ DONE - -**Complexity:** Very low. A single `Kokkos::parallel_for` over `[0, nlocal)` -reading `f[]` (or `v[]`) and writing back. No per-atom stored state, no global -reduction, no communication. Pattern: inherit from the base fix, override -`post_force()` (and `min_post_force()` if present) with a Kokkos functor. -Follow `fix_viscous_kokkos` as the primary template. - -| Fix style | Package | Operation | Notes | -|---|---|---|---| -| `nve/noforce` | `src/` | Advance positions: `x += dt*v` | No force reads; pattern: `fix_nve_kokkos` | -| `aveforce` | `src/` | Replace per-atom `f` with group-average force | Needs a global `Kokkos::parallel_reduce` + MPI allreduce before applying; similar to `fix_addforce_kokkos` | -| `viscous/sphere` | `EXTRA-FIX` | Viscous drag + angular drag (torque) | Reads `omega`, writes `torque`; follow `fix_viscous_kokkos` | -| `drag` | `EXTRA-FIX` | Drag force toward target point/line/plane | Simple per-atom `f` update | -| `oneway` | `EXTRA-FIX` | Zero velocity component when moving the wrong way | Simple per-atom `v` check + zero | - ---- - -## Group B — Wall styles extending FixWall (src/ and EXTRA-FIX) ✓ DONE - -**Complexity:** Low. All are subclasses of `FixWall` and need only -`precompute(int)` (precompute per-wall coefficients) and `wall_particle(int,int,double)` -(compute force/energy for one atom at given wall distance) to be ported. -Follow `fix_wall_lj93_kokkos` exactly. - -| Fix style | Package | Potential form | Notes | -|---|---|---|---| -| `wall/harmonic` | `src/` | Harmonic spring | Simplest: `F = k*(r0-r)` | -| `wall/lj126` | `src/` | LJ 12-6 | Follow `wall/lj93/kk` directly | -| `wall/lj1043` | `src/` | LJ 10-4-3 integrated | Slightly more complex `wall_particle` | -| `wall/morse` | `src/` | Morse potential | Two exponential terms; follow `wall/lj93/kk` | - -**Note:** `wall/reflect/stochastic` (EXTRA-FIX) inherits `FixWallReflect` (already ported -as `wall/reflect/kk`), adds a Marsaglia random-number generator for thermostatting. The -random-number generator cannot be called from device code without extra work (see Group F). - ---- - -## Group C — Sphere-body NVE/NVT/NPT integrators extending FixNH ✓ DONE - -**Complexity:** Low-to-moderate. `FixNHSphere` extends `FixNH` (already -ported as `fix_nh_kokkos`) by overriding `nve_v()`, `nve_x()`, and `nh_v_temp()` -to operate on both linear and angular velocity. The KOKKOS variants -`fix_nph_kokkos` / `fix_npt_kokkos` / `fix_nvt_kokkos` already exist; the sphere -variants merely add the angular DOF loops. Follow `fix_nve_sphere_kokkos` for the -angular loop pattern (or `fix_nve_asphere_kokkos` for the rigid-body variant). - -| Fix style | Package | Base class chain | Notes | -|---|---|---|---| -| `nh/sphere` | `src/` | `FixNHSphere` → `FixNH` → `Fix` | Adds `nve_v_sphere`, `nve_x_sphere`, `nh_v_temp_sphere` | -| `nph/sphere` | `src/` | `FixNPHSphere` → `FixNHSphere` | Thin wrapper; most work in `nh/sphere/kk` | -| `npt/sphere` | `src/` | `FixNPTSphere` → `FixNHSphere` | Same as above | -| `nvt/sphere` | `src/` | `FixNVTSphere` → `FixNHSphere` | Same as above | - -## compute temp/sphere ✓ DONE - -**Complexity:** Low. Mirrors `compute_temp_kokkos` but adds angular velocity -terms. Sphere particles always use `rmass` (no per-type mass path), so there -is no `RMASS` template parameter — only a `MODE` parameter (ALL vs ROTATE-only). -The `dof_compute()` and `init()` methods are kept CPU-side (called infrequently -and already optimised). Thin-wrapper constructors for the sphere NH fixes are -updated to create `temp/sphere/kk` instead of `temp/sphere`. - -| Compute style | Package | Notes | -|---|---|---| -| `temp/sphere/kk` | `src/KOKKOS/` | `compute_temp_sphere_kokkos.{h,cpp}` | - ---- - -## Group D — Per-atom stored-state fixes (grow_arrays + KokkosBase) - -**Complexity:** Moderate. These fixes maintain per-atom arrays that survive -atom migration (they implement `grow_arrays`, `copy_arrays`, `pack_exchange`, -`unpack_exchange`). The KOKKOS version must: - -1. Inherit from both the base fix and `KokkosBase`. -2. Replace CPU arrays with `Kokkos::DualView` members. -3. Override `grow_arrays` to resize dual views. -4. Override `pack_exchange_kokkos` / `unpack_exchange_kokkos`. - -Use `fix_spring_self_kokkos` as the primary template. - -| Fix style | Package | Per-atom data | Notes | -|---|---|---|---| -| `spring/rg` | `EXTRA-FIX` | Radius-of-gyration spring; needs global reduce | Moderate; follow `spring/self/kk` | -| `ti/spring` | `EXTRA-FIX` | Reference positions `xoriginal[nmax][3]` | Similar to `spring/self` | -| `addtorque/group` | `EXTRA-FIX` | Adds torque to group; needs COM reduce | Reads `x`, `torque`; pattern like `addforce/kk` | - ---- - -## Group E — Thermostat/barostat coupling with global statistics - -**Complexity:** Moderate. These fixes compute a global temperature or pressure, -then rescale velocities/forces. They call `Temperature->compute()` or -`Pressure->compute()` on the CPU, then launch a Kokkos kernel to rescale. -Pattern: `fix_temp_rescale_kokkos`, `fix_temp_berendsen_kokkos`. - -| Fix style | Package | Coupling type | Notes | -|---|---|---|---| -| `press/berendsen` | `src/` | Isotropic/anisotropic box rescaling | Temperature + pressure compute → box + velocity rescale | -| `press/langevin` | `EXTRA-FIX` | Stochastic pressure coupling | Similar to `press/berendsen` with random term | -| `temp/csvr` | `EXTRA-FIX` | Canonical sampling; velocity rescaling | Stochastic factor; needs host-side random then device rescale | -| `temp/csld` | `EXTRA-FIX` | Canonical sampling; Lowe-Denbigh-Andersen | Per-pair velocity reassignment; moderate complexity | -| `gjf` | `EXTRA-FIX` | Grønbech-Jensen/Farago Langevin integrator | Has per-atom `vhalf[nmax][3]`; inherits Langevin structure (`fix_langevin_kokkos` pattern) | - ---- - -## Group F — Moderate complexity: geometry/indenter/move/restraints - -**Complexity:** Moderate-to-high. These styles have variable run-time geometry, -tabulated data, or complex per-atom logic that requires careful structuring of -device kernels. - -| Fix style | Package | Operation | Notes | -|---|---|---|---| -| `indent` | `src/` | Force from sphere/cylinder/plane indenter | Runtime shape dispatch; evaluate distance from shape | -| `move` | `src/` | Prescribe atom trajectories (linear/wiggle/rotate/variable) | Four motion modes; complex per-atom state; `initial_integrate` | -| `heat` | `src/` | Add kinetic energy to two groups | Needs two-group velocity scale; similar to `temp/rescale` | -| `restrain` | `src/` | Harmonic restraints on bonds/angles/dihedrals | Needs per-restraint neighbor lookup; moderate loop | -| `deform/pressure` | `EXTRA-FIX` | Deformation with pressure control | Extends `fix_deform_kokkos` (ported); adds pressure coupling | - ---- - -## Documentation Checklist per Fix Style - -For each fix style ported, update the following: - -1. **`src/KOKKOS/fix__kokkos.h`** — new file; see structural notes below. -2. **`src/KOKKOS/fix__kokkos.cpp`** — new file. -3. **`src/KOKKOS/Install.sh`** — add `action` lines (omit second argument if base - is in `src/`, include both filenames if base is in an optional package). -4. **Base class `.cpp`** — add `if (copymode) return;` as first line of destructor - if not already present. -5. **`doc/src/fix_.rst`**: - - Add `.. index:: fix_style /kk` near the top. - - Add `*/kk*` to `Accelerator Variants:`. - - Order accelerator variants alphabetically. -6. **`doc/src/Commands_fix.rst`**: - - Add letter `k` to the accelerator string for this style. - - Use alphabetical order within the letters string (e.g., `ko` not `ok` or `o,k`). - -### Typical fix KOKKOS header skeleton - -```cpp -#ifdef FIX_CLASS -// clang-format off -FixStyle(/kk,FixKokkos); -FixStyle(/kk/device,FixKokkos); -FixStyle(/kk/host,FixKokkos); -// clang-format on -#else - -// clang-format off -#ifndef LMP_FIX__KOKKOS_H -#define LMP_FIX__KOKKOS_H - -#include "fix_.h" -#include "kokkos_type.h" - -namespace LAMMPS_NS { - -struct TagFix{}; - -template -class FixKokkos : public Fix { - public: - typedef DeviceType device_type; - typedef ArrayTypes AT; - - FixKokkos(class LAMMPS *, int, char **); - ~FixKokkos() override; - void post_force(int) override; - -// NOLINTNEXTLINE - KOKKOS_INLINE_FUNCTION - void operator()(TagFix, const int &) const; - - private: - typename AT::t_kkfloat_1d_3_lr x; - typename AT::t_kkacc_1d_3 f; - typename AT::t_int_1d_randomread mask; -}; - -} - -#endif -#endif -``` - -### `datamask_read` / `datamask_modify` convention - -Declare in the constructor body which per-atom arrays the fix touches: - -```cpp -FixKokkos::FixKokkos(LAMMPS *lmp, int narg, char **arg) - : Fix(lmp, narg, arg) -{ - kokkosable = 1; - atomKK = (AtomKokkos *) atom; - execution_space = ExecutionSpaceFromDevice::space; - - datamask_read = F_MASK | MASK_MASK; - datamask_modify = F_MASK; -} -``` - -### Syncing per-atom arrays before and after a kernel - -```cpp -void FixKokkos::post_force(int /*vflag*/) -{ - atomKK->sync(datamask_read); - - x = atomKK->k_x.view(); - f = atomKK->k_f.view(); - mask = atomKK->k_mask.view(); - int nlocal = atom->nlocal; - - Kokkos::parallel_for(Kokkos::RangePolicy>(0, nlocal), *this); - - atomKK->modified(datamask_modify); -} -``` - ---- - -## Lessons Learned from Fix Porting - -### Fix styles vs pair styles: key structural difference - -Pair styles always implement `compute(int eflag, int vflag)` and fit the -`pair_kokkos.h` dispatch template. Fix styles implement whichever lifecycle -hooks are relevant. Before porting, identify the set of hooks used: - -```bash -grep "void Fix[A-Z]" src//fix_.cpp | grep -v "^//" -``` - -Only those hooks need Kokkos kernels; others can call the base-class implementation. - -### Wall styles (FixWall subclasses): use the `wall_particle` override pattern - -All `FixWall` subclasses share a generic `post_force` loop in `FixWall::post_force`. -The KOKKOS port of `fix_wall_lj93_kokkos` replaces that loop with a Kokkos functor -and calls `wall_particle` inline. Every other `FixWall` subclass can follow the -same override, needing only a new `precompute` (compute per-wall coefficients) and -a new `wall_particle` (compute single-atom force from wall distance): - -```cpp -template -// NOLINTNEXTLINE -KOKKOS_INLINE_FUNCTION -void FixWallKokkos::wall_particle(int m, int which, double coord) const -{ - // compute fwall and ewall for atom at position coord from wall m -} -``` - -### Wall styles: `private:` must become `protected:` for coeff arrays - -The base-class coeff arrays (`coeff1[]`, `coeff2[]`, ..., `offset[]`) are often -declared `private:`. Because the KK subclass inherits from the base and reads -those arrays in `precompute()`, they must be changed to `protected:`. Always -check with: - -```bash -grep -n "private:\|coeff\|offset" src/fix_wall_.h -``` - -### Wall styles: `fix_wall_harmonic` has no per-wall DualViews - -`wall/harmonic` does not precompute coefficients (it computes `dr = cutoff - delta` -inline). The `precompute()` override is empty in the KK class. The base-class -`epsilon[]` and `cutoff[]` (protected in `FixWall`) are accessed directly as scalar -casts in the functor since they are small fixed arrays (6 elements) that remain on -the host. For consistency with other wall KK styles the DualView pattern is still -used for `k_vatom` but no coefficient DualViews are needed. - -### Wall styles: `fix_wall_lj1043` — avoid `powint` in device kernels - -`powint(x, -N)` is a **host-only** function from `math_special.h`. In the base-class -`wall_particle`, integer powers like `powint(delta + coeff4[m], -3)` must be replaced -in the device functor with explicit repeated multiplication: - -```cpp -KK_FLOAT dc4inv = 1.0 / (delta + d_coeff4(m)); -KK_FLOAT dc4inv3 = dc4inv * dc4inv * dc4inv; // replaces powint(..., -3) -KK_FLOAT dc4inv4 = dc4inv3 * dc4inv; // replaces powint(..., -4) -``` - -Store `coeff4[]` in its own DualView so the device kernel can read it. - -### Wall styles: `fix_wall_morse` — `exp` is available on device - -Morse potential uses `exp()`, which is available in CUDA/HIP device code as -`Kokkos::exp()`. Simply replace `exp(...)` with `Kokkos::exp(...)` in the -device functor. The parameters `alpha[]`, `sigma[]`, and `epsilon[]` are defined -in the `FixWall` base (`protected:`), so copy them to DualViews in `precompute`. - -### Wall styles: `post_force` wraps base and handles virial - -The KK `post_force` override only: -1. Reallocates `k_vatom` if `vflag_atom` is set. -2. Calls `FixWall::post_force(vflag)` — which calls the overridden - `wall_particle` (the KK version). -3. Syncs `k_vatom` back to host if needed. - -The virial accumulation inside `wall_particle` uses the `result[7..12]` array -and is flushed to `virial[0..5]` after `parallel_reduce` returns. - -### Sphere integrators: extending FixNHKokkos - -`FixNHKokkos` already exposes virtual `nve_v`, `nve_x`, `nh_v_temp` hooks. -The sphere variants only add angular velocity updates. The Kokkos port of -`FixNHSphereKokkos` should add a second functor that updates `omega` alongside -`v`, dispatched from the same `initial_integrate` / `final_integrate` call. - -### Sphere NH integrators: inherit from FixNHKokkos, not FixNHSphere - -The instinct is to inherit `FixNHSphereKokkos` from `FixNHSphere` (like -`FixWallLJ93Kokkos` inherits from `FixWallLJ93`). But for NH sphere, this is -wrong: `FixNHSphere::nve_v()` calls `FixNH::nve_v()` internally — the CPU -version — losing the Kokkos parallelism. - -**Correct approach:** inherit `FixNHSphereKokkos` from -`FixNHKokkos`. This brings in the Kokkos implementations of -`nve_v`, `nve_x`, `nh_v_temp`, and `nh_v_press`. Override just the three -sphere-specific methods: - -``` -nve_v() → call FixNHKokkos::nve_v(), then launch omega update kernel -nve_x() → call FixNHKokkos::nve_x(), then launch dipole update kernel (if needed) -nh_v_temp() → call FixNHKokkos::nh_v_temp(), then launch omega scaling kernel -``` - -The constructor logic from `FixNHSphere` (omega/radius flag checks, `inertia`, -`disc` keyword) is duplicated directly in `FixNHSphereKokkos`. - -### NH sphere: FixNH::omega[6] vs per-atom omega view - -`FixNH` (inherited via `FixNHKokkos`) has a `protected: double omega[6]` -member for the barostat degrees of freedom. Adding a per-atom Kokkos view -also named `omega` in `FixNHSphereKokkos` would shadow this. Use a distinct -name — `omega_kk` — for the per-atom Kokkos view to avoid confusion. - -### NH sphere: base class views remain valid after virtual-call chain - -When `FixNHSphereKokkos::nve_v()` calls `FixNHKokkos::nve_v()` -first, the base sets `this->mask` and `this->rmass` to the current device -views before its `parallel_for`. After it returns, these views are still -valid (they are reference-counted handles). The sphere omega kernel can -therefore reuse `this->mask` and `this->rmass` directly without resyncing, -and only needs to additionally sync `OMEGA_MASK`, `TORQUE_MASK`, and -`RADIUS_MASK`. - -### NH sphere: thin-wrapper constructors use temp/sphere/kk, not temp/sphere - -The non-KK thin wrappers (`nph/sphere`, `npt/sphere`, `nvt/sphere`) create -`temp/sphere` computes. The KK thin wrappers (`nph/sphere/kk` etc.) should -instead create `temp/sphere/kk` computes (once `compute_temp_sphere_kokkos` -exists) so that the temperature calculation also runs on the device. -Using `temp/sphere` would still give the correct temperature but would require -a host synchronisation on every thermostat step, defeating the purpose of the -KOKKOS port. Using `temp/kk` would give the *wrong* temperature (ignores -angular velocity). - -### NH sphere: DLM dipole integrator not supported in KK mode - -The DLM (Dullweber-Leimkuhler-Maclachlan) dipole integrator in -`FixNHSphere::nve_x()` requires multiple matrix-vector products -(`BuildRxMatrix`, `matvec`, `transpose_times3`, etc.). These are feasible on -device in principle but complex and rarely used. The KK port supports only -the simple dipole integrator (`dlm_flag == 0`); requesting `update dipole dlm` -raises an error. - - -### compute temp/sphere: sphere particles always use rmass, so no RMASS template - -`compute temp` has an `RMASS` template parameter to handle both -per-atom mass (`rmass`) and per-type mass (`mass[type[i]]`). -`compute temp/sphere` does NOT need this because `atom_style sphere` always -provides `rmass` — the per-type mass path is never taken. The KK variant -therefore uses a simpler `MODE` template parameter (0 = ROTATE-only, -1 = ALL, i.e. translational + rotational), with `rmass` always used. - -### compute temp/sphere: view name collision with FixNH::omega - -`FixNH` has a `protected: double omega[6]` member for barostat DOF. -`ComputeTempSphereKokkos` is a `Compute`, not a fix, so there is no -collision here — but for consistency and clarity, the per-atom Kokkos -omega view is named `omega_kk` in the compute too. - -### Per-atom storage: dual-view pattern from fix_spring_self_kokkos - -When a fix stores per-atom data that migrates with atoms (`grow_arrays` / -`pack_exchange` / `unpack_exchange`), replace the plain C arrays with -`Kokkos::DualView` members and inherit from `KokkosBase`. The -`pack_exchange_kokkos` override packs atoms directly from the device view -without falling back to host memory, preserving GPU locality. +When performing a code review, apply the general instructions for contributions to +LAMMPS in https://docs.lammps.org/Modify_requirements.html and the programming style +instructions in https://docs.lammps.org/Modify_style.html + +When performing a code review, check any changes to the documentation (in the +`doc/src/` folder) to be written in American English and with plain ASCII characters. + +When performing a code review, ensure that the documentation for any new commands or +added keywords to existing commands contains a `.. versionadded:: TBD` directive. For +any modified commands or keywords a `.. versionchanged:: TBD` directive should be +included in the documentation. This does not apply to internal commands (style names +written in upper case) or when the change only adds an accelerated variant of an +existing style (then add the code letter to the respective `Commands_*.rst` file +instead). Check if any examples use the new or modified commands and whether they +need updating. + +When reviewing C++ code, ensure that no alternative tokens are used for logical +operators (`&&` not `and`, `||` not `or`, `!` not `not`, `^` not `xor`); alternative +tokens cause compilation failures with some compilers, most prominently Microsoft +Visual C++. + +When new files are added to package directories in `src`, make sure they are added to +the `src/.gitignore` file, so that copies made in `src` by the traditional make build +are not accidentally committed. When files are renamed or removed in package +directories, make sure the old names are added to `src/Purge.list` so stale copies are +removed by `make purge`. + +## Task-Specific Guides + +Path-scoped instructions in `.github/instructions/` are attached automatically when +matching files are touched. The deep dives in `.github/dev-docs/` are NOT loaded +automatically: read them before starting the corresponding kind of work. + +| Working on ... | Read | +|---|---| +| `src/KOKKOS/` styles (rules, policies) | `.github/instructions/kokkos.instructions.md` (auto) | +| porting a style to KOKKOS | `.github/dev-docs/kokkos-porting-guide.md` + `kokkos-porting-backlog.md` | +| granular/DEM code or tests | `.github/instructions/granular-tests.instructions.md` (auto) | +| documentation (`doc/`) | `.github/instructions/documentation.instructions.md` (auto) | +| force-style YAML tests (`unittest/`) | `.github/instructions/force-style-tests.instructions.md` (auto) | +| rRESPA support in a fix | `.github/dev-docs/respa-integration.md` | +| finite-size particles, inertia/angmom | `.github/dev-docs/finite-size-particles.md` | +| new/changed styles: MPI, restart, buffers | `.github/dev-docs/style-implementation-notes.md` | +| refactor validation, benchmarks, debugging | `.github/dev-docs/testing-and-verification.md` | ## Trust These Instructions -These instructions are tested and validated. Only search for additional information if: -- A specific command fails with an error -- You need details about a specific package's requirements -- Instructions appear outdated based on error messages -- Working with advanced features not covered here (GPU, Kokkos backends, etc.) - -For package-specific documentation, build options, and advanced features, refer to https://docs.lammps.org +These instructions are tested and validated. Only search for additional information +if a specific command fails, a package has special requirements, or the instructions +appear outdated based on error messages. For package-specific documentation, build +options, and advanced features, refer to https://docs.lammps.org diff --git a/.github/dev-docs/finite-size-particles.md b/.github/dev-docs/finite-size-particles.md new file mode 100644 index 00000000000..b4b3e64851b --- /dev/null +++ b/.github/dev-docs/finite-size-particles.md @@ -0,0 +1,86 @@ +# Extended (Finite-Size) Particles and Inertia / Angular-Momentum Diagnostics + +Lessons from making `compute inertia`, `compute inertia/chunk`, `compute angmom/chunk`, +`compute omega/chunk`, and the `inertia()`/`angmom()`/`omega()` variable functions +account for finite-size particles instead of treating every atom as a point mass. + +## Where the shape data lives + +**The extended atom styles are CORE, not in a package.** `src/atom_vec_ellipsoid.{h,cpp}`, +`atom_vec_line`, `atom_vec_tri`, and `atom_vec_body` live directly in `src/`, so any core +file may `#include` them and resolve a particle's shape data via +`dynamic_cast(atom->style_match("ellipsoid"|"line"|"tri"|"body"))` plus the +per-atom index arrays `atom->ellipsoid/line/tri/body` (>= 0 means a shape is assigned). +No package guard is needed (e.g. `set.cpp` already does this). The body *styles* +(`body nparticle`, ...) are in the BODY package, but the atom-vec interface is core. + +## Per-particle spin inertia + +Use `MathExtra::inertia_*` (see `fix rigid`). Reference implementation is +`src/RIGID/fix_rigid.cpp` (`setup_bodies_static` for inertia, `setup_bodies_dynamic` +for angular momentum). Prefactors: sphere `SINERTIA = 2/5`, line `LINERTIA = 1/12`. +Helpers return the tensor as a 6-vector in **Voigt order `{Ixx,Iyy,Izz,Iyz,Ixz,Ixy}`**: + +- `inertia_ellipsoid(shape, quat, mass, ivec)` -- regular ellipsoid from semi-axes. +- `inertia_ellipsoid(idiag, quat, ivec)` -- rotate stored principal moments to the + space frame; used for **superellipsoids** (`bonus_super[].inertia`) and **body** + particles (`bonus[].inertia`), which both store mass-weighted principal moments + + quaternion. +- `inertia_line(length, theta, mass, ivec)`, `inertia_triangle(idiag, quat, mass, ivec)`. + +**Voigt-order vs output-column mismatch is an easy bug.** `compute inertia/chunk` and +the `inertia()` variable order columns `{Ixx,Iyy,Izz,Ixy,Iyz,Ixz}`, but `MathExtra` +returns `{Ixx,Iyy,Izz,Iyz,Ixz,Ixy}`. Map `col3+=ivec[5]` (Ixy), `col4+=ivec[3]` (Iyz), +`col5+=ivec[4]` (Ixz). Off-diagonals are 0 for axis-aligned shapes, so a wrong mapping +only shows up once a body is rotated -- test with a non-identity quaternion. + +## Dispatch order and storage traps + +- **Check shape indices BEFORE the sphere (radius) branch.** Ellipsoid, superellipsoid, + triangle, and body particles also carry a finite `atom->radius` (their bounding + radius), so a leading `radius[i] > 0` test silently mis-handles them as spheres. + Order the dispatch ellipsoid/line/tri/body first, `radius` last. +- **Superellipsoids use `bonus_super`, not `bonus`.** `AtomVecEllipsoid` allocates + exactly one of the two depending on `atom->superellipsoid_flag`; the regular `bonus` + pointer is null in a superellipsoid system, so dereferencing it crashes. Branch on + the flag. +- **Angular momentum: OMEGA-type vs ANGMOM-type.** Sphere and line particles carry an + angular velocity (`atom->omega`); their spin angular momentum is `I_spin * omega` + (sphere: all 3 components; line: z only). Ellipsoid, superellipsoid, triangle, and + body particles store their angular momentum directly in `atom->angmom` -- add it + as-is. Guard on the `atom->omega`/`atom->angmom` pointers (null for atom styles + lacking them). + +## Do NOT add finite-size terms to the shared Group::inertia / Group::angmom + +Those methods are also called by physics routines that remove bulk rotation from the +*translational* velocities -- `fix momentum` (angular), `velocity ... zero angular`, +`compute temp/rotate`, `fix addtorque/group`, `fix tfmc`. Those need the point-mass +(orbital) tensor/vector: they form `omega = I^-1 L` and subtract `omega x r` from `v`, +which is self-consistent only if both `I` and `L` are orbital. Adding spin to the +shared method (while `L` stays orbital) makes `omega` wrong and breaks them for +finite-size systems. Instead the diagnostics call the orbital method and then add an +**additive** finite-size term: `Group::inertia_extended()` / `Group::angmom_extended()` +(each with a region variant). The spin contribution is center-of-mass-independent, so +it is a clean additive term. Per-chunk computes inline the same per-particle +contribution. + +## Test setup for finite-size particles (`unittest/commands/`) + +Build tiny systems with `create_atoms ... single X Y Z units box` so the +inertia/angmom is analytic: + +- `set shape Sx Sy Sz` stores **semi-axes = 0.5 * the given diameters** and initializes + the quaternion to identity. +- `atom_style ellipsoid superellipsoid` + default blockiness `(2,2)` makes a + superellipsoid reduce exactly to an ellipsoid (same analytic result), exercising the + `bonus_super` path. The stored inertia is computed **at `set shape` time**, so set + the mass *before* the shape. +- `set ... omega Wx Wy Wz` (needs `omega_flag`, e.g. sphere) and `set ... angmom Lx Ly + Lz` (needs `angmom_flag`, e.g. ellipsoid) seed the spin terms. +- Body particles need a `read_data` file with a `Bodies` section (`atom_style body + nparticle 1 1`; one body, `ndouble = 6 + 3*nsub`, first 6 doubles are the inertia + tensor that `data_body` diagonalizes). A single body at the origin round-trips its + stored inertia tensor through `compute inertia`. +- Point-particle regressions (e.g. the `fourmol` chunk-compute tests) must stay + unchanged, which confirms finite-size handling is inert for point particles. diff --git a/.github/dev-docs/kokkos-porting-backlog.md b/.github/dev-docs/kokkos-porting-backlog.md new file mode 100644 index 00000000000..c0d75c9e818 --- /dev/null +++ b/.github/dev-docs/kokkos-porting-backlog.md @@ -0,0 +1,90 @@ +# KOKKOS Porting Backlog + +**STATUS TABLES GO STALE.** Trust `ls src/KOKKOS/` and `git log` over this file. +Last verified: 2026-07-06. + +History: pair Groups 1-4 (EXTRA-PAIR simple pairwise, Wolf/DSF/cut Coulomb, long-range +Coulomb; ~30 styles) and fix Groups A-C (trivial force loops, wall styles, NH-sphere +integrators, plus `compute temp/sphere`) were ported and merged onto `develop` in +May-June 2026. Nine fake (sync-to-host) fix ports were committed and deleted in the same +period ("remove fake KOKKOS ports" commit); see `git log` for details. + +Coverage snapshot at last verification: pair coverage essentially complete (~101 styles; +all common ones done); kspace = plain `pppm` only; regions = `block` + `sphere` only. + +## Open pair-style groups + +- **Group 5 -- TIP4P** (high complexity: virtual M-site handling in the neighbor loop): + `tip4p/cut`, `tip4p/long`, `lj/cut/tip4p/cut`, `lj/cut/tip4p/long`, plus kspace + `pppm/tip4p`. **Ported on branch `kokkos-tip4p`** (pushed to the lammps/lammps remote): + shared header-only base `PairTIP4PKokkos` plus + `PPPMTIP4PKokkos`. **PR not yet opened.** (Third-party TIP4P PRs #4971 and #4928 are + closed.) +- **Group 6 -- granular/colloidal:** `gran/hooke` (no history arrays), + `gran/hertz/history` (needs shear-history Kokkos views). +- **Group 7 -- MANYBODY three-body** (manual short-neighbor + three-body kernels; follow + `pair_sw_kokkos` / `pair_tersoff_kokkos`): `sw/mod`, `nb3b/harmonic`, `tersoff/mod/c`. +- **Group 8 -- many-body / geometry-dependent** (custom kernels; the ASPHERE ones need + per-atom quaternions on device): `atm` (triple loop), `local/density` (two-pass loop), + `gayberne`, `resquared`, `line/lj`, `tri/lj`. +- **Group 9 -- H-bond, dipole, per-atom sphere:** `hbond/dreiding/lj`, + `hbond/dreiding/morse`, `hbond/dreiding/lj/angleoffset`, + `hbond/dreiding/morse/angleoffset` (angle-dependent triple loops), `lj/sf/dipole/sf`, + `lj/expand/sphere`. + +## Fix/compute work in open PR #4989 (branch `more-kokkos-porting`, not yet merged) + +- Group D (per-atom stored state, KokkosBase): `fix spring/rg`, `ti/spring`, + `addtorque/group`. +- Group E (thermostat/barostat coupling): `fix gjf`, `press/berendsen`, + `press/langevin`, `temp/csvr`, `temp/csld`. +- Computes: `temp/partial`, `temp/profile`, `ke/atom`. + +## Group F triage + +- Real porting targets: `fix heat` (group-KE `parallel_reduce` + velocity-rescale + kernel), `fix indent` (per-atom force kernel; host-evaluate only the few variable + scalars per step and broadcast them into the kernel). +- LEAVE UNPORTED (full-ports-only policy; no device work to offer): `fix move` + (`xoriginal` is a plain `double **` CPU array; a real port means converting it to a + DualView + KokkosBase first), `fix restrain` (`atom->map()` ghost lookups host-side), + `fix deform/pressure` (box-deformation logic is host-side scalar work). + +## Priority order (metric: device residency; NPT/barostatting first) + +1. Land the open work: PR #4989, and open a PR for branch `kokkos-tip4p` (NPT of TIP4P + water is a flagship GPU use case; the per-step host pair+kspace fallback -- not the + barostat -- is the real bottleneck). +2. `fix heat/kk` and `fix indent/kk` (the Group F real targets). +3. `compute temp/region/kk` -- gated on region coverage (only `block` and `sphere` + regions are ported; port the needed `region_*_kokkos` first). +4. `fix box/relax/kk` (minimization-time barostat; lower frequency). +5. Pair Groups 6-9, case by case. + +Deferred (not on any branch): + +- `ewald/kk`: Ewald is O(N^3/2); GPU pays off for large systems, where `pppm/kk` is what + is actually used. Ewald's real role is a CPU validation reference for small test + cases. The kspace GPU target is the PPPM family (e.g. `pppm/disp/kk`). +- `compute stress/atom`, `pe/atom`, `centroid/stress/atom`: need framework work first + (see "per-atom virial/energy aggregation" in the porting guide); a host-aggregation + wrapper would be a fake port. + +## Do NOT port + +- **`fix npt/kk` and `nph/kk` are COMPLETE full ports.** `fix_npt_kokkos` / + `fix_nph_kokkos` create a `temp/kk` temperature and a `pressure` compute that *uses* + it; every integrator hook (`nh_v_press`, `nve_v`, `nve_x`, `nh_v_temp`) and `remap()` + (via `DomainKokkos::x2lamda`/`lamda2x`) runs as a device kernel, including the + triclinic path. Nothing remains to do on the Nose-Hoover barostat itself. +- **Do NOT port `compute pressure`.** It has `datamask_read = datamask_modify = + EMPTY_MASK`: no per-atom loop at all -- the scalar/vector is the temperature scalar + (already from `temp/kk`) plus the global `virial[6]` arrays (already reduced on-device + by the force styles). The `if (!pressure->kokkosable) atomKK->sync(...)` guard in + `fix_nh_kokkos` therefore syncs **nothing**. A `pressure/kk` wrapper would eliminate a + no-op and add zero GPU work. +- Any fix whose per-atom work cannot run on-device: `move`, `restrain`, + `deform/pressure` (see the Group F triage above), and anything coupling to an external + library (`colvars`). Leaving them unported is the correct outcome. +- `fix ilves/omp` -- per-cluster OpenMP threading was benchmarked and rejected (net + slowdown); the same reasoning argues against a KOKKOS thread-parallel variant. diff --git a/.github/dev-docs/kokkos-porting-guide.md b/.github/dev-docs/kokkos-porting-guide.md new file mode 100644 index 00000000000..88e17460446 --- /dev/null +++ b/.github/dev-docs/kokkos-porting-guide.md @@ -0,0 +1,620 @@ +# KOKKOS Porting Guide: Templates and Lessons + +How-to reference for porting LAMMPS pair, fix, and compute styles to the KOKKOS package: +template skeletons plus the accumulated lessons from past porting work, by theme. The +always-on rules (copymode guard, virtual allocate, `AT::` vs `DAT::`, datamask/sync, +full-ports-only, doc checklist) live in `.github/instructions/kokkos.instructions.md` and +are not repeated here; remaining work is in `.github/dev-docs/kokkos-porting-backlog.md`. + +## Porting a pair style + +Most simple pairwise styles (no three-body terms, no many-body embedding) fit the +`pair_kokkos.h` dispatch template. The KOKKOS class implements: + +| Function | COUL_FLAG=0 | COUL_FLAG=1 | +|---|---|---| +| `compute_fpair` | required | required (VdW part) | +| `compute_evdwl` | required | required | +| `compute_fcoul` | return 0 | required | +| `compute_ecoul` | return 0 | required | + +The template automatically handles half/half-thread/full neighbor-list dispatch, force +reduction, and energy/virial accumulation. Canonical examples: `pair_born_kokkos` and +`pair_lj_cut_kokkos` in `src/KOKKOS/`; for short-range Coulomb (Wolf/DSF/cut) follow +`pair_lj_cut_coul_dsf_kokkos`; for long-range tables `pair_lj_cut_coul_long_kokkos` +(uses `init_tables()`). + +### Header skeleton (COUL_FLAG=0) + +```cpp +#ifdef PAIR_CLASS +PairStyle(/kk, PairKokkos); +PairStyle(/kk/device,PairKokkos); +PairStyle(/kk/host, PairKokkos); +#else +#ifndef LMP_PAIR__KOKKOS_H +#define LMP_PAIR__KOKKOS_H +#include "pair_kokkos.h" +#include "pair_.h" +#include "neigh_list_kokkos.h" +namespace LAMMPS_NS { +template +class PairKokkos : public Pair { + public: + enum {EnabledNeighFlags=FULL|HALFTHREAD|HALF}; + enum {COUL_FLAG=0}; + typedef DeviceType device_type; + typedef ArrayTypes AT; + PairKokkos(class LAMMPS *); + ~PairKokkos() override; + void compute(int, int) override; + void init_style() override; + double init_one(int, int) override; + + struct params_ { + KOKKOS_INLINE_FUNCTION params_() { /* zero all */ } + KOKKOS_INLINE_FUNCTION params_(int) { /* zero all */ } + KK_FLOAT cutsq, /* ... pair-specific params ... */; + }; + + protected: + template + KOKKOS_INLINE_FUNCTION + KK_FLOAT compute_fpair(...) const; + + template + KOKKOS_INLINE_FUNCTION + KK_FLOAT compute_evdwl(...) const; + + template + KOKKOS_INLINE_FUNCTION + KK_FLOAT compute_ecoul(...) const { return 0; } + + Kokkos::DualView**,Kokkos::LayoutRight,DeviceType> k_params; + typename Kokkos::DualView**,...>::t_dev_const_um params; + params_ m_params[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; + KK_FLOAT m_cutsq[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; + typename AT::t_kkfloat_1d_3_lr_randomread x; + typename AT::t_kkfloat_1d_3_lr c_x; + typename AT::t_kkacc_1d_3 f; + typename AT::t_int_1d_randomread type; + Kokkos::DualView k_cutsq; + typename Kokkos::DualView::t_dev d_cutsq; + typename AT::t_kkacc_1d d_eatom; + typename AT::t_kkacc_1d_6 d_vatom; + Kokkos::DualView k_eatom, k_vatom; + int neighflag, newton_pair; + int nlocal, nall, eflag, vflag; + friend struct PairComputeFunctorKokkos,FULL,true>; + friend struct PairComputeFunctorKokkos,FULL,false>; + friend struct PairComputeFunctorKokkos,HALF,true>; + friend struct PairComputeFunctorKokkos,HALF,false>; + friend struct PairComputeFunctorKokkos,HALFTHREAD,true>; + friend struct PairComputeFunctorKokkos,HALFTHREAD,false>; + friend EV_FLOAT pair_compute_neighlistKokkos, + FULL,CoulLongTable<0>>(PairKokkos*,NeighListKokkos*); + friend EV_FLOAT pair_compute_neighlistKokkos, + HALF,CoulLongTable<0>>(PairKokkos*,NeighListKokkos*); + friend EV_FLOAT pair_compute_neighlistKokkos, + HALFTHREAD,CoulLongTable<0>>(PairKokkos*,NeighListKokkos*); + friend EV_FLOAT pair_computeKokkos, + CoulLongTable<0>>(PairKokkos*,NeighListKokkos*); + friend void pair_virial_fdotr_computeKokkos>( + PairKokkos*); +}; +} +#endif +#endif +``` + +For `COUL_FLAG=1`, add `compute_fcoul` and `compute_ecoul`, add `special_coul`, `qqrd2e`, +and the `q` array, and change `CoulLongTable<0>` to `CoulLongTable<1>` in the friend +declarations. + +### .cpp skeleton + +```cpp +template +PairKokkos::PairKokkos(LAMMPS *lmp) : Pair(lmp) +{ + respa_enable = 0; + kokkosable = 1; + atomKK = (AtomKokkos *) atom; + execution_space = ExecutionSpaceFromDevice::space; + datamask_read = X_MASK | F_MASK | TYPE_MASK | ENERGY_MASK | VIRIAL_MASK; + datamask_modify = F_MASK | ENERGY_MASK | VIRIAL_MASK; +} + +template +PairKokkos::~PairKokkos() +{ + if (copymode) return; + if (allocated) { + memoryKK->destroy_kokkos(k_eatom, eatom); + memoryKK->destroy_kokkos(k_vatom, vatom); + memoryKK->destroy_kokkos(k_cutsq, cutsq); + } +} + +template +void PairKokkos::compute(int eflag_in, int vflag_in) +{ + eflag = eflag_in; vflag = vflag_in; + if (neighflag == FULL) no_virial_fdotr_compute = 1; + ev_init(eflag,vflag,0); + if (eflag_atom) { /* reallocate k_eatom */ } + if (vflag_atom) { /* reallocate k_vatom */ } + atomKK->sync(execution_space,datamask_read); + k_cutsq.template sync(); + k_params.template sync(); + if (eflag || vflag) atomKK->modified(execution_space,datamask_modify); + else atomKK->modified(execution_space,F_MASK); + x = atomKK->k_x.view(); + c_x = atomKK->k_x.view(); + f = atomKK->k_f.view(); + type = atomKK->k_type.view(); + nlocal = atom->nlocal; nall = atom->nlocal + atom->nghost; + newton_pair = force->newton_pair; + special_lj[0..3] = ...; + NeighListKokkos* k_list = ...; + ... + EV_FLOAT ev = pair_computeKokkos, + CoulLongTable>(this, k_list); + if (eflag_global) eng_vdwl += ev.evdwl; + if (vflag_global) { virial[0..5] += ev.v[0..5]; } + if (eflag_atom) { k_eatom.template modify(); k_eatom.sync_host(); } + if (vflag_atom) { k_vatom.template modify(); k_vatom.sync_host(); } + if (vflag_fdotr) pair_virial_fdotr_compute(this); + copymode = 0; +} + +template +void PairKokkos::allocate() +{ + Pair::allocate(); + int n = atom->ntypes; + memory->destroy(cutsq); + memoryKK->create_kokkos(k_cutsq,cutsq,n+1,n+1,"pair:cutsq"); + d_cutsq = k_cutsq.template view(); + k_params = Kokkos::DualView**,...>("Pair::params",n+1,n+1); + params = k_params.template view(); +} + +template +void PairKokkos::init_style() +{ + Pair::init_style(); + // Request full neighbor list + neighbor->add_request(this, NeighConst::REQ_FULL | NeighConst::REQ_GHOST); +} + +template +double PairKokkos::init_one(int i, int j) +{ + double cutone = Pair::init_one(i,j); + k_params.view_host()(i,j). = static_cast([i][j]); + /* ... fill all params fields ... */ + k_params.view_host()(j,i) = k_params.view_host()(i,j); + if (i < MAX_TYPES_STACKPARAMS+1 && j < MAX_TYPES_STACKPARAMS+1) + m_params[i][j] = m_params[j][i] = k_params.view_host()(i,j); + m_cutsq[j][i] = m_cutsq[i][j] = static_cast(cutone*cutone); + k_cutsq.view_host()(i,j) = k_cutsq.view_host()(j,i) = cutone*cutone; + k_cutsq.modify_host(); + k_params.modify_host(); + return cutone; +} + +// Explicit instantiation at the bottom of the .cpp file +namespace LAMMPS_NS { +template class PairKokkos; +#ifdef LMP_KOKKOS_GPU +template class PairKokkos; +#endif +} +``` + +## Porting a fix style + +Key structural differences from pair-style porting: + +1. **No dispatch template.** There is no fix equivalent of `pair_kokkos.h`; each fix + implements its lifecycle hooks directly with `Kokkos::parallel_for` / + `Kokkos::parallel_reduce`. Primary template for a simple per-atom force loop: + `fix_viscous_kokkos`. +2. **Port only the hooks that matter.** Identify the hooks the base fix implements + (`grep "void Fix[A-Z]" src//fix_.cpp`); common targets are `post_force`, + `initial_integrate`, `final_integrate`, `end_of_step`. Hooks that run rarely + (e.g. `write_restart`) stay on the CPU via the base-class implementation. + +### Fix header skeleton + +```cpp +#ifdef FIX_CLASS +// clang-format off +FixStyle(/kk,FixKokkos); +FixStyle(/kk/device,FixKokkos); +FixStyle(/kk/host,FixKokkos); +// clang-format on +#else + +// clang-format off +#ifndef LMP_FIX__KOKKOS_H +#define LMP_FIX__KOKKOS_H + +#include "fix_.h" +#include "kokkos_type.h" + +namespace LAMMPS_NS { + +struct TagFix{}; + +template +class FixKokkos : public Fix { + public: + typedef DeviceType device_type; + typedef ArrayTypes AT; + + FixKokkos(class LAMMPS *, int, char **); + ~FixKokkos() override; + void post_force(int) override; + +// NOLINTNEXTLINE + KOKKOS_INLINE_FUNCTION + void operator()(TagFix, const int &) const; + + private: + typename AT::t_kkfloat_1d_3_lr x; + typename AT::t_kkacc_1d_3 f; + typename AT::t_int_1d_randomread mask; +}; + +} + +#endif +#endif +``` + +### Hook pattern + +The constructor sets `kokkosable`, `atomKK`, `execution_space`, and the datamasks as in +the pair-style skeleton above; each ported hook follows the sync/views/kernel/modified sequence: + +```cpp +void FixKokkos::post_force(int /*vflag*/) +{ + atomKK->sync(datamask_read); + x = atomKK->k_x.view(); + f = atomKK->k_f.view(); + mask = atomKK->k_mask.view(); + int nlocal = atom->nlocal; + Kokkos::parallel_for(Kokkos::RangePolicy>(0, nlocal), *this); + atomKK->modified(datamask_modify); +} +``` + +## Lessons: global scalars, reductions, and the host/device split + +- **Global scalar parameters** set by `settings()` (not per-pair coefficients) are plain + `double` base members. Copy them to `KK_FLOAT` members in `compute()` before the + kernel launch; kernels read them through `this` (the functor copy). +- **Plain int/flag base members are read on device for free** -- captured by value with + the functor object (like `groupbit`). Only **pointer** members (`boxlo`, `prd`, ...) + must be copied into device-friendly scalar arrays (`m_boxlo[3]`, ...); host pointers + cannot be dereferenced on device. +- **Thermostats/barostats: global scalar on the host, per-atom work on the device.** + Global reductions (`group->ke()`/`vcm()`/`mass()`, a Compute's `compute_scalar()`, a + `RanMars` draw) stay on the host -- but source the kinetic energy from a *kokkosable* + temperature compute (`temp/kk`) so the reduction runs on the GPU and only one scalar + comes back. The per-atom rescale MUST be a device kernel; delegating it to the CPU + base class is the fake-port trap. +- **Group-average force fixes** (the `aveforce` pattern) need a device + `parallel_reduce` plus an MPI allreduce before the per-atom apply kernel. + +## Lessons: tapering and switching functions + +- MDF-style tapers (`buck/mdf` and relatives): `compute_fpair` receives `rsq` and takes + `r = sqrt(rsq)` itself; inline the taper behind `if (rsq > cut_inner_sq)` and store + `cut_inner`, `cut_inner_sq`, and the outer `cutsq` in the per-pair `params_*` struct. +- Polynomial tapers (`coul/shield`): inline the taper and its derivative via Horner's + method with the same hardcoded coefficients as the CPU base, directly inside + `compute_fcoul`/`compute_ecoul`. No LAMMPS utility function is needed on device. + +## Lessons: custom kernels for orientation-dependent styles + +Styles that read per-atom quaternions and accumulate torques (`ylz`, `gayberne`, ...) do +not fit the `pair_kokkos.h` template. Write a custom kernel following +`pair_lj_cut_dipole_cut_kokkos`: + +- Use `TagPairXXXKernel` tags; override + `compute()` to launch the right instantiation with `Kokkos::parallel_for/reduce`. +- Accumulate torques atomically via a view with `Kokkos::MemoryTraits::value>`. +- Access ellipsoid bonus data (quaternions) via `avecKK->k_bonus.view()`, + where `avecKK` is an `AtomVecEllipsoidKokkos*` cast from + `atom->style_match("ellipsoid")`; convert with `MathExtraKokkos::quat_to_mat()`. +- Include `TORQUE_MASK | ELLIPSOID_MASK` in `datamask_read`, `TORQUE_MASK` in `datamask_modify`. +- Store the neighbor-list arrays explicitly (`d_neighbors`, `d_numneigh`, `d_ilist`) + instead of relying on the `pair_compute` helper. +- **Force sign convention:** the base CPU code accumulates `f[i][0] += delx * fpair` + with `fpair = F/r` and `delx = xj - xi`; the KOKKOS kernel must match exactly. For + `ylz` the force on `i` due to `j` is `-dU/dr * rhat` with `rhat` pointing from `i` to + `j`; the force on `j` is the Newton-3 partner `-force_on_i`. +- **Device math subtlety:** for exponents that are themselves functions of distance + (`lj/pirani`: `pow(rx, n(rx))`), `Kokkos::pow(base, exp)` is the device-portable form. + +## Lessons: per-atom data beyond x/v/f + +- **Molecule-id filtering** (`coul/shield` skips same-layer pairs): declare a per-atom + `molecule` view (`typename AT::t_tagint_1d_randomread`), assign it from + `atomKK->k_molecule.view()` in `compute()`, and test + `if (molecule(i) == molecule(j)) return 0;` in the kernel. (This view was the case + that motivated the AT-not-DAT rule.) +- **Per-atom radius with a global cutoff ceiling** (`lj/cut/sphere`): `cutsq` stores the + *maximum possible* squared cutoff per type pair (set in `init_one()`) so the neighbor + list is conservative; the kernel computes the actual cutoff `(sigma_ij + radius[i] + + radius[j])^2` on the fly and returns zero force beyond it. Same `typename AT::` rule. + +## Lessons: thin-wrapper styles + +A global-coefficient variant (`coul/cut/global`) needs no kernels of its own: subclass +the ported parent (`PairCoulCutGlobalKokkos : PairCoulCutKokkos`), +override only `coeff()` (argument-count enforcement) and `extract()`, and point the +`PairStyle` macro entries at the new class; the parent handles all kernel logic. + +## Lessons: wall styles (FixWall subclasses) + +All `FixWall` subclasses share the generic `FixWall::post_force` loop. The KOKKOS port +(`fix_wall_lj93_kokkos` is the template) replaces that loop with a Kokkos functor; each +subclass then needs only `precompute(int)` (per-wall coefficients) and `wall_particle(int +m, int which, double coord)` (single-atom force/energy at a given wall distance). + +- **`private:` must become `protected:`** for the base coefficient arrays (`coeff1[]`, + ..., `offset[]`) that the KK `precompute()` reads. +- **No coefficients, no DualViews:** `wall/harmonic` computes `dr = cutoff - delta` + inline, so its `precompute()` is empty; the small fixed base arrays (`epsilon[]`, + `cutoff[]`, 6 elements) are read as scalar casts in the functor. Only `k_vatom` keeps + the DualView pattern. +- **`powint()` replacement** (`wall/lj1043`): store the needed coefficient array in its + own DualView and expand integer powers by hand in the functor: + + ```cpp + KK_FLOAT dc4inv = 1.0 / (delta + d_coeff4(m)); + KK_FLOAT dc4inv3 = dc4inv * dc4inv * dc4inv; // replaces powint(..., -3) + KK_FLOAT dc4inv4 = dc4inv3 * dc4inv; // replaces powint(..., -4) + ``` + +- `exp()` becomes `Kokkos::exp()` (`wall/morse`); copy the protected base parameters + (`alpha[]`, `sigma[]`, `epsilon[]`) into DualViews in `precompute`. +- The KK `post_force` override only (1) reallocates `k_vatom` if `vflag_atom`, (2) calls + the base `post_force(vflag)` -- which virtual-dispatches into the KK `wall_particle` + -- and (3) syncs `k_vatom` back to host. Virial accumulation in `wall_particle` uses + the `result[7..12]` reduction slots, flushed to `virial[0..5]` after `parallel_reduce`. + +## Lessons: integrator hierarchies (the NH-sphere pattern) + +- **Inherit from the KOKKOS mid-class, not the CPU mid-class.** The instinct is + `FixNHSphereKokkos : FixNHSphere` (as the wall styles do), but `FixNHSphere::nve_v()` + calls the CPU `FixNH::nve_v()` internally, losing all Kokkos parallelism. Correct: + `FixNHSphereKokkos : FixNHKokkos` (brings in the device + `nve_v`, `nve_x`, `nh_v_temp`, `nh_v_press`); override just the sphere-specific + methods to call the base version then launch the omega-update kernel, and duplicate + the `FixNHSphere` constructor logic (omega/radius checks, `inertia`, `disc`). +- **Name collisions:** `FixNH` has `protected: double omega[6]` (barostat DOFs); name + the per-atom angular-velocity view `omega_kk`. +- **Base views stay valid across the virtual-call chain:** after `FixNHKokkos::nve_v()` + returns, `this->mask` / `this->rmass` still hold the current device views (reference- + counted handles); the omega kernel reuses them, syncing only OMEGA/TORQUE/RADIUS masks. +- **Thin wrappers must create the kk helper:** `nvt/sphere/kk` and siblings create + `temp/sphere/kk` -- not `temp/sphere` (correct but forces a host sync every thermostat + step) and not `temp/kk` (wrong temperature: ignores angular velocity). +- **DLM dipole integrator unsupported on device** (matrix-product chain, rarely used): + support only `dlm_flag == 0` and raise an error for `update dipole dlm`. +- `compute temp/sphere`: sphere particles always provide `rmass`, so the `RMASS` + template parameter of `compute temp` is unnecessary -- use a `MODE` parameter + (ROTATE-only vs ALL) instead. `dof_compute()` and `init()` stay CPU-side (infrequent). + +## Lessons: temperature-compute port pattern + +Template for porting any `compute temp/*` (mirrors `compute_temp_kokkos`): a +`parallel_reduce` into the 6-component `s_CTEMP` struct, templated on `RMASS`, the +style's flags folded into the per-atom terms. +- **A biased temperature (`tempbias = 1`) MUST implement the device bias methods.** + `Compute::remove_bias_all_kk()` / `restore_bias_all_kk()` are empty stubs in the base; + with `kokkosable = 1` and no override, a KK thermostat silently skips bias removal -- + wrong results, no error. Implement both as device kernels, plus host-facing + `remove_bias_all` / `restore_bias_all` that call the `_kk` version then + `atomKK->sync(Host, V_MASK)`, and override `reapply_bias_all` (used by `velocity ... + bias yes`) when the CPU base overrides it. Pattern: `compute_temp_deform_kokkos`. +- Store the bias in a device view (`typename AT::t_kkfloat_1d_3 vbiasall`, shadowing the + base `double **` member, which stays null); `maxbias = 0` in the ctor, regrow when + `atom->nmax > maxbias`. +- The base destructor needs `if (copymode) return;` -- the compute is copied as a Kokkos + functor and the copy's destruction chains into the base destructor. +- `dof_compute()` stays on the host (cheap, infrequent). + +Binned/profile temperatures (per-bin streaming velocity subtraction) additionally: + +- Flip the base `private:` members the KK class needs to `protected:`. +- Keep the per-bin reduction's MPI round-trip ON THE HOST, by design: a scatter kernel + does `atomic_add` into a device accumulator, copy out to the base array, run the + *identical* host `MPI_Allreduce` + divide, and copy the averages back to a device + view. The host reduce is what keeps CPU/KK bit-identical; the bin count is small, so + the round-trip is cheap, once per `compute_scalar`. +- Assign per-atom bins on device for orthogonal boxes; fall back to the host + `bin_assign()` (needs lambda-space coordinates) for triclinic. Diagnostic outputs + (`compute_array`) may sync to host and delegate to the base. + +Validation: run a thermostatted MD driven by the compute and require bit-identical CPU +vs `-sf kk` trajectories (exercises the scalar, bias remove/restore, and vector paths). + +## Lessons: per-atom-output computes + +Template for a per-atom vector-output compute whose result comes purely from per-atom +data (`ke/atom`; pattern: `compute_coord_atom_kokkos`): + +- Keep the base `double *` output pointer (make the base member `protected`) and add + `DAT::ttransform_kkfloat_1d k_` plus `typename AT::t_kkfloat_1d d_`; the + `ttransform_` view auto-converts host double <-> device `KK_FLOAT`, so it also works + in single/mixed-precision builds. Grow with `memoryKK->destroy_kokkos/create_kokkos + (k_, , nmax, ...)`; set `vector_atom` (or `array_atom`). +- After the kernel: `k_.modify(); k_.sync_host();` so host + consumers (dumps, `compute reduce`, ...) see current data. `copymode` guards in both + destructors; `destroy_kokkos` nulls the pointer, making the base `memory->destroy` a + safe no-op. Scalars the kernel needs (e.g. `mvv2e`) are plain members set in + `compute_peratom()`. + +## Lessons: barostat-fix port pattern + +`press/berendsen/kk` is the cleanest template for a "global scalar on host, per-atom +work on device" barostat/thermostat fix: + +- **The internal `temp` compute is auto-promoted to `temp/kk` by the suffix machinery** + (`Modify::add_compute` defaults to `trysuffix = 1`), so under `-sf kk` the KK fix does + not recreate it. The fake port's one real flaw was NOT ensuring a kk temperature (a + non-kk `temp` reads `atom->v` on the host every `end_of_step`); the explicit-suffix + hole without `-sf kk` is closed by the A+C mitigation in the instructions file. +- **`compute pressure` stays non-kk and that is correct** (see the do-NOT-port list in + the backlog: `EMPTY_MASK`, no per-atom data). +- **`remap()` becomes device-resident for free via virtual dispatch:** `domain` is a + `DomainKokkos` instance under the KOKKOS package, so the base `domain->x2lamda(nlocal)` + / `lamda2x(nlocal)` already run on device (each syncs `X` itself). Override `remap()` + only to swap the `dilate partial` host loop for the device group variant + `x2lamda(nlocal, groupbit)`; make the base `remap()` virtual (a one-line base change). +- **`end_of_step()` mirrors the base but guards the temperature call:** + `if (temperature->kokkosable) temperature->compute_scalar();` else the explicit + sync/modified dance (handles `fix_modify temp` with a non-kk compute). When the fix + owns no per-atom kernel, `datamask_read = datamask_modify = EMPTY_MASK`, no destructor. + +`press/langevin/kk` adds the stochastic-piston and triclinic-flip variations: + +- **No temperature compute at all:** the Gronbech-Jensen/Farago barostat uses `NkT/V` + for the kinetic pressure term and creates its pressure compute as `pressure NULL + virial`. Do NOT add `F_MASK` to `datamask_read`; the fix reads no per-atom forces. +- **The 6 piston DOFs and random forces stay on the host** (at most 6 Gaussians on rank + 0 + `MPI_Bcast`); `initial_integrate`, `post_force`, and `end_of_step` touch only + scalars plus the global pressure tensor and are NOT overridden -- only `remap()` and + `pre_exchange()` are. +- **Copy the triclinic tilt logic verbatim from the base** (including its + `p_flag[3]->xy` / `[5]->yz` index mapping) so CPU and KK stay identical -- do not + "fix" base-class quirks inside a port. +- **`pre_exchange()` (box flips) mirrors `fix_nh_kokkos`:** `domainKK->image_flip()` + + `remap_all()` + `x2lamda()` on device, `atomKK->sync(Host, ALL_MASK)` only around the + intrinsically host-side `irregular->migrate_atoms()`, then `lamda2x()`. Register the + hook in `setmask()` only when tilt flips can occur; it fires rarely. Cache `domainKK` + in the constructor. + +## Lessons: random numbers on device + +Device RNG uses `Kokkos::Random_XorShift64_Pool`, with `RandPoolWrap` / +`RandWrap` (`src/KOKKOS/rand_pool_wrap_kokkos.h`, wraps `RanMars` in the pool API) as a +deterministic debug substitute under `#ifndef LMP_KOKKOS_DEBUG_RNG` / `#else` guards +(mirror `gjf`'s constructor/destructor guards): + +```cpp +rand_type rand_gen = rand_pool.get_state(); +KK_FLOAT r = rand_gen.normal(); // Gaussian deviate +rand_pool.free_state(rand_gen); +``` + +Choose the strategy by how many draws are needed: + +- **A single global factor -> host RNG, bit-identical** (`temp/csvr`): draw the rescale + factor on rank 0 with the base-class code (`resamplekin`, a few `RanMars` calls), + `MPI_Bcast`, then apply `v *= lamda` in a device kernel. CPU vs `-sf kk` stays + bit-for-bit; BIAS works via the device bias methods. No device pool needed. +- **Per-atom draws -> device pool, statistical validation only** (`temp/csld`, `gjf`): + each atom draws Gaussians on device; the trajectory cannot match the CPU RNG stream, + so validate that the temperature converges to the target instead. Gotchas: if the base + constructor consumed the seed into a local variable, re-parse it in the KK + member-initializer list (`utils::inumeric(FLERR, arg[N], false, lmp) + comm->me`). A + per-step scratch view (csld's `vhold`) needs no `KokkosBase`/`pack_exchange`; per-atom + state that migrates with atoms (gjf's half-step velocity `lv`) does. +- **Bias paths that mix saved and fresh velocities** may not map onto + `remove_bias_all_kk` over `atom->v`; if so, `error->all` on the BIAS option rather + than silently computing the wrong thing (csld errors out; csvr supports BIAS). + +## Lessons: per-atom virial/energy aggregation needs framework work first + +`compute stress/atom`, `pe/atom`, and `centroid/stress/atom` are NOT clean full ports and +were deliberately left unported: + +- They sum per-atom `vatom`/`eatom` from all seven force-style hierarchies, whose base + classes expose only host `double **`; the device dual views (`k_vatom`/`d_vatom`) live + inside each KOKKOS subclass with no uniform accessor. +- They reverse-comm the per-atom result (ghost to owner); no KOKKOS compute does device + reverse-comm today (needs `KokkosBase` + `pack/unpack_reverse_comm_kokkos` + + `CommKokkos` support). +- Payoff is marginal anyway: KOKKOS force styles call `k_vatom.sync_host()` + unconditionally when per-atom virial is requested, so the data reaches the host every + step regardless. + +If revisited, do the framework work first (uniform device per-atom-virial accessor, +device compute reverse-comm, lazy `vatom` host-sync); do NOT ship a host-aggregation +wrapper (a fake port). + +## Known limitation: 48 KB team-scratch cap (pair pace/kk) + +`pace/kk` and `pace/extrapolation/kk` abort on GPU at high coordination numbers. The +ComputeNeigh kernel requests team scratch of +`team_size (32 on GPU) * maxneigh * sizeof(int)`; Kokkos caps level-0 team scratch at +`sharedMemPerBlock` -- the 48 KB default on every NVIDIA architecture (Kokkos never opts +into the larger per-block dynamic shared memory), so the ceiling (roughly maxneigh 381) +is architecture-independent: a newer NVIDIA GPU does not help. HIP checks the 64 KB LDS +on RDNA (roughly maxneigh 509), so AMD tolerates somewhat more. Symptoms: CUDA +"Requested too much scratch memory on level 0"; HIP "could not find a valid team size". +Unsolved; tracked as issue #5063. Gotchas that defeated two fix attempts: + +- `TeamPolicy::team_size_max()` THROWS "could not find a valid team size" instead of + returning 0 when nothing fits -- you cannot defensively probe an over-budget PerTeam + policy; the first probe aborts. +- `TeamPolicy::scratch_size_max(0)` does not subtract the kernel's own static shared + memory, so shrinking team_size to that byte budget still overshoots. +- Candidate designs: request scratch as `PerThread(maxneigh*sizeof(int))` (one thread + always fits, so team_size_max cannot throw), or drop the shared `inside[]` cache for + a global `natoms x maxneigh` View, removing the team-size coupling entirely. + +Separate GPU restriction (do not conflate with the scratch cap): the `recursive` +evaluator keyword has no device port -- `pair pace/kk` on the GPU requires the `product` +keyword (a controlled `error->all`, independent of maxneigh). + +## Debugging GPU-only test failures + +Unit-test failures that appear only on a HIP/CUDA build (host backend != device backend) +but pass on Serial/OpenMP-only builds are almost always device/host data-movement bugs, +not physics; the kk math usually matches the CPU base byte-for-byte. Method: reproduce +standalone with CPU `lmp` (no suffix) vs `lmp -k on g 1 -sf kk`, dump `id x y z fx fy fz` +with `dump_modify ... sort id format float %20.12g`, and trace per step (`dump every 1` +over a short run). A step-0 match with growth over steps localizes the bug to the run +loop / integrator data movement. Mirror the force-style test driver exactly: it does +`init_lammps` (`run 0`) THEN `run_lammps` (`fix nve; run 4`), and uses `pair_modify +compute no` + `boundary p p f` (slab) to isolate kspace -- a single run or one-shot will +not reproduce a two-run state bug. + +Three GPU-only data-movement bug classes seen (and fixed) in this codebase: + +- A `/kk/host` variant calling `commKK->forward_comm_device(...)` directly: + the `LMPHostType` instantiation becomes an undefined symbol in `liblammps.so` (breaks + dlopen for Python/plugins). Fix: explicit host instantiation in `comm_kokkos.cpp` + under `#ifdef LMP_KOKKOS_GPU`. +- A device-execution-space fix whose host-delegating callbacks do + `atomKK->modified(Host, mask)` collides with ModifyKokkos's outer + `modified(Device, mask)`: DualView "concurrent modification" abort. Fix: reconcile + with `atomKK->sync(execution_space, mask)` after each host modify. +- VerletKokkos's GPU-aware overlap force merge zeroed the host force buffer only when + `pair_compute_flag` was set; with `pair_modify compute no` + host bonded styles + + device kspace, stale host force was re-added every step (linear force blow-up). Fix: + zero it unless the pair style itself runs on host. + +Harness tips: `TEST_ARGS=-v` is the first move on any silent-abort or "Only one stdout +capturer can exist at a time" failure -- the drivers echo each captured section as it +completes, so the last echoed line pinpoints where the throw escaped. A style with no +`/kk` variant that cannot run under VerletKokkos needs `skip_tests: kokkos_gpu` in YAML. + +## KOKKOS test build + +```bash +cmake -S cmake -B build -C cmake/presets/gcc.cmake -C cmake/presets/most.cmake \ + -D PKG_KOKKOS=on -D Kokkos_ENABLE_OPENMP=on \ + -D DOWNLOAD_POTENTIALS=off -D ENABLE_TESTING=on -G Ninja +cmake --build build -j 4 +cd build && ctest -V -R pair +``` diff --git a/.github/dev-docs/respa-integration.md b/.github/dev-docs/respa-integration.md new file mode 100644 index 00000000000..7e750870106 --- /dev/null +++ b/.github/dev-docs/respa-integration.md @@ -0,0 +1,61 @@ +# rRESPA Integration in Constraint/Force Fixes + +Constraint fixes (`shake`, `rattle`, `ilves`) and forcing fixes that participate in +the inner-force update must support `run_style respa`. The pattern is the same in all +of them; `fix_shake.cpp` is the canonical reference. Steps to add respa support: + +## Header changes + +- Forward-declare `class FixRespa;`. +- Add `void post_force_respa(int, int, int) override;` (and any other per-level hooks). +- Add private state: `int respa; int nlevels_respa; int *loop_respa; double *step_respa; + class FixRespa *fix_respa; double dtf_inner;`. + +## Source changes + +- `#include "fix_respa.h"` and `#include "respa.h"`. +- Initialize the new members (especially `respa = 0`, `fix_respa = nullptr`) in the + constructor. +- Add `mask |= POST_FORCE_RESPA;` in `setmask()`. +- In `init()`, detect respa with `utils::strmatch(update->integrate_style, "^respa")`; + cache `Respa*` (for `nlevels`, `loop[]`, `step[]`) and `FixRespa*` + (`modify->get_fix_by_style("^RESPA")` for `f_level[i][jlevel]`). +- In `setup()`, branch on `respa`: use `dtv = step_respa[0]`, set + `dtf_inner = 0.5 * step_respa[0] * force->ftm2v` for the one-shot constraint + projection, loop over levels calling `respa_ptr->copy_flevel_f(ilevel)`, your + `post_force_respa(vflag, ilevel, loop_respa[ilevel]-1)`, then + `respa_ptr->copy_f_flevel(ilevel)`. Restore + `dtf_inner = step_respa[0] * force->ftm2v` for normal stepping. +- In `reset_dt()`, branch on `integrate_style` so the inner-timestep variables stay + consistent on a `timestep` reset. +- In your `unconstrained_update_respa(ilevel)`, set + `dtfsq = dtf_inner * step_respa[ilevel]` and fold the inner-level contributions: + `xshake = x + dtv*v + dtfsq/m*f + sum_{jf_level[i][j]`. + +## Friend access to FixRespa::f_level + +That array is `private` in `src/fix_respa.h`. To read it from a new fix, add +`friend class FixYours;` alongside the existing `friend class FixShake;` / +`friend class FixRattle;` / `friend class FixIlves;` lines. + +## Virial accumulation across respa levels (subtle, important) + +Do NOT call `ev_init()` in `post_force_respa` -- it zeros the per-atom virial, +destroying the contribution accumulated at previously visited levels. The correct +sequence (mirroring `FixShake::post_force_respa`): + +1. Call `v_init(vflag)` *once*, at the innermost level on its final loop iteration. +2. Set `evflag = 1` only on each level's final loop iteration + (`iloop == loop_respa[ilevel]-1`); set `evflag = 0` otherwise so intermediate + iterations do not accumulate virial. + +The framework relies on this exact discipline; getting it wrong shows up as stress +mismatches of order unity against the reference YAML even though forces and energies +match. + +## Testing + +The `unittest/force-styles/test_fix_timestep.cpp` driver exercises both verlet and +respa code paths for every YAML reference (respa with a `100 * epsilon` tolerance +multiplier); see `.github/instructions/force-style-tests.instructions.md`. diff --git a/.github/dev-docs/style-implementation-notes.md b/.github/dev-docs/style-implementation-notes.md new file mode 100644 index 00000000000..de76a6ef51f --- /dev/null +++ b/.github/dev-docs/style-implementation-notes.md @@ -0,0 +1,103 @@ +# Style Implementation Notes (MPI, restart, buffers, parsing) + +Hard-won implementation lessons for writing and modifying LAMMPS styles. Read this +before writing a new pair/bond/fix/compute style or debugging parallel/restart +misbehavior in one. + +## MPI parallelism patterns + +**`newton on` vs `newton off` for bond/angle topology.** Under `newton on` (default), +each bond/angle is stored at only one of its participating atoms (typically the one +with the lowest local index). That means a rank may see only *part* of a cluster +whose atoms span multiple ranks -- the other half of the cluster may live entirely in +topology arrays on other ranks. Under `newton off`, every bond is stored at both +endpoints, so each rank sees all bonds touching its local atoms, but each bond must be +processed exactly once to avoid double counting. + +**Per-atom accumulators in bond styles: reverse_comm is a newton-ON construct.** +For a bond (or angle/dihedral) style that builds per-atom accumulators by summing over +its topology: under `newton bond off`, a boundary-straddling bond appears in BOTH +ranks' bond lists and is computed twice, each rank handling its own local endpoint -- +so each local atom's accumulator completes locally under an `if (i < nlocal)` guard +and needs only `forward_comm` to publish the finalized value to ghosts. No +`reverse_comm`. Folding ghost partial sums onto owners via `reverse_comm` is needed +only under `newton bond on` (canonical example: `BondBPMZero::calculate_manybody` +guards `comm->reverse_comm(this)` with `if (newton_bond)` but always calls +`comm->forward_comm(this)`). + +**Determinism across rank counts.** LAMMPS trajectories are deterministic across MPI +rank counts (modulo ~1e-12 summation-order roundoff). A large, immediate 1-vs-N +divergence almost always means decomposition-dependent random numbers in the setup +(`velocity create` without `loop geom`, `create_atoms ... random`, stochastic fixes), +NOT a force/communication bug. Reproduce from an identical start (data/restart file, +or `velocity create ... loop geom`) before suspecting the style's forward/reverse comm. + +**Warnings print on all ranks.** `error->warning()` writes to `lmp->screen`, which +defaults to stdout on EVERY rank; only the `log.lammps` file is rank-0-only. Do not +"fix" per-rank warnings on the assumption they are suppressed -- guard with +`comm->me == 0` only when a single message is actually wanted. + +## Restart and atom-migration mechanics in fixes + +**`restart_peratom` and the `Atom::RESTART` callback are independent; gate BOTH.** +`atom->add_callback(Atom::RESTART)` registers the fix in `atom->extra_restart[]`, +whose entries are packed UNCONDITIONALLY on `write_restart` -- the callback, not the +flag, drives writing. `restart_peratom` only feeds the read-back matching list used +to re-attach saved data. A fix that must write no per-atom restart data has to leave +`restart_peratom = 0` AND skip the callback (plus the matching `delete_callback` in +the destructor); registering the callback with `restart_peratom = 0` writes data the +reader cannot re-assign -> silently corrupt restarts (read fails with err0016). + +**A fix packing per-atom exchange data must set `maxexchange`.** The migration buffer +slack is `sum(fix->maxexchange) + BUFEXTRA` (1024 doubles); anything packed in +`pack_exchange()` beyond the declared `maxexchange` rides on that fixed cushion and +overflows the heap once a fix packs more than ~1024 doubles/atom. Fixed upper bound +-> set `maxexchange` in the constructor; runtime-growing size -> set +`maxexchange_dynamic = 1` and update `maxexchange` as it grows (canonical example: +`fix_neigh_history` with `maxpartner`). + +## Argument parsing and validity guards + +**`ArgInfo` parses `[i][j]` only for prefixed references** (`c_ f_ v_ d_ i_ c2_ d2_`). +A bare keyword like `history[1][2]` falls through with `dim = 0` and unparsed indices. +For bare-keyword brackets: `ValueTokenizer(arg, "[]")` (consecutive separators +collapse), then convert with `utils::inumeric(FLERR, tok, false, lmp)` -- NOT +`next_int()`, which throws a non-LAMMPS exception (uncaught abort) on overflow. Note +`utils::strmatch` supports `^ $ . * + ? [] ranges \s \S \w \W \d \D \i \f` and literal +`\[ \]`, but NOT groups `(...)`, branches `a|b`, or inverted classes `[^...]`. + +**Periodic-output computes must self-guard timestep validity (err0007).** A `Fix` +advertises `peratom_freq`/`global_freq` and consumers validate at init; a `Compute` +has no freq member, so a compute whose output is only valid on certain steps must +check `update->ntimestep` inside its compute method and +`error->all(..., utils::errorurl(7))` (precedent: `compute_chunk_atom.cpp`). The only +no-error alternative is the always-available pattern (recompute on demand). + +**Box/ntypes-dependent guards belong in `settings()`, not the constructor.** The pair +constructor runs on BOTH the `pair_style` command path and the `read_restart` path; +only the former calls `settings()` afterward. A `domain->box_exist` check (or any +`atom->ntypes`-derived sizing) in the constructor spuriously trips or under-allocates +during restarts and under `hybrid/overlay` (where the constructor commonly runs before +`create_box`, so `ntypes == 0` -> under-sized `map`, zero comm sizes, heap corruption). +Convention: fixed `comm_forward`/`comm_reverse` constants in the constructor; ntypes- +dependent checks and sizing in `settings()`/`coeff()`. + +## Small conventions + +- `src/pointers.h` includes and re-exports ``, ``, ``, and + ``; virtually every class derives from `Pointers`, so do not add redundant + includes for these -- only for headers it does not export (``, ``, + ``, ...). +- The `Memory` class does NO usage accounting; per-style `memory_usage()` is a rough + estimate covering large (per-atom) allocations only. Using `new[]` instead of + `memory->create()` for small arrays does not "lose accounting" -- there is none. + +## Recorded performance decisions + +- **`fix ilves/omp` (per-cluster OpenMP threading) was implemented, benchmarked, and + rejected twice** (2026): the constraint solver is only ~6% of step time even in the + all-bonds best case, per-cluster work is too fine-grained for OpenMP dispatch + overhead, and the net effect was a slowdown. Do not re-propose it (same reasoning + applies to SHAKE/RATTLE-style per-cluster threading). Promising directions instead: + single-rank cluster ownership in MPI mode; intra-cluster threading of the band + Cholesky for the one-giant-cluster case -- benchmark first. diff --git a/.github/dev-docs/testing-and-verification.md b/.github/dev-docs/testing-and-verification.md new file mode 100644 index 00000000000..56548167ad7 --- /dev/null +++ b/.github/dev-docs/testing-and-verification.md @@ -0,0 +1,74 @@ +# Testing and Verification Methodology + +How to validate LAMMPS changes beyond the standard unit/regression suites: choosing +the right gate for refactors vs re-implementations, force verification, benchmark +construction, and memory-checking conventions. + +## Choose the right correctness gate + +**Behavior-preserving refactor -> bit-identical gate.** When restructuring code that +must not change behavior (style consolidation, template refactors), gate on +byte-identical thermo output: small decks per style x {serial, 4 ranks} x {newton +on/off} x accelerator suffixes, thermo every step for ~50 steps; extract the thermo +table (`awk '/^ Step/{f=1} /^Loop time/{f=0} f'`) and `cmp` against a baseline built +from the pre-change commit. Gotchas: + +- Keep floating-point summation ORDER identical: when caching in-place accumulation in + a local, seed the local with the current array value (`fxtmp = f[i][0]; ...; + f[i][0] = fxtmp;`) -- zero-seeding plus `+=` at the end regroups the summation and + changes ulps whenever the array is pre-accumulated (hybrid sub-styles). + Template-int parameters (`if (FLAG)` on `template `) fold at compile time + and stay bit-identical. +- WARNING lines can land inside the thermo table and embed FLERR line numbers that + shift with the source; strip them before comparing. +- `-sf X` silently falls back to the base style when no `/X` variant exists; once a + port adds the variant, those runs legitimately change -- exclude them from the + byte-compare and validate numerically instead. +- GPU mixed precision: expect ~1e-5 relative deviation vs CPU; compare against an + established style's gpu-vs-cpu deviation as the reference scale. +- A test program that segfaults AFTER `[ PASSED ]` is destroying globals in undefined + order at exit (for Kokkos: `lammps_kokkos_finalize()` never called). + +**Re-implementation with an analytic spec -> gate on the spec.** When new code has an +independent closed-form oracle (analytic model results), the specification is the +pass/fail gate; a bit-comparison against the legacy implementation is only a +diagnostic to localize behavior changes. A new-vs-legacy discrepancy where the new +code matches the closed form is a legacy bug to report, not a regression -- do not +tune to hide it. Add a permanent regression test for every bug found. + +## Force verification with fix numdiff + +To check that forces equal -grad(E), use `fix ID all numdiff Nevery delta` +(EXTRA-FIX): it finite-differences the per-atom PE into `f_ID[1..3]` while saving and +restoring the analytic forces. Needs `atom_modify map array` (granular/atomic styles +have no map by default). Idiom: `variable ferr atom sqrt((f_nd[1]-fx)^2+...)` + +`compute maxerr all reduce max v_ferr`, `run 0`. A conservative force gives err +~1e-7 (delta^2); a non-conservative one is orders of magnitude larger. Always include +the stock style as a positive control in the same geometry and an equilibrium +configuration as a negative control. + +**Equilibrium configurations hide cutoff-coordination bugs.** In cutoff-coordination +many-body potentials (AIREBO/REBO family), the coordination force is proportional to +the cutoff-function derivative, which is zero unless a neighbor distance falls inside +the transition region (rcmin..rcmax). At equilibrium, bonds sit inside rcmin and +non-bonds beyond rcmax, so such bugs are invisible. Expose them by straining the +system (`change_box all z scale 1.2 remap`) or using fractional-coordination clusters. + +## Benchmark construction + +Grow a benchmark from a small example by inserting a `replicate Nx Ny Nz` command +rather than hand-building geometry. Watch for vacuum regions: replication tiles the +vacuum too, giving some MPI ranks little work. Use the `processors` keyword to align +the decomposition with the material and/or a `balance` command -- or better, prefer a +solid periodic block with no vacuum for clean performance comparisons. + +## Valgrind suppressions + +Suppressions live in `tools/valgrind/*.supp` (globbed and concatenated into the build +directory at CMake configure time). Author them GENERICALLY: anchor each on one +stable high-level frame (e.g. `fun:PMPI_Init`) and wildcard the rest with `...` -- +narrow stacks break on the next MPICH/libfabric/Python update. A suppression block +needs at least one concrete `fun:`/`obj:` frame (an all-`...` stack is a fatal syntax +error). Validate against an existing binary with `valgrind --suppressions=...` and +confirm the finding moves into the "suppressed" count; the small masking risk is an +accepted trade-off. diff --git a/.github/instructions/documentation.instructions.md b/.github/instructions/documentation.instructions.md new file mode 100644 index 00000000000..8890f8fff38 --- /dev/null +++ b/.github/instructions/documentation.instructions.md @@ -0,0 +1,71 @@ +--- +applyTo: "doc/**" +--- + +# LAMMPS Documentation Guidelines + +## Language and format + +- reStructuredText (`.rst`) in `doc/src/`; American English spelling; 7-bit ASCII only. +- Wrap code examples in `.. code-block::` with the appropriate language + (`LAMMPS`, `bash`, `c++`, `python`); use `.. note::` for important remarks and + `.. warning::` for critical warnings. +- Avoid computer-science jargon and ambiguous abbreviations in user-facing text; the + audience is researchers. Never abbreviate to "FP" (ambiguous between false positive, + file pointer, and floating-point) -- spell the term out. +- Always write "KOKKOS package" (all uppercase), never "Kokkos library" or "KOKKOS + library" -- even where the library is technically meant. Single exception: the build + documentation (`Build_extras` KOKKOS section) that explicitly discusses the bundled, + downloaded, or external Kokkos *library*. + +## versionadded / versionchanged policy + +- New publicly visible commands, styles, and added keywords require + `.. versionadded:: TBD`; changed behavior of existing commands/keywords requires + `.. versionchanged:: TBD`. `TBD` is replaced with the release version string during + release preparation. +- Place the directive in front of the paragraphs documenting the new or changed + functionality, or following the "Description" headline for completely new commands. +- The directives are standalone markers with an EMPTY body: explanatory prose goes in + the *following* normal paragraph at column 0, NOT indented under the directive. + Do not "fix" existing directives by indenting the following paragraph. +- This does NOT apply to internal styles (upper-case style names, which need no + documentation) or to merely adding an accelerated variant of an existing style. + For accelerator variants, add the code letter (`g`/`i`/`k`/`o`/`t`) to the + respective `Commands_.rst` page instead -- in alphabetical order with no + commas (`ko`, not `o,k`) -- and add the `/suffix` index entry plus an + `Accelerator Variants:` line to the per-style `.rst` page. +- Restrictions and accelerator-variant notes belong in the per-style `.rst` file. + +## Building and validating + +```bash +cd doc +make html # must complete without sphinx/docutils warnings or bad references +make pdf # requires pdflatex; must also complete cleanly +make spelling # must report no issues +make anchor_check # duplicate anchors +make style_check # style lists complete +make check # anchor/style/package/char/role checks in one target +``` + +- Spelling exceptions (author surnames, acronyms, code fragments) go into + `doc/utils/sphinx-config/false_positives.txt` (note: underscores in the file name). +- `make spelling` resolves the word list relative to the SOURCE dir by first copying + `false_positives.txt` into `doc/src/`. A bare `sphinx-build -b spelling` without + that copy uses NO word list and flags everything -- always go through the Makefile. +- The doc build runs sphinx with parallel reading (`-j`); the spelling target keeps a + dedicated `doctrees-spelling` cache directory. If sphinx claims "configuration has + changed" on every run, suspect a config value mutated at `builder-inited` time + (handled in `conf.py.in`; keep new config values immutable). + +## Figures and diagrams + +- Editable SVG sources for generated figures live in `doc/src/SVG/`; they rasterize to + `doc/src/JPG/*.png`. The re-render command is recorded in each SVG's header comment + (Inkscape with `--export-area-drawing` and transparent background). +- Inkscape does not support the `feDropShadow` filter shorthand -- build drop shadows + from primitives (`feGaussianBlur` + `feOffset` + `feFlood` + `feComposite` + + `feMerge`), and avoid `--` inside XML comments. +- Verify figures are ASCII-clean (`grep -P '[^\x00-\x7F]'`) and well-formed + (`xmllint --noout`) before committing. diff --git a/.github/instructions/force-style-tests.instructions.md b/.github/instructions/force-style-tests.instructions.md new file mode 100644 index 00000000000..12a4fbb8500 --- /dev/null +++ b/.github/instructions/force-style-tests.instructions.md @@ -0,0 +1,43 @@ +--- +applyTo: "unittest/**" +--- + +# LAMMPS Unit-Test Conventions (force-style YAML tests and friends) + +Unit tests are CTest-based; build with `-D ENABLE_TESTING=on`, run with +`cd build && ctest -V [-R ]`. Tests are organized by category under +`unittest/` (`force-styles/`, `commands/`, `formats/`, `c-library/`, `fortran/`, +`python/`, `utils/`, `granular/` -- the latter has its own instructions file). + +## YAML-driven force-style tests (`unittest/force-styles/`) + +- Each test driver (`test_pair_style`, `test_bond_style`, `test_angle_style`, + `test_fix_timestep`, ...) loads a `.yaml` reference file and compares thermo, + forces, energies, and stresses against it with `epsilon`-scaled tolerances. +- The drivers automatically exercise EVERY accelerator-suffix variant of a style + (`/omp`, `/intel`, `/gpu`, `/kk`) that is compiled into the test executable, from + the single base-style YAML reference. Adding an accelerated variant needs NO new + YAML file -- just run the existing reference with that package enabled. +- Regenerate or update reference data with the driver's command-line flags + (`-g ` generate, `-u` update in place, `-s` print per-quantity error + statistics for tuning `epsilon`). Prefer `-u` so the file history stays clean. + +## rRESPA coverage in fix tests + +- `test_fix_timestep` exercises BOTH the verlet and respa code paths for every YAML + reference; the respa path automatically applies a `100 * epsilon` tolerance + multiplier. +- If a fix genuinely cannot support `run_style respa`, add it to the exclusion regex + in `test_fix_timestep.cpp` -- but the strongly preferred fix is to make the fix + respa-compatible; see `.github/dev-docs/respa-integration.md` for the standard + pattern (including the subtle virial-accumulation discipline). +- Respa-related stress mismatches of order unity against the reference YAML, with + matching forces and energies, almost always mean `ev_init()` was called in + `post_force_respa()` (it must not be; see the respa guide). + +## Adding tests for new styles + +- Copy the YAML of a closely related style, adjust the input setup, regenerate the + reference data with `-g`/`-u`, then re-run CMake so new files register with CTest. +- Verify new force styles against numerical differentiation (`fix numdiff`) where + possible; see `.github/dev-docs/testing-and-verification.md`. diff --git a/.github/instructions/granular-tests.instructions.md b/.github/instructions/granular-tests.instructions.md new file mode 100644 index 00000000000..aa7e1100a87 --- /dev/null +++ b/.github/instructions/granular-tests.instructions.md @@ -0,0 +1,86 @@ +--- +applyTo: "unittest/granular/**,src/GRANULAR/**" +--- + +# Granular / DEM Test Suite (`unittest/granular/`) + +YAML-driven regression + analytic tests for DEM/granular models. Eleven programs +`test_dem_01`..`test_dem_11` (43 tests): DEM-01..06 mirror the MFiX-DEM VVUQ cases; +DEM-07..11 add rolling resistance, cohesion (JKR/DMT pull-off), two-sphere and +spinning-sphere collisions, bulk angle-of-repose/rigid clumps, and elastic Hertzian +normal impact (benchmark sets from Mohajeri 2024, Saomoto 2023, and Chung & Ooi 2011). +Documented in `doc/src/Developer_unittest.rst` ("Tests for granular (DEM) models"). + +## Architecture + +All driver logic lives in `test_dem_common.cpp` (compiled into the `granular_tests` +library); each `test_dem_0N.cpp` holds only the `newton_on`/`newton_off` GoogleTest +fixtures. The whole system is built *from the YAML* (not a fixed input template): a +`variables` block becomes `${var}` index variables, `pre_commands` build the geometry, +`pair_style`/`pair_coeff` set the contact model, `post_commands` add fixes, and +`run_segments` advances the trajectory capturing per-atom `pos/vel/torque/omega/angmom` +after each segment. Closed-form checks are opt-in via `analytic_enable/_model/_tol/ +_segment` and implemented in `test_analytic_models.cpp`. The harness shares +`yaml_reader.h`, `yaml_writer.{h,cpp}`, and `error_stats.{h,cpp}` with +`unittest/force-styles/` via `../` includes; `test_config*` and `test_main*` are +granular-specific forks. For chaotic bulk tests (e.g. angle of repose) whose per-atom +trajectory is not bit-reproducible across newton on/off or platforms, set +`analytic_only: yes`: the generator records no per-atom blocks and only the analytic +observable is checked (DEM-10 pairs this with a short deterministic settling regression +plus a rigid-clump case so the bit-for-bit path stays covered). + +## Adding a YAML reference + +Copy a similar `dem0N-*.yaml`, edit variables/commands, then regenerate the reference +data **in place** with `TEST_ARGS=-u ctest -R DEM0N:variant` (or `test_dem_0N file.yaml +-u`). Re-run CMake so the new test registers; the driver `-s` flag prints per-quantity +error statistics for tuning `epsilon`. + +## Adding a test program + +Thin-copy `test_dem_0N.cpp` (only the suite name changes), add an `add_executable`/ +`register_dem_tests` pair to `CMakeLists.txt`, add `dem0N-*.yaml` files; if needed add +a named model to `test_analytic_models.cpp` (read params from `variables`, read masses +and radii from the live `atom` arrays, assert relative error with `EXPECT_LE`). + +## Gotchas / lessons + +- **Never regenerate to a `dem0N-*.yaml` sibling** (e.g. `-g new.yaml` in `tests/`): + the `CONFIGURE_DEPENDS` glob registers it as a phantom/stale test until the next + reconfigure. Use `-u` (in place); idempotent apart from the date line. +- Granular/atomic systems have **no atom map** by default -> the reference generator + iterates local atoms by `tag[i]`, never `atom->map(tag)` (segfaults). `EXPECT_*` + index by tag. +- Per-quantity flag guards (`torque_flag`/`omega_flag`/`angmom_flag`) auto-select + fields: spheres carry `omega` (no `angmom`); ellipsoid/superellipsoid carry `angmom` + (no `omega`). +- The libyaml reader accepts only scalar values (incl. block literals) -- all + multi-value fields are newline/space-split block scalars; per-atom blocks use + `segment tag x y z` rows. +- Analytic tolerances are loose (1e-3..5e-2): soft-sphere DEM only *approaches* the + hard-sphere/instantaneous-contact ideal. Use `coeff_restitution` when the analytic + model needs a known restitution `e`. Free-fall is exact (velocity-Verlet integrates + constant acceleration exactly, ~1e-15). +- Physics setup: start a particle resting on a wall at the gravity-equilibrium overlap + (`z0 = r - mg/kn`) so the normal force is steady at `mg` (DEM-04). The gross-sliding + oblique-impact closed form needs a grazing angle (`vx_in > (7/2)mu(1+e)vz_in`) + (DEM-05). The modular `pair_style granular` tangential `linear_history` needs + nonzero tangential damping or it rings undamped around the no-slip state; + `gran/hooke/history` (dampflag 1) settles on its own. +- The historic `fix wall/gran hooke/history` energy-injection-at-grazing bug is fixed + (develop commit `8285aa04b2`, `contact_radius_flag = 0` for the classic tangential + model in `gran_sub_mod_tangential.cpp`). Grazing/gross-sliding oblique tests run + cleanly to ~76 deg (DEM-05); the 76-deg `dem05-hookehistory-grazing` + `energy_dissipation` test locks the fix in. Do NOT reintroduce the old "keep + oblique tests <=45 deg" restriction. +- DEM-06 exercises the production fix `viscous/nonlinear` (Schiller-Naumann drag) in + `src/GRANULAR/`; it reduces to Stokes drag (`6 pi mu r v`) at low Reynolds number. +- DEM-10/11 setup: `fix pour` needs the insertion region wider than one diameter AND + `volfrac*vol/vol_one >= 1` (else "insertion count per timestep is 0"); a perfect + lattice is mechanically stable and won't form a repose angle, so a real heap needs a + seeded pour. Rigid clumps use `atom_style hybrid sphere molecular` + `fix + rigid/small molecule` and need `thermo_style custom step atoms` to dodge a spurious + negative-DOF temperature error. The Hertz peak-impact check (`hertz_normal_impact`) + asserts the convention-independent energy balance + `1/2 mu_red V^2 = 2/5 P_max alpha_max` (the 2/5 is the delta^1.5 signature); time a + `run_segments` boundary to land at peak compression (relative normal velocity ~0). diff --git a/.github/instructions/kokkos.instructions.md b/.github/instructions/kokkos.instructions.md new file mode 100644 index 00000000000..8778cfcc970 --- /dev/null +++ b/.github/instructions/kokkos.instructions.md @@ -0,0 +1,145 @@ +--- +applyTo: "src/KOKKOS/**" +--- + +# KOKKOS Package Rules (always-on) + +These rules apply to every change under `src/KOKKOS/` and are the canonical single copy: +review code against them directly. How-to templates and lessons live in the deep-dive docs +listed at the end; build and test commands live in `.github/copilot-instructions.md`. + +## Key rules + +1. **`if (copymode) return;` must be the FIRST line of every base-class destructor** that a + `_kokkos` style inherits from. A KOKKOS style object is copied by value for device + execution (`copymode = 1`); without the guard, the copy's destructor frees memory owned + by the original (double free / GPU crash). Check with + `grep -n copymode src//.cpp`. + +2. **Declare `virtual void allocate()` in the base-class header.** The KOKKOS subclass + overrides `allocate()` to replace plain arrays with dual views; without `virtual`, the + base version is silently called and the dual-view setup never happens (wrong results or + crashes). + +3. **Per-atom views assigned from `atomKK->k_.view()` must be declared + `typename AT::t_`, never `DAT::t_`.** `AT` is `ArrayTypes` and + adapts to the template parameter; `DAT` is hardcoded to `ArrayTypes`. + GPU builds instantiate the style for BOTH `LMPDeviceType` and `LMPHostType` (the + `kk/host` variant); a `DAT::` per-atom view then hits a Kokkos `ViewMapping` static + assertion at compile time. On CPU-only builds both types share one memory space, so the + bug is silent there and only surfaces when someone builds for GPU. `DAT::` is only safe + for dual views the style allocates itself and never assigns from `atomKK` (e.g. + `k_eatom`, `k_vatom`, `k_cutsq`, `k_cut_ljsq`, `k_cut_coulsq`). Audit with + `grep "DAT::" src/KOKKOS/

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 Zyjm29%k|eoz;Krc9oy~;7rhh+t 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�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