Skip to content

Release v2.15.0

Latest

Choose a tag to compare

@github-actions github-actions released this 04 Oct 20:43
· 5 commits to main since this release

Added

  • Young's modulus now comes with an error bar, and deform stages can be
    replicated.
    plots post fits every pull -- each direction, each replica -- on its
    own and reports E as the mean of those fits with the standard error between them,
    writing the individual fits to E-fits.csv. A single fit's own statistics do not
    say how far a second pull would land; the scatter between pulls does. It warns when
    that error exceeds 20% of E. A deform stage takes replicas: N to run N pulls with
    their own velocities, in <subdir>-r1 ... <subdir>-rN, and seed to make them
    reproducible.

  • fit_strain sets the strain window E is fitted over. The window used to be a
    range of rows, [10, 200], which covers 0.1-2% strain only at the default rate and
    energy-output interval, and silently covered something else whenever either changed
    or the pull was shorter. plots post says when a pull stops short of it.

Changed

  • deform now defaults to a 40 ps pull, three replicas, and a fit over 0.1-3%
    strain
    (was 1000 ps -- a pull to 100% strain -- one replica, and rows 10-200). The
    defaults were measured on example 6's network, 15 pulls to 10% strain: E is flat to
    3-4% and softens past it, a single pull scatters by 80% fitted to 2% but by 30% fitted
    to 3%, and nine pulls give E to about 10% (2.67 +/- 0.19 GPa there). Tutorials 2, 4, 5
    and 6 use them. plots post on a run from before replicas existed still finds its
    single deform-<d> directory.

  • Young's modulus is fitted with a free intercept. The fit used to be forced
    through zero stress at zero strain, which assumes the structure starts unstressed. A
    glass equilibrated for tens of ps does not: example 6's started at +150-200 bar, which
    through the origin adds that offset over the strain to E -- about +1 GPa over a 2%
    window -- and another network's started at -180 bar, biasing it low. Moduli computed
    by earlier versions are off by an amount that depends on each structure's residual
    stress. The R^2 warning added earlier in this cycle is gone: a sound fit to a real
    trace has R^2 near 0.45, and the scatter between pulls is the real test.

Changed

  • Example 6 now cures bisphenol-A dicyanate by real cyclotrimerization. Its one
    monomer, BDC, carries two cyanate groups, and a ring_cure block closes three of them
    at a time into a 1,3,5-triazine, the reaction that actually cures a cyanate ester.
    Conversion is the cyanate-group conversion, counted directly, and an unreacted group
    simply stays -O-C#N, so the example needs no postcure repair. Until now the example
    used a stand-in model -- bisphenol A plus a pre-formed triazine, joined by aryl
    ethers, with a repair stage dismantling incomplete rings afterward -- whose triazines
    existed before cure began, so the way its network formed, and its gel point, were not
    those of the chemistry. The tutorial is rewritten to match, with every number from a
    reference build (234 rings, cyanate conversion 0.975, Tg 529 K heating and 520 K
    cooling, fractional free volume 0.213), and the postcure_repair page now describes
    the repair stage as the tool for reproducing builds made the old way. The tutorial
    no longer quotes a Young's modulus: its deform stages reach 1% strain, which the
    reference build showed is too little to resolve one.

  • htpolynet now requires ycleptic 2.4.4 or later (was 2.4.1). From 2.4.3 on,
    ycleptic checks a base config's shape when it loads, not only its vocabulary: an
    attribute indented one level too deep, a default: that contradicts its own type:,
    or a non-attribute in an attributes: list used to be ignored silently, so whatever it
    declared simply did not exist. 2.4.4 extends that check to the top-level list.
    htpolynet's own schema passes it clean.

Fixed

  • A postsim stage with an unusable subdir failed only when its turn came, after
    every stage before it had run -- a 21-stage grid would spend its allocation on the
    first stages and then die with a bare assertion. postsim now checks every stage's
    directory before running any and names all the bad ones. A subdir must be one name
    inside a project directory (postsim/deform-x); deeper paths such as
    postsim/grid-A/deform-x are not supported.

  • htpolynet plots diag failed on every ring-cure run with a bare IndexError. It
    recognized only CURE's two progress lines, and a ring cure logs its own, so it parsed
    nothing. It now reads both, and a log with neither raises an error that says so. Its
    iteration axes were also off by one for every cure: the cure's start was plotted as
    iteration 1.

  • htpolynet plots post crashed before computing Young's modulus on pandas 3
    ("Columns with duplicate values are not supported in stack"), losing e.png and
    E.csv after Tg had been plotted. The deform curves are now averaged without stacking
    same-named columns.

  • A bond stored with its atoms in descending order could silently keep stale
    parameters.
    Topology.reset_override_from_type put the requested pair in canonical
    order but compared it against the stored row as written, so it missed a bond stored as
    (aj, ai); the postcure repair's refresh_bond_params then swallowed the failure at
    debug level and the cap's C-N bond kept its aromatic parameters. The lookup now
    compares canonical order on both sides, and a refresh failure is a warning. Found by
    the first end-to-end test of the repair driver, which also lands here.

  • A ring cure's setup log no longer quotes a meaningless bond count. "100% conversion
    is N bonds" came from CURE's pairwise count, which treated a three-reactant ring
    closure as three independent pairwise reactions: 360 BADCy monomers reported 1080
    bonds, where full conversion is 240 rings and 720 bonds. A ring cure now says its
    conversion is counted in reactive groups and points at the "Ring cure begins" line.
    In a configuration with both pairwise and ring-closing reactions, the count CURE
    uses for its own target now leaves the ring-closing reaction out.

  • Two documentation passages still described Berendsen coupling as current after 2.14.0
    moved off it: the densification gate's warning now says the packaged npt.mdp uses
    C-rescale (and what that means for densities from older builds), and the container
    guide's list of GPU-update-compatible features names V-rescale and C-rescale.