SimVascular / SimVascular/svMultiPhysics

Store data on integration points

Open
#179 6 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

enhancement
Dominant language
C++
Stars
45
Forks
61
Avg merge
5d 23h
Merged PRs (30d)
11

Description

Use Case

All constrained-mixture-based (CMM) growth and remodeling (G&R) solid material models need to store internal data on each integration (Gauss) point. Different CMM materials store different sets of information:

  • full CMM (#2): every past time step
  • homogenized CMM (#33): previous time step
  • equilibrated CMM (#49): pre-loading time step
Problem

We currently store all global data on a node/dof-basis, which doesn't fit the G&R models.

Solution

There are two ways to implement this:

  1. Store a n-sized vector on each integration point, where n is the number if internal variables
  2. Store an n x elem-sized matrix globally, where elem is the total number of elements

I think approach 1 might be easier to implement with parallelization in mind. The elements are already distributed to processors and the data is only needed within each element. An example of this would be the FEMaterialPoint in FEBio, see usage here.

Alternatives considered

We discussed with @MatteoSalvador storing all data in a node-based format using back-and-forth projection using the elements' shape functions. The advantage of this would be that we get a regularization of G&R variables by the shape functions. Also, it would fit the FEM way of storing all data on a nodal basis.

After thinking about it more, I think we can't do this easily. These internal variables don't appear (directly) in the weak form and are not part of the unknowns. The projection would make everything we compute non-local to the elements and complicate the linearization. Furthermore, we would need a way of spatially interpolating tensors. Happy to discuss more!

Additional context

No response

Code of Conduct
  • I agree to follow this project's Code of Conduct and Contributing Guidelines

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reading the linked FEMaterialPoint.cpp example and its usage in FEMbeCmm.cpp around lines 30-44. Compare the two proposed storage approaches and determine how integration-point data should be represented for parallel CMM materials. Done means the selected design supports each material's required internal history without node-based projection.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp
Domain
backend, distributed-systems
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.