SimVascular / SimVascular/svOneDSolver
Input local vessel area
Nobody has claimed this yet.
- Dominant language
- C++
- Stars
- 22
- Forks
- 27
- PR merge metrics
- No merged PRs in 30d
Description
Problem
We currently provide the area of the blood vessel at the inlet and outlet and linearly interpolate in between. Yet, we have a much more detailed variation of local vessel area from the centerline. Refining the local area yields a pressure variation along the vessel that's much closer to 3D (see Figure 11). Currently, the only way to refine the area is by dividing each vessel into sub-vessels. However, this greatly increases the number of DOFs and (in my experience) worsens the numerical stability of the system by introducing a large number of Lagrange multipliers to couple these vessel segments.
Solution
I think "all we need to do" is to provide the solver with the local area from the centerline. We already discretize each vessel segment with many finite elements that would be reasonably fine to represent local variations in area. We currently ignore that opportunity and instead linearly interpolate between the inlet and outlet areas. Thus, this should only be an input file problem. With the new JSON input file format (#114), we could provide a z coordinate vector with a corresponding area vector and then linearly interpolate the area of each finite element node from those vectors. This way, a user could choose how to resolve the area and retain the legacy behavior of just two input values.
Additional context
Figure 11
Pressure along vessel branches in an aortic coarctation model at peak systole. Compare blue (3D) and orange (1D) lines for one segment per vessel branch (top) and 10 segments per vessel branch (bottom). The pressure variation along each branches in 1D is remarkably close to 3D when discretizing with 10 segments.
Code of Conduct
- I agree to follow this project's Code of Conduct and Contributing Guidelines
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the JSON input handling and vessel-area interpolation described in the issue, then trace how inlet and outlet areas are assigned to finite-element nodes. Support optional z and area vectors while retaining the legacy two-value behavior, and verify that local areas are interpolated along the vessel without requiring sub-vessels.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cpp
- Domain
- backend
- Issue type
- Feature
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100