diff --git a/.github/workflows/codechecks.yml b/.github/workflows/codechecks.yml index 0fc346dc0..954d0f570 100644 --- a/.github/workflows/codechecks.yml +++ b/.github/workflows/codechecks.yml @@ -8,10 +8,11 @@ jobs: - uses: actions/checkout@v3 - name: Install dependencies run: | - sudo apt install clang-format + wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add - + sudo apt-get install clang-format-19 - name: Run clang-format run: | mkdir Release cd Release cmake .. - make codecheck \ No newline at end of file + make codecheck diff --git a/.github/workflows/documentation.yml b/.github/workflows/documentation.yml index 025b981b8..1b87c90bf 100644 --- a/.github/workflows/documentation.yml +++ b/.github/workflows/documentation.yml @@ -18,7 +18,7 @@ jobs: doxyfile-path: 'docs/Doxyfile' enable-latex: true - name: Save documentation - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: documentation path: ./docs/build/html diff --git a/.github/workflows/draft-pdf.yml b/.github/workflows/draft-pdf.yml index 70322defc..56e93c8e3 100644 --- a/.github/workflows/draft-pdf.yml +++ b/.github/workflows/draft-pdf.yml @@ -23,7 +23,7 @@ jobs: # This should be the path to the paper within your repo. paper-path: paper/paper.md - name: Upload - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: paper # This is the output path where Pandoc will write the compiled diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 12d787a86..8ba9752c1 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -8,7 +8,10 @@ jobs: strategy: matrix: os: [ubuntu-22.04, ubuntu-latest, macos-13, macos-latest] + version: [13] # GCC version fail-fast: false + env: + GCC_V: ${{ matrix.version }} steps: - uses: actions/checkout@v4 - uses: conda-incubator/setup-miniconda@v3 @@ -17,12 +20,21 @@ jobs: - name: Install ubuntu dependencies if: startsWith(matrix.os, 'ubuntu') run: sudo apt update && sudo apt install build-essential cmake lcov - - name: Install svZeroDSolver + - name: Create conda environment run: | #export PATH="/usr/share/miniconda/bin:$PATH" #alias conda="$CONDA/bin/conda" conda create -n zerod python=3.11.4 - conda run -n zerod pip install -e ".[dev]" + - name: Install dependencies to get correct version numbers (Ubuntu) + if: startsWith(matrix.os, 'ubuntu') + run: conda install -n zerod -c conda-forge libstdcxx-ng=${GCC_V} gcc=${GCC_V} + - name: Install dependencies to get correct version numbers (MacOS) + if: startsWith(matrix.os, 'macos') + run: | + brew install gcc@${GCC_V} + ln -s /usr/local/bin/gcc-${GCC_V} /usr/local/bin/gcc + - name: Install svZeroDSolver + run: conda run -n zerod pip install -e ".[dev]" - name: Install Networkx run: | conda run -n zerod pip install networkx @@ -59,7 +71,7 @@ jobs: make coverage - name: Save coverage report if: startsWith(matrix.os, 'ubuntu-22.04') - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: coverage_report path: Release/coverage @@ -74,7 +86,7 @@ jobs: cpack cp distribution/svZeroDSolver_* .. - name: Upload installer - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: ${{ matrix.os }} installer path: svZeroDSolver_* diff --git a/LICENSE.txt b/LICENSE.txt index ede969849..3421df827 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -8,4 +8,6 @@ Permission is hereby granted, free of charge, to any person obtaining a copy of The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +License type: MIT License diff --git a/paper/paper.bib b/paper/paper.bib index 4ca2018d8..efafd7255 100644 --- a/paper/paper.bib +++ b/paper/paper.bib @@ -79,7 +79,8 @@ @article{pfaller2019importance volume={18}, pages={503--529}, year={2019}, - publisher={Springer} + publisher={Springer}, + doi={10.1007/s10237-018-1098-4} } @article{menon2023predictors, @@ -99,7 +100,8 @@ @article{sankaran2012patient volume={40}, pages={2228--2242}, year={2012}, - publisher={Springer} + publisher={Springer}, + doi={10.1007/s10439-012-0579-3} } @article{kerckhoffs2007coupling, @@ -109,7 +111,8 @@ @article{kerckhoffs2007coupling volume={35}, pages={1--18}, year={2007}, - publisher={Springer} + publisher={Springer}, + doi={10.1007/s10439-006-9212-7} } @article{menon2024cardiovascular, @@ -178,7 +181,7 @@ @article{TAYLOR2023 year = {2023}, note = {A Special Issue in Honor of the Lifetime Achievements of T. J. R. Hughes}, issn = {0045-7825}, -doi = {https://doi.org/10.1016/j.cma.2023.116414}, +doi = {10.1016/j.cma.2023.116414}, url = {https://www.sciencedirect.com/science/article/pii/S0045782523005388}, author = {Charles A. Taylor and Kersten Petersen and Nan Xiao and Matthew Sinclair and Ying Bai and Sabrina R. Lynch and Adam UpdePac and Michiel Schaap}, keywords = {Patient-specific modeling, Blood flow, Deep learning, Coronary artery}, @@ -200,7 +203,7 @@ @article{Updegrove2017 @article{Lee2024, author = {Lee, John D and Richter, Jakob and Pfaller, Martin R and Szafron, Jason M and Menon, Karthik and Zanoni, Andrea and Ma, Michael R and Feinstein, Jeffrey A and Kreutzer, Jacqueline and Marsden, Alison L and Schiavazzi, Daniele E}, -doi = {https://doi.org/10.1002/cnm.3820}, +doi = {10.1002/cnm.3820}, journal = {International Journal for Numerical Methods in Biomedical Engineering}, keywords = { neural network emulator, parameterization of complex interventional repairs,digital twin for interventional planning}, number = {5}, @@ -213,7 +216,7 @@ @article{Lee2024 @article{zanoni2024, author = {Zanoni, Andrea and Geraci, Gianluca and Salvador, Matteo and Menon, Karthik and Marsden, Alison L and Schiavazzi, Daniele E}, -doi = {https://doi.org/10.1016/j.cma.2024.117119}, +doi = {10.1016/j.cma.2024.117119}, issn = {0045-7825}, journal = {Computer Methods in Applied Mechanics and Engineering}, keywords = { Active subspaces, Autoencoders, Monte Carlo estimators, Normalizing flows, Uncertainty quantification,Multifidelity}, @@ -245,18 +248,21 @@ @incollection{PFALLER2024449 year = {2024}, series = {Biomechanics of Living Organs}, isbn = {978-0-323-95484-6}, -doi = {https://doi.org/10.1016/B978-0-323-95484-6.00016-6}, +doi = {10.1016/B978-0-323-95484-6.00016-6}, url = {https://www.sciencedirect.com/science/article/pii/B9780323954846000166}, -author = {Martin R. Pfaller and Luca Pegolotti and Jonathan Pham and Natalia L. Rubio and Alison L. Marsden}, +author = {Martin R. Pfaller and Luca Pegolotti and Jonathan Pham and Natalia L. Rubio and Alison L. Marsden} } @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}, -volume={2402.15651}, -journal={arXiv}, -url={https://arxiv.org/abs/2402.15651}, +title = {Hybrid physics-based and data-driven modeling of vascular bifurcation pressure differences}, +journal = {Computers in Biology and Medicine}, +volume = {184}, +pages = {109420}, +year = {2025}, +issn = {0010-4825}, +doi = {10.1016/j.compbiomed.2024.109420}, +url = {https://www.sciencedirect.com/science/article/pii/S0010482524015051}, +author = {Natalia L. Rubio and Luca Pegolotti and Martin R. Pfaller and Eric F. Darve and Alison L. Marsden} } @article{Vignon-Clementel2006, @@ -293,3 +299,33 @@ @article{menon2024personalizeduncertainty journal={arXiv}, url={https://arxiv.org/abs/2409.02247}, } + +@article{AFRICA2024109039, +title = {lifex-cfd: An open-source computational fluid dynamics solver for cardiovascular applications}, +journal = {Computer Physics Communications}, +volume = {296}, +pages = {109039}, +year = {2024}, +issn = {0010-4655}, +doi = {10.1016/j.cpc.2023.109039}, +url = {https://www.sciencedirect.com/science/article/pii/S0010465523003843}, +author = {Pasquale Claudio Africa and Ivan Fumagalli and Michele Bucelli and Alberto Zingaro and Marco Fedele and Luca Dede' and Alfio Quarteroni}, +} + +@article{crimson2021, + doi = {10.1371/journal.pcbi.1008881}, + author = {Arthurs, Christopher J. AND Khlebnikov, Rostislav AND Melville, Alex AND Marčan, Marija AND Gomez, Alberto AND Dillon-Murphy, Desmond AND Cuomo, Federica AND Silva Vieira, Miguel AND Schollenberger, Jonas AND Lynch, Sabrina R. AND Tossas-Betancourt, Christopher AND Iyer, Kritika AND Hopper, Sara AND Livingston, Elizabeth AND Youssefi, Pouya AND Noorani, Alia AND Ben Ahmed, Sabrina AND Nauta, Foeke J. H. AND van Bakel, Theodorus M. J. AND Ahmed, Yunus AND van Bakel, Petrus A. J. AND Mynard, Jonathan AND Di Achille, Paolo AND Gharahi, Hamid AND Lau, Kevin D. AND Filonova, Vasilina AND Aguirre, Miquel AND Nama, Nitesh AND Xiao, Nan AND Baek, Seungik AND Garikipati, Krishna AND Sahni, Onkar AND Nordsletten, David AND Figueroa, C. Alberto}, + journal = {PLOS Computational Biology}, + publisher = {Public Library of Science}, + title = {CRIMSON: An open-source software framework for cardiovascular integrated modelling and simulation}, + year = {2021}, + month = {05}, + volume = {17}, + url = {https://doi.org/10.1371/journal.pcbi.1008881}, + pages = {1-21}, + number = {5}, +} + +@article{Hirschvogel2024, doi = {10.21105/joss.05744}, url = {https://doi.org/10.21105/joss.05744}, year = {2024}, publisher = {The Open Journal}, volume = {9}, number = {93}, pages = {5744}, author = {Marc Hirschvogel}, title = {Ambit – A FEniCS-based cardiovascular multi-physics solver}, journal = {Journal of Open Source Software} } + +@article{Agdestein2018, doi = {10.21105/joss.01107}, url = {https://doi.org/10.21105/joss.01107}, year = {2018}, publisher = {The Open Journal}, volume = {3}, number = {32}, pages = {1107}, author = {Syver D. Agdestein and Kristian Valen-Sendstad and Alexandra K. Diem}, title = {Artery.FE: An implementation of the 1D blood flow equations in FEniCS}, journal = {Journal of Open Source Software} } diff --git a/paper/paper.md b/paper/paper.md index db66ef353..562914b26 100644 --- a/paper/paper.md +++ b/paper/paper.md @@ -11,28 +11,32 @@ authors: equal-contrib: true affiliation: 1 - name: Jakob Richter - affiliation: 1 + affiliation: 2 equal-contrib: true - name: Martin R. Pfaller - affiliation: 1 + affiliation: 3 equal-contrib: true - name: Jonathan Pham - affiliation: 1 + affiliation: 2 - name: Emilin M. Mathew - affiliation: 1 + affiliation: 2 - name: Kaitlin E. Harold - affiliation: 1 + affiliation: 2 - name: Nicholas C. Dorn - affiliation: 1 + affiliation: 2 - name: Aekaansh Verma - affiliation: 1 + affiliation: 2 - name: Alison L. Marsden - affiliation: 1 + affiliation: 2 corresponding: true affiliations: - - name: Stanford University, Stanford, CA, United States of America + - name: Georgia Institute of Technology, Atlanta, GA, United States of America index: 1 -date: July 2024 + - name: Stanford University, Stanford, CA, United States of America + index: 2 + - name: Yale University, New Haven, CT, United States of America + index: 3 +date: March 2025 bibliography: paper.bib --- @@ -46,8 +50,8 @@ As part of the [`SimVascular`](https://simvascular.github.io/) open-source proje `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 C++/Fortran software for high-fidelity cardiovascular flow simulations, where `svZeroDSolver` can conveniently provide physiological lumped-parameter boundary conditions [@menon2023predictors;@menon2024personalized]. +For example, it can be integrated into Python-based optimization and uncertainty quantification applications [@zanoni2024; @Lee2024; @richter2024bayesian; @menon2024personalizeduncertainty]. +It can also be interfaced with C++/Fortran software for high-fidelity cardiovascular flow simulations, where `svZeroDSolver` can conveniently provide physiological lumped-parameter boundary conditions [@menon2023predictors; @menon2024personalized]. `svZeroDSolver` includes an application, called `svZeroDCalibrator`, to automatically calibrate parameters of a given zero-dimensional model based independent hemodynamic 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. @@ -57,11 +61,11 @@ Non-invasive quantification of patient-specific hemodynamics via computational s Computational modeling is also a promising tool for non-invasive and personalized optimization of clinical treatments and surgery [@Marsden2014]. Previous work has used several techniques to model cardiovascular blood flow, all of which can be broadly categorized based on their level of fidelity. -High-fidelity models generally involve simulations of the full three-dimensional flow-field within anatomical regions of interest [@menon2024cardiovascular;@Updegrove2017]. +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 practical in typical clinical settings or for applications, such as optimization and uncertainty quantification, which often require thousands of model 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 valuable in applications which require near real-time quantification of bulk hemodynamics, as well as those that rely on thousands of repeated model evaluations [@zanoni2024;@Lee2024;@richter2024bayesian;@menon2024personalizeduncertainty]. -They are also commonly used in conjunction with high-fidelity simulations where lumped-parameter models are used as physiological boundary conditions [@menon2023predictors;@menon2024personalized]. +While these models are not spatially-resolved, they are valuable in applications which require near real-time quantification of bulk hemodynamics, as well as those that rely on thousands of repeated model evaluations [@zanoni2024; @Lee2024; @richter2024bayesian; @menon2024personalizeduncertainty]. +They are also commonly used in conjunction with high-fidelity simulations where lumped-parameter models are used as physiological 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. Moreover, distinct anatomical configurations are governed by a distinct set of governing equations. @@ -69,8 +73,8 @@ Therefore, it is common for users to implement application-specific solvers whic 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;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 the high-fidelity multi-physics solver [`svFSIplus`](https://github.com/SimVascular/svFSIplus), which is 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 the high-fidelity multi-physics solver [`svFSIplus`](https://github.com/SimVascular/svFSIplus), which is 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]. The automatic conversion of arbitrary patient-specific anatomies to zero-dimensional simulations is possible due to the modular nature of `svZeroDSolver`. @@ -85,6 +89,13 @@ Together, these graphical interfaces make `svZeroDSolver` intuitive for a wide r 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. +While there are other open-source projects that provide the functionality for cardiovascular flow modeling, and specifically zero-dimensional flow modeling, `svZeroDSolver` has several features that distinguish it from previous work. +For one, prior packages have primarily focused on multi-physics finite element modeling for cardiovascular biomechanics [@crimson2021; @Zhu2022; @AFRICA2024109039; @Hirschvogel2024]. +While these projects allow the implementation of simple zero-dimensional models, usually as boundary conditions to three-dimensional models, the primary focus is on the modeling of full three-dimensional fluid and tissue mechanics. +There are also packages aimed at reduced-order modeling for cardiovascular flows [@Agdestein2018]. In particular, the `SimVascular` project includes `svOneDSolver` for the purpose of one-dimensional blood flow modeling. +In contrast to these packages, the purpose of `svZeroDSolver` is to provide a modular framework specifically for simulating zero-dimensional flows in a variety of simple and complex anatomies -- by leveraging the modular nature of the code. +The unique features listed above allow the use of `svZeroDSolver` both as a stand-along zero-dimensional flow solver for unique and patient-specific anatomies, as well as in conjunction with the aforementioned multi-physics solvers as boundary conditions, for parameters estimation and uncertainty quantification, or even as an instructional tool using its graphical interfaces. + ![Various zero-dimensional "blocks" included in `svZeroDSolver` at the time of writing.\label{fig:blocks}](blocks.png){ width=80% } # Software details @@ -101,7 +112,7 @@ 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 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 two-sided versions of windkessel and coronary boundary conditions that allow a user to build closed-loop circulation models [@Vignon-Clementel2006;@Kim2009;@kimcoronary;@Mirramezani2019;@menon2023predictors;@menon2024personalized]. +`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 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 two-sided versions of windkessel and coronary boundary conditions that allow a user to build closed-loop circulation models [@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 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. diff --git a/paper/paper.pdf b/paper/paper.pdf index 4f33f4c79..5c8d1494c 100644 Binary files a/paper/paper.pdf and b/paper/paper.pdf differ diff --git a/src/solve/SimulationParameters.cpp b/src/solve/SimulationParameters.cpp index a8a541332..b2a5e33ec 100644 --- a/src/solve/SimulationParameters.cpp +++ b/src/solve/SimulationParameters.cpp @@ -444,8 +444,8 @@ void create_external_coupling( (connected_type == "BloodVessel")) { connections.push_back({connected_block, coupling_name}); } // connected_type == "ClosedLoopRCR" - } // coupling_loc - } // for (size_t i = 0; i < coupling_configs.length(); i++) + } // coupling_loc + } // for (size_t i = 0; i < coupling_configs.length(); i++) } void create_junctions(