Skip to content

PropertyFieldView - #333

Merged
cmhamel merged 2 commits into
mainfrom
props-again
Aug 7, 2026
Merged

cmhamel merged 2 commits into
mainfrom
props-again

Conversation

@cmhamel

@cmhamel cmhamel commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Adding PropertyFieldView type so we don't need to resort to StaticArrays. The only things StaticArrays offers us isbits-ness. But this PropertyFieldView type is also isbits. If we only need properties for e.g. elastoplastic models, then StaticArrays is just fine since we'll usually be under ~10 parameters. However, for viscoelastic models, we could easily get into the dozens or even over a hundred individual parameters where StaticArrays become less competetive and can lead to subtsantial compile times. This PR slightly reverts some things but not by much. Tested against the whole Carina.jl test suite.

…ays. The only things StaticArrays offers us isbits-ness. But this PropertyFieldView type is also isbits. If we only need properties for e.g. elastoplastic models, then StaticArrays is just fine since we'll usually be under ~10 parameters. However, for viscoelastic models, we could easily get into the dozens or even over a hundred individual parameters where StaticArrays become less competetive and can lead to subtsantial compile times. This PR slightly reverts some things but not by much. Tested against the whole Carina.jl test suite.
@cmhamel
cmhamel requested a review from lxmota August 7, 2026 03:34
@codecov

codecov Bot commented Aug 7, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 70.95%. Comparing base (125097b) to head (c0e4cfe).

Additional details and impacted files
@@            Coverage Diff             @@
##             main     #333      +/-   ##
==========================================
+ Coverage   70.91%   70.95%   +0.03%     
==========================================
  Files          54       54              
  Lines        6289     6294       +5     
==========================================
+ Hits         4460     4466       +6     
+ Misses       1829     1828       -1     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

`PropertyFieldView{D} <: AbstractVector{eltype(D)}` does not do what it
reads like: `eltype` of an unbound TypeVar is `Any`, so the supertype was
`AbstractVector{Any}` and `eltype(properties(...))` came back `Any`.

That is not cosmetic downstream.  ConstitutiveModels' `module_props`
builds `SVector{NP, eltype(props)}`, and every `Hyperelastic` and
`LinearElastic` evaluation routes through it, so an `Any` eltype turned
the whole constitutive call into a boxed, dynamically dispatched one.
Measured through Carina's assembly loop on torsion-qs (160k elements,
527,877 DOF, 12 threads), against this branch's parent:

    stiffness_action    25.19 ms  ->  551.38 ms   (21.9x slower)
    residual            23.77 ms  ->  414.50 ms   (17.4x slower)

GPU was unaffected -- 9.83 ms vs 9.70 ms, checksums bit-identical --
because GPUCompiler inlines aggressively enough that SROA recovers the
concrete type before anything can box.  Carrying the element type as a
parameter restores CPU to 24.84 ms and 21.63 ms, with the same
checksums.

Separately, `getindex` carried `@propagate_inbounds` but had no
`@boundscheck`, so no bounds check existed at any optimization level.
Since every block's properties share one flat vector, an out-of-range
read silently returned the *next* block's properties rather than
failing: on a three-property block, `p[4]` handed back block 2's first
property.  Blocks may now have different property counts, so this is
reachable from an ordinary off-by-one in a material model.

Tests cover both, and `IndexStyle` is declared linear so the generic
AbstractArray fallbacks stop routing through CartesianIndices.

Signed-off-by: Alejandro Mota <amota@sandia.gov>

@lxmota lxmota left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Looks good to me after a small fix.

@cmhamel
cmhamel merged commit 277f2f7 into main Aug 7, 2026
11 of 13 checks passed
@cmhamel
cmhamel deleted the props-again branch August 7, 2026 20:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants