SimVascular / SimVascular/svOneDSolver

Input local vessel area

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

Nobody has claimed this yet.

enhancement
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
Image
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

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 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.