Skip to content

Commit

Permalink
added details of GUI, updated authors, added docs description
Browse files Browse the repository at this point in the history
  • Loading branch information
menon-karthik committed Sep 17, 2024
1 parent 76d399d commit 24be89c
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 30 deletions.
23 changes: 16 additions & 7 deletions paper/paper.bib
Original file line number Diff line number Diff line change
Expand Up @@ -251,13 +251,13 @@ @incollection{PFALLER2024449
}

@article{rubio2024,
title={Hybrid Physics-Based and Data-Driven Modeling of Vascular Bifurcation Pressure Differences},
author={Natalia L. Rubio and Luca Pegolotti and Martin R. Pfaller and Eric F. Darve and Alison L. Marsden},
year={2024},
eprint={2402.15651},
archivePrefix={arXiv},
primaryClass={cs.CE},
url={https://arxiv.org/abs/2402.15651},
title={Hybrid Physics-Based and Data-Driven Modeling of Vascular Bifurcation Pressure Differences},
author={Natalia L. Rubio and Luca Pegolotti and Martin R. Pfaller and Eric F. Darve and Alison L. Marsden},
year={2024},
eprint={2402.15651},
archivePrefix={arXiv},
primaryClass={cs.CE},
url={https://arxiv.org/abs/2402.15651},
}

@article{Vignon-Clementel2006,
Expand Down Expand Up @@ -286,3 +286,12 @@ @article{Mirramezani2019
year = {2019}
}

@misc{menon2024personalizeduncertainty,
title={Personalized and uncertainty-aware coronary hemodynamics simulations: From Bayesian estimation to improved multi-fidelity uncertainty quantification},
author={Karthik Menon and Andrea Zanoni and Owais Khan and Gianluca Geraci and Koen Nieman and Daniele E. Schiavazzi and Alison L. Marsden},
year={2024},
eprint={2409.02247},
archivePrefix={arXiv},
primaryClass={physics.flu-dyn},
url={https://arxiv.org/abs/2409.02247},
}
56 changes: 33 additions & 23 deletions paper/paper.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,13 @@ authors:
- name: Martin R. Pfaller
affiliation: 1
equal-contrib: true
- name: Kaitlin E. Harold
affiliation: 1
- name: Jonathan Pham
affiliation: 1
- name: Nicholas Dorn
- name: Emilin M. Mathew
affiliation: 1
- name: Kaitlin E. Harold
affiliation: 1
- name: Nicholas C. Dorn
affiliation: 1
- name: Aekaansh Verma
affiliation: 1
Expand All @@ -41,12 +43,13 @@ While simulations of blood flow can be performed using various high and low-fide

We introduce [`svZeroDSolver`](https://github.com/simvascular/svZeroDSolver), an efficient and modular package for performing lumped-parameter (zero-dimensional) simulations of cardiovascular blood flow.
As part of the [`SimVascular`](https://simvascular.github.io/) open-source project, `svZeroDSolver` and `SimVascular` together allow users to go from medical imaging to fast zero-dimensional evaluations of patient-specific hemodynamics.
`svZeroDSolver` is written in C++ using an object-oriented framework.
It designed so that simply specifying a `.json` dictionary of lumped-parameter "blocks" -- such as blood vessels, valves, heart chambers, junctions between blood vessels, and boundary conditions (along with their associated parameters) -- allows the code to automatically assemble and solve the governing equations corresponding to the user-specified vascular model.
In addition, the package includes Python and C++ APIs to facilitate interfacing it with other software packages.
For example, it can be integrated into Python-based optimization and uncertainty quantification applications [@zanoni2024;@Lee2024;@richter2024bayesian].
`svZeroDSolver` is written in C++ using a modular object-oriented framework.
Simply specifying a `.json` dictionary of lumped-parameter "blocks" -- such as blood vessels, junctions between blood vessels, and boundary conditions (along with their associated parameters) -- allows the code to automatically assemble and solve the governing equations corresponding to the user-specified vascular model.
In addition, the package includes Python and C++ interfaces to facilitate its use with other software packages.
For example, it can be integrated into Python-based optimization and uncertainty quantification applications [@zanoni2024;@Lee2024;@richter2024bayesian;@menon2024personalizeduncertainty].
It can also be interfaced with high-performance C++/Fortran software for high-fidelity cardiovascular flow simulations, where `svZeroDSolver` can conveniently provide lumped-parameter boundary conditions [@menon2023predictors;@menon2024personalized].
`svZeroDSolver` also includes an application, called `svZeroDCalibrator`, to automatically calibrate parameters of a given zero-dimensional model to recapitulate hemodynamics at specific anatomical locations from independent measurements or high-fidelity simulations -- thus improving the accuracy of zero-dimensional models [@richter2024bayesian].
`svZeroDSolver` includes an application, called `svZeroDCalibrator`, to automatically calibrate parameters of a given zero-dimensional model to recapitulate hemodynamics at specific anatomical locations from independent measurements or high-fidelity simulations -- thus improving the accuracy of zero-dimensional models [@richter2024bayesian].
It also includes graphical interfaces to interactively create lumped-parameter models for simulations, as well as to visualize the simulated anatomy and hemodynamics.

# Statement of need

Expand All @@ -57,24 +60,29 @@ Previous work has used a variety of techniques to model cardiovascular blood flo
High-fidelity models generally involve simulations of the full three-dimensional flow-field within anatomical regions of interest [@menon2024cardiovascular;@Updegrove2017].
While these are the most accurate and informative, they are computationally expensive (each simulation can take several hours or days on hundreds of CPU cores) and therefore not feasible for use within typical clinical settings or for applications, such as optimization, which often require thousands of evaluations.
On the other end of the spectrum, lumped-parameter or zero-dimensional models provide information about bulk hemodynamics, such as flow rate and pressure, at specific anatomical regions of interest.
While these models are not spatially-resolved, they are very valuable in applications that require near real-time quantification of bulk hemodynamics, as well as applications that rely on thousands of repeated model evaluations, such as optimization and uncertainty quantification [@zanoni2024;@Lee2024;@richter2024bayesian].
While these models are not spatially-resolved, they are very valuable in applications that require near real-time quantification of bulk hemodynamics, as well as applications that rely on thousands of repeated model evaluations, such as optimization and uncertainty quantification [@zanoni2024;@Lee2024;@richter2024bayesian;@menon2024personalizeduncertainty].
They are also used in conjunction with high-fidelity simulations where lumped-parameter models are used as boundary conditions [@menon2023predictors;@menon2024personalized].

`svZeroDSolver`, which is a part of the `SimVascular` open-source project, is a new open-source software package that enables fast evaluation of zero-dimensional hemodynamics.
One major challenge in zero-dimensional modeling that `svZeroDSolver` addresses is that different clinical applications (and individual clinical cases within the same application) often require unique anatomical arrangements of blood vessels, heart valves, etc., and each of these anatomical configurations is governed by a distinct set of governing equations.
It is therefore common for users to implement application-specific solvers, which simulate the equations governing a specific application or anatomical configuration.
In contrast, the modularity of `svZeroDSolver` allows users to easily create arbitrary anatomical configurations by arranging a library of available "blocks", following which the software automatically assembles the equations governing the user-specified confguration.
One major challenge in zero-dimensional modeling that `svZeroDSolver` addresses is that different clinical applications (and individual clinical cases within the same application) often require unique anatomical arrangements of blood vessels, heart valves, etc. Moreover, distinct anatomical configurations are governed by a distinct set of governing equations.
Therefore, it is common for users to implement application-specific solvers which simulate the equations governing a specific application or anatomical configuration.
In contrast, the modularity of `svZeroDSolver` allows users to easily create arbitrary anatomical configurations by arranging a library of available "blocks", following which the software automatically assembles the equations governing the user-specified configuration.

Another unique feature of `svZeroDSolver` is its ability to easily interface with other C++ and Python packages.
This has been used in previous work on uncertainty quantification [@zanoni2024;@Lee2024;@richter2024bayesian] as well as in multi-scale simulations coupling three-dimensional hemodynamics with zero-dimensional representations of downstream circulation [@menon2023predictors;@menon2024personalized].
In particular, the C++ interface has been succesfully coupled with high-fidelity multi-physics solvers `svSolver` and `svFSI`, which are part of the widely used `SimVascular` open-source software project for cardiovascular biomechanics simulations [@Updegrove2017;@Zhu2022].
This has been used in previous work on uncertainty quantification [@zanoni2024;@Lee2024;@richter2024bayesian;menon2024personalizeduncertainty] as well as in multi-scale simulations coupling three-dimensional hemodynamics with zero-dimensional representations of downstream circulation [@menon2023predictors;@menon2024personalized].
The C++ interface has been coupled with high-fidelity multi-physics solvers `svSolver` and `svFSI`, which are part of the widely used `SimVascular` open-source software project for cardiovascular biomechanics simulations [@Updegrove2017;@Zhu2022].
`svZeroDSolver` has also been integrated into the graphical user interface of the `SimVascular` project.
This allows users to leverage the functionality in `SimVascular` to generate three-dimensional patient-specific anatomical models from medical images, and subsequently perform patient-specific zero-dimensional simulations of blood flow by automatically converting the three-dimensional anatomy into a zero-dimensional model [@pfaller22].
This allows users to leverage the functionality in `SimVascular` to generate three-dimensional patient-specific anatomical models from medical images, and subsequently perform patient-specific zero-dimensional simulations of blood flow by automatically converting the three-dimensional anatomy into a zero-dimensional model [@pfaller22].
The automatic conversion of arbitrary patient-specific anatomies to zero-dimensional simulations is possible to due the modular nature of `svZeroDSolver`.
Using this pipeline, previous work has demonstrated accelerated convergence of three-dimensional simulations when using corresponding zero-dimensional simulation results as initial conditions [@pfaller21].

In addition, the `svZeroDCalibrator` application within `svZeroDSolver` includes functionality to improve the accuracy of zero-dimensional models by optimizing the parameters of blood vessels to recapitulate observed hemodynamics from measurements or high-fidelity simulations.
This allows users to build more accurate zero-dimensional models than those typically based purely on the anatomy of the vascular region of interest [@richter2024bayesian].
The accuracy of `svZeroDSolver` is assessed using continuous integration tests and has also been verified by comparing with high-fidelity three dimensional simulations [@pfaller22].
In addition, `svZeroDSolver` includes several applications to augment its functionality.
The `svZeroDCalibrator` application improves the accuracy of zero-dimensional models by optimizing the parameters of blood vessels to recapitulate observed hemodynamics from measurements or high-fidelity simulations.
This allows users to build more accurate zero-dimensional models than those typically based purely on the anatomy of the vascular region of interest [@richter2024bayesian].
The `svZeroDGUI` application is a web-based graphical interface that allows users to create zero-dimensional simulations by interactively dragging-and-dropping individual blood vessels, heart chambers, boundary conditions, connections between these blocks, etc.
Another graphical application, `svZeroDVisualization`, is an interface to visualize the lumped-paramater structure of given anatomical models as well as the simulated hemodynamics within each block.
Together, these graphical interfaces make `svZeroDSolver` intuitive for a wide range of users, potentially expanding its use from research to intructional and clinical contexts.
The functionality and accuracy of `svZeroDSolver` is assessed using continuous integration tests on GitHub, and has also been verified by comparing with high-fidelity three dimensional simulations [@pfaller22].
This combination of features makes `svZeroDSolver` uniquely applicable to a wide range of applications in cardiovascular biomechanics.

![Various zero-dimensional "blocks" included in `svZeroDSolver` at the time of writing.\label{fig:blocks}](blocks.png){ width=80% }
Expand All @@ -93,18 +101,20 @@ Details on the modular implementation of the blocks, along with their governing
We use the [Eigen package](https://gitlab.com/libeigen/eigen) to represent and solve these sparse linear systems [@eigenweb].
Mathematical details on this implementation are provided in the [`SparseSystem`](https://simvascular.github.io/svZeroDSolver/class_sparse_system.html#details) and [`Integrator`](https://simvascular.github.io/svZeroDSolver/class_integrator.html#details) classes in the documentation.

`svZeroDSolver` currently has implementations of different types of blood vessel blocks with non-linear resistors to model vascular stenoses, junctions between blood vessels, a heart valve block modeled using a hyperbolic tangent function, a cardiac chamber block modeled as a time-varying capacitor and inductor, and several different boundary condition blocks including simple flow, pressure and resistors blocks, windkessel boundary conditions, coronary boundary conditions that include the intramyocardial pressure experienced by coronary arteries, as well as closed-loop versions of windkessel and coronary boundary conditions that allow a user to build a closed-loop circulation model [@Vignon-Clementel2006;@Kim2009;@kimcoronary;@Mirramezani2019;@menon2023predictors;@menon2024personalized].
The input to `svZeroDSolver` is a `.json` file which specifies the simulation parameters (number of time steps, cardiac cycles, etc.), the types of blocks to be included in the specific model, the boundary conditions, and how the blocks are connected (typically using `junction` blocks).
Each of these blocks generally requires several parameters which can be specified using a steady value, a list of time-varying values, or a mathematical function which is parsed using [exprtk](https://github.com/ArashPartow/exprtk).
Each of these blocks generally requires several parameters which can be specified using a steady value or a list of time-varying values.
The solver can either run simulations for a specified number of time steps and cardiac cycles, or until the difference in mean quantities between consecutive cardiac cycles is below a given threshold.

`svZeroDSolver` currently has implementations of different types of blood vessel blocks with non-linear resistors to model vascular stenoses, junctions between blood vessels, a heart valve block modeled using a hyperbolic tangent function, a cardiac chamber block modeled as a time-varying capacitor and inductor, and several different boundary condition blocks including simple flow, pressure and resistors blocks, windkessel boundary conditions, coronary boundary conditions that include the intramyocardial pressure experienced by coronary arteries, as well as closed-loop versions of windkessel and coronary boundary conditions that allow a user to build a closed-loop circulation model [@Vignon-Clementel2006;@Kim2009;@kimcoronary;@Mirramezani2019;@menon2023predictors;@menon2024personalized].

The [documentation for `svZeroDSolver`](https://simvascular.github.io/svZeroDSolver/) is automatically built on GitHub using [Doxygen](https://www.doxygen.nl/).
It includes instructions for installation, user guides for `svZeroDSolver` and its various applications, as well as mathematical and graphical descriptions of each zero-dimensional block that is implemented in the solver.
Examples of configuration files to run `svZeroDSolver` simulations using the various available blocks are in `svZeroDSolver/tests/cases`.
The repository also includes examples demonstrating the simple API for interfacing between `svZeroDSolver` and external C++ software packages in `svZeroDSolver/tests/test_inetrface`.
The repository also includes examples demonstrating the simple API for interfacing between `svZeroDSolver` and external C++ software packages in `svZeroDSolver/tests/test_interface`.
Details on creating zero-dimensional simulations from three-dimensional models using the `SimVascular` graphical interface are available on the [SimVascular documentation](https://simvascular.github.io/documentation/rom_simulation.html).

Future development plans include a graphical interface to create circuit representations of existing zero-dimensional models, as well as functionality to create `svZeroDSolver`-compatible `.json` configuration files directly from graphical (circuit) representations of user-specified circulatory models.
Future development plans include functionality to specify time-varying block parameters as mathematical expressions using the [exprtk package](https://github.com/ArashPartow/exprtk).
We are also expanding the available blocks to more accurately model hemodynamics, such as by using data-driven models for pressure losses at arbitrarily shaped vascular junctions [@rubio2024].
In addition, we plan to extend the `svZeroDGUI` application to interactively create custom zero-dimensional boundary conditions for three-dimensional simulations.
The development team actively implements new features, blocks and test cases to build on the capabilities of svZeroDSolver and ensure its accuracy and speed.

# Acknowledgments
Expand Down

0 comments on commit 24be89c

Please sign in to comment.