Skip to content

Viscoelastic history: timestep from the wall strain rate, and a conformation health check #768

Open

Description

@lmoresi

On the confined cylinder (Oldroyd-B, beta 0.59) every stress history loses positive-definiteness of the conformation c = tau*/G + I in the first step at dt 0.4 (Courant 1 on the far-field mesh): the wall strain rate is about 7, so the local lambda|D| is about 3 and the explicit stretching term over one step is far outside its range. The nodal history then runs away and hangs (with or without DEVSS); the IP history holds the defect bounded and gives out at Wi 0.6. At dt 0.04 the IP history is admissible everywhere to Wi 0.6 and the drag lands at 119.3 / 114.4 (references 120.6 / 117.8) on the coarse mesh.

Two things the model should provide:

  1. max_elastic_timestep(safety=0.3): safety / max over the domain of the strain-rate magnitude, so a run can take dt = min(courant_dt, model.max_elastic_timestep()). The Courant number on the far-field mesh is the wrong criterion for the stretching term.
  2. conformation_min_eigenvalue(): the smallest eigenvalue of tau*/G + I on the carried polymer stress (nodal or integration-point storage), with its location and the fraction of points below zero. This is the health line that separates a preconditioner failure from a lost conformation; the per-step check that found the problem lives only in a run script so far (~/+Simulations/stress_transport/cylinder_ob/ob_cylinder.py, CONF lines).

Both with hard-baseline tests on a simple shear box (one BDF-1 step from rest at dt = lambda gives min eigenvalue 1 - lambda/2 exactly).

Underworld development team with AI support from Claude Code

Activity

  1. lmoresi commented on Sep 20, 2026

    @lmoresi
    MemberAuthor

    Implemented on feature/stress-transport-ddt (71bb82d): IntegrationPointSemiLagrangian.store_smoothing (alpha = c·h², c ≈ 0.03–0.07), ViscoElasticPlasticFlowModel.max_elastic_timestep(safety) and conformation_min_eigenvalue(), hard-baseline tests, and docs/developer/subsystems/stress-transport.md. Closes with the branch PR.

    Underworld development team with AI support from Claude Code

  2. lmoresi commented on Oct 8, 2026

    @lmoresi
    MemberAuthor

    Fixed by #833, merged to development (f4733d4f).

    Both halves this issue asked for are there:

    • max_elastic_timestep(safety) on the viscoelastic model — the safety factor over the largest strain rate, which is the timestep-from-the-wall-strain-rate half;
    • conformation_min_eigenvalue() — the health line that tells a lost preconditioner from a lost problem.

    Both trace-back histories expose carried_tensors() so the check can read what they hold.

    The motivating measurement, kept here: on the confined cylinder every history lost positive-definiteness of tau*/G + I in the first step at Courant one on the far-field mesh, because the wall shear rate is ten times the far-field one and the explicit stretching term cannot span dt*gammadot ~ 3. A far-field Courant number is the wrong guide when the wall sets the rate — which is what max_elastic_timestep now answers.

    Hard baselines rather than a method comparison: one BDF-1 step from rest at dt = lambda gives eigenvalues 1 -+ 1/2 exactly, and a wall four times faster gives -1 everywhere.

    Closing manually: Closes lines here fire when development reaches main.

  3. lmoresi commented on Oct 12, 2026

    @lmoresi
    MemberAuthor

    Reopened and labelled fixed-in-development, under the policy now in CLAUDE.md:

    While the fix is in an open PR, label the issue fixed-in-PR; when the PR merges, relabel it fixed-in-development, comment with the PR and the merge commit, and leave it open. Issues are closed when development is released to main.

    The fix stands and the evidence above is unchanged — this is a bookkeeping correction, not a reversal. Closing it on merge was wrong because development has not been released, so anyone running the release still has the defect; the label says where the fix is and the release sweep closes it.

  4. added
    fixed-in-developmentFix merged to development; the issue closes when it is released to main
    on Oct 12, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    fixed-in-developmentFix merged to development; the issue closes when it is released to main

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions