Skip to content

Fix pressure tensor sign and ordering conventions#5398

Merged
jngrad merged 11 commits into
espressomd:pythonfrom
Yashas17:fix_pressure_calculation
Jul 21, 2026
Merged

Fix pressure tensor sign and ordering conventions#5398
jngrad merged 11 commits into
espressomd:pythonfrom
Yashas17:fix_pressure_calculation

Conversation

@Yashas17

@Yashas17 Yashas17 commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Stacked on #5332 — the first 6 commits belong to that PR; only the last
4 commits (f7bb15b, cbb8799, 4f98fdb, c0851d2) are new here.

Description of changes:

  • Fix sign of DPD pressure
  • Replace DPD stress observable with DPD pressure for consistency
  • Fix incorrect pressure tensor ordering (F.d^T to d.F^T)

Yashas17 and others added 11 commits July 9, 2026 15:08
Co-authored-by: Jean-Noël Grad <jgrad@icp.uni-stuttgart.de>
test_dpd_stress originally looped over kT=[0, 2], comparing the
thermalized stress against a dissipative-only reference. That reference
omits the random force, so it is only valid before the noise term was
added to the DPD stress calculation. Restrict test_dpd_stress to the
unthermalized case (kT=0) and cover the noise term separately.

Add test_dpd_stress_noise_statistics: a single fixed pair with zero
relative velocity produces a pure-noise stress whose mean is zero and
whose per-component variance follows the fluctuation-dissipation result
Var(sigma_ij) = (d_i^2/V^2) * (1/12) * ((A^2-B^2)*dhat_j^2 + B^2). A
generic off-axis separation makes all nine components nonzero and
distinct, and sampling over many RNG counters checks them against the
analytic values.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The DPD virial was exposed under two names with opposite signs:
dpd_stress()/DPDStress returned -sum(r x F)/V while the pressure
tensor's dpd contribution returned +sum(r x F)/V. Retire the stress
naming: system.analysis.dpd_pressure() and observables.DPDPressure
now return the pressure convention (+, including the noise term),
identical to pressure_tensor()["dpd"].

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Replace all instances of F.d^T with d.F^T
@jngrad jngrad self-assigned this Jul 20, 2026
@jngrad jngrad added the BugFix label Jul 21, 2026
@jngrad jngrad added this to the ESPResSo 5.0.2 milestone Jul 21, 2026

@jngrad jngrad left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks a lot!

@jngrad
jngrad merged commit 2151256 into espressomd:python Jul 21, 2026
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants