DOI: 10.5281/zenodo.15588567
title: Supplemental Data: Rapid model-guided design of organ-scale synthetic vasculature for biomanufacturing

description: Supplemental Dataset: Synthetic Vascular Model Generation, Multiscale CFD Simulation, and In Vitro Viability Analysis

This repository accompanies the article “Rapid, model-driven design of organ-scale vascular networks for perfused bioprinted tissues.”It contains every geometry, computational-fluid-dynamics (CFD) result, image analysis and post-processing script required to reproduce the figures in the main text and Supplementary Information.  The data trace the complete workflow—from algorithmic vascular-tree construction with svv, through 0-D/3-D CFD analysis, to quantitative figure generation—and offer ready-to-use models for new design studies.

Table of Contents

1. Data & File Structure2. Materials & Methods3. Sharing & Access  4. Code & Software

Data & File Structure 



The archive unpacks into a single root folder:Selected folders a files (input files and python code) are shown here:adj6152_data/    Main/        Main Figures/            Figure 1/                cube/                heart/                Figure_1c.py                Figure_1d.py                Figure_1e.py                Figure_1f.py                Figure_1g.py            Figure 2/                Fig. 2C/                Fig. 2F/                Fig. 2H-I/            Figure 3/                anulus_0d_simulation/                    timeseries/                    timeseries_for_flow_gif/                    timeseries_for_pressure_gif/                    timeseries_for_wss_gif/                    inflow.flow                    plot_0d_results_at_slices.py                    plot_0d_results_to_3d.py                    run.py                    solver_0d.in                    wave.flow                cube_0d_simulation/                    timeseries/                    timeseries_for_flow_gif/                    timeseries_for_pressure_gif/                    timeseries_for_wss_gif/                    inflow.flow                    plot_0d_results_at_slices.py                    plot_0d_results_to_3d.py                    run.py                    solver_0d.in                    wave.flow                gyrus_0d_simulation/                    timeseries/                    timeseries_for_flow_gif/                    timeseries_for_pressure_gif/                    timeseries_for_wss_gif/                    inflow.flow                    plot_0d_results_at_slices.py                    plot_0d_results_to_3d.py                    run.py                    solver_0d.in                    wave.flow                heart_0d_simulation/                    timeseries/                    timeseries_for_flow_gif/                    timeseries_for_pressure_gif/                    timeseries_for_wss_gif/                    inflow.flow                    plot_0d_results_at_slices.py                    plot_0d_results_to_3d.py                    run.py                    solver_0d.in                    wave.flow            Figure 4/                Figure (Data)/                    Fig 4.A/                        Model 10000/                        Model 100000/                        Model 1000000/                    Fig 4.B/                        Model 10000/                        Model 100000/                        Model 1000000/                    Fig 4.C - Biventricular Model/                        Processed/                        Raw/                    Fig 4.D - Annulus Model/                        Processed/                        Raw/            Figure 5/                Figure (Data)/                    Fig. 5D-F/                        raw data.zip                    Fig. 5G-J/                        Vessel_Printing_65/                            Images/                            Meshes/                            Models/                            Paths/                            ROMSimulations/                            Segmentations/                            Simulations/                                cross_sections/                                cross_sections_2/                                cross_sections_3/                                cross_sections_12/                                cross_sections_22/                                post_results_1/                                post_results_2/                                pulsatile_deformable_wall/                                pulsatile_elastic_wall/                                pulsatile_flow/                                centerlines.txt                                color_branches.py                                create_graph.py                                read_centerlines.py                                slice_data.py                                visualize_deformation.py                            svFSI/                            inflow.flow                            simvascular.proj                        multimaterial_test_network_65_vessels (1).txt                    Fig. 5K/                        Photos/                    Fig. 5L/                        Processes/                    Fig. 5M/                        Analysis/                        Data (Raw, Processed)/                            Annulus/                                Raw, Reconstructed/                            Annulus_Vasculature/                            Photos/                            Vasculature/                                Vascular 1/                                    Raw/                                    Reconstructed/                                Vascular 2/                    Fig. 5O/                        Photos/                        Renderings/                    Fig. 5P/                        Fig. 5P i/                            Photos/                        Fig. 5P ii/                            Analysis/                            MATLAB/                            Processed Data/                        Fig. 5P iii/                            Analysis/                        Fig. 5P iv/                            Analysis/                        Fig. 5P v/                            Analysis/                            MATLAB/                            Processed Data/                                Re-Scaled Data (per cell counts)/                        Fig. 5P vi/                            Analysis/                            MATLAB/                            Processed Data/    Supplement Materials/        Supplementary Figures/            Fig. S1/                cube_opposite_diagonal_source_sink/                cube_same_side_diagonal_source_sink/                timeseries/                timeseries_for_flow_gif/                timeseries_for_pressure_gif/                timeseries_for_wss_gif/                inflow.flow                plot_0d_results_to_3d.py                README.txt                SF2.py                solver_0d.in            Fig. S2/                svcco/                array_vs_linked_list.py            Fig. S3/                BFGS/                COBYLA/                L-BFGS-B/                Nelder-Mead/                Newton-CG/                Powell/                SLSQP/                TNC/                trust-ncg/                get_data.py                test_optimizers.py            Fig. S4/                svcco/                global_pu_time.py                implicit_accuracy_number_patches.py                implicit_condition_number.py            Fig. S5/                brain_reconstructions/                brain_regions/                engineering_shapes/                svcco/                figure_code.py                figure_writer.py            Fig. S6/                svcco/                corner_recovery.py                patch_functions.py            Fig. S7/                svcco/                point_enclosure.py            Fig. S8/                brain_data/                convex_data/                svcco/                build_times_figure.py            Fig. S9/                Anterior Commissure/                    output/                    generate_tree.py                Branchium of Left Inferior Colliculus/                    output/                    generate_tree.py                Commissure of Fornix of Forebrain/                    output/                    generate_tree.py                Fourth Ventricle/                    output/                    generate_tree.py                Hypothalamus/                    output/                    generate_tree.py                Lamina Terminalis/                    output/                    generate_tree.py                Left Globus Pallidus/                    output/                    generate_tree.py                Left Inferior Frontal Gyrus/                    output/                    generate_tree.py                Left Internal Capsule/                    output/                    generate_tree.py                Left Olfactory Tract/                    output/                    generate_tree.py                Left Superior Frontal Gyrus/                    output/                    generate_tree.py                Medulla Oblongata/                    output/                    generate_tree.py                Midbrain/                    output/                    generate_tree.py                Right Inferior Frontal Gyrus/                    output/                    generate_tree.py                Right Internal Capsule/                    output/                    generate_tree.py                Right Olfactory Tract/                    output/                    generate_tree.py                Right Putamen/                    output/                    generate_tree.py                Right Stria Medullaris of Thalamus/                    output/                    generate_tree.py                Right Superior Fronal Gyrus/                    output/                    generate_tree.py                Third ventricle/                    output/                    generate_tree.py            Fig. S10/            Fig. S11/                Code/                    S_Sample_Code_PIV.zip            Fig. S12/                Vessel_Printing_65/                            Images/                            Meshes/                            Models/                            Paths/                            ROMSimulations/                            Segmentations/                            Simulations/                                cross_sections/                                cross_sections_2/                                cross_sections_3/                                cross_sections_12/                                cross_sections_22/                                post_results_1/                                post_results_2/                                pulsatile_deformable_wall/                                pulsatile_elastic_wall/                                pulsatile_flow/                                centerlines.txt                                color_branches.py                                create_graph.py                                read_centerlines.py                                slice_data.py                                visualize_deformation.py                            svFSI/                            inflow.flow                            simvascular.proj            Fig. S13/                Analysis/                Raw Data/            Fig. S14/                Other Files/                Photos/            Fig. S15/                Fig. S15 A/                    Analysis/                        Plots/                    Processed Data/                    Raw Data/                Fig. S15 C/        svcco/            docs/            examples/            scripts/            sv_interface/            svcco/            tests/        Supplementary Videos/            S Video 1/                svcco/                arbitrary_trees/            S Video 2/                anulus_0d_simulation/                    timeseries/                    timeseries_for_flow_gif/                    timeseries_for_pressure_gif/                    timeseries_for_wss_gif/                    inflow.flow                    plot_0d_results_at_slices.py                    plot_0d_results_to_3d.py                    run.py                    solver_0d.in                    wave.flow                cube_0d_simulation/                    timeseries/                    timeseries_for_flow_gif/                    timeseries_for_pressure_gif/                    timeseries_for_wss_gif/                    inflow.flow                    plot_0d_results_at_slices.py                    plot_0d_results_to_3d.py                    run.py                    solver_0d.in                    wave.flow                gyrus_0d_simulation/                    timeseries/                    timeseries_for_flow_gif/                    timeseries_for_pressure_gif/                    timeseries_for_wss_gif/                    inflow.flow                    plot_0d_results_at_slices.py                    plot_0d_results_to_3d.py                    run.py                    solver_0d.in                    wave.flow                heart_0d_simulation/                    timeseries/                    timeseries_for_flow_gif/                    timeseries_for_pressure_gif/                    timeseries_for_wss_gif/                    inflow.flow                    plot_0d_results_at_slices.py                    plot_0d_results_to_3d.py                    run.py                    solver_0d.in                    wave.flow


Inside each Figure directory




Suffix
File type
Description


------------------------------------------------------------
------------------------------------------------------------
------------------------------------------------------------


.vtp
VTK **PolyData**
Perfused tissue surface or vascular tree, Visualize with PyVista or Paraview


.vtu
VTK **Unstructured Grid**
3-D CFD solution fields (velocity, pressure, wall shear, etc.) Visualize with PyVista or Paraview


.npy
NumPy array
Derived metrics (e.g., mean inter-vascular distance, resistances)


.flow
ASCII
Inlet flow waveform for SimVascular 3-D/0-D solver


.pkl
Pickle
Tree connectivity tables (nodes & edges) & data


.py
Python script
Figure-generation & post-processing code


.csv / .bmp
CSV / image
Processed viability assays or reconstructed micro-CT slices




Relationships & Conventions



All companion files share a common stem (e.g., tree_999.vtu, tree_999_metrics.npy).  

Units: mm (geometry), cm³ s⁻¹ (flow), dyn cm⁻² (pressure) unless noted.  

Missing values are encoded as nan.  

Live/dead assay CSVs give intensity-normalised counts; group statistics live in Analysis/ subfolders.
description: Materials and Methods

Breif Overviews of the conditions and materials for data collection. 

3D Bioprinting, Perfusion, and Viability

FRESH Preparation

FRESH support bath was generated using a complex coacervation method as previously described (Hudson et al.). The bath was prepared by dissolving 3.0 % (w/v) gelatin type B (Fisher Scientific, G7‑500), 0.3 % (w/v) gum arabic (Sigma‑Aldrich, G9752) and 0.125 % (w/v) Pluronic® F‑127 (Sigma‑Aldrich, P2443) in 50 % (v/v) ethanol at 45 °C (1 L total volume). The pH was adjusted to 5.65 with 1 M HCl and the mixture stirred overnight at room temperature. The slurry was centrifuged (300 × g, 2 min), the ethanol supernatant discarded, and the pellet washed three times with de‑ionised water. After the final wash the supernatant was replaced with 50 mM HEPES (Corning, 60‑034‑RO) buffered to pH 7.4.

For printing, the uncompacted support bath was degassed for 30 min and centrifuged (2000 × g, 5 min) to compact the particles. The compacted slurry was transferred into the desired print container. A bio‑ink of 23 mg mL⁻¹ acidified collagen type I was obtained by diluting a 35 mg mL⁻¹ stock (LifeInk 240, Advanced Biomatrix, 5267) 2:1 with sterile water. FRESH printing was carried out on a custom 3‑axis bioprinter (Aerotech) fitted with a 30 G needle (150 µm ID, Jensen Global JG30‑0.5HPX) and a 2.5 mL glass gastight syringe (Hamilton 81401).

Planar Dye Perfusion

A peristaltic pump (Ismatec, EW‑95663‑34) equipped with 1.42 mm ID peristaltic tubing (Cole‑Parmer, EW‑95663‑34) and 1/16 in ID silicone tubing (Cole‑Parmer, EW‑95802‑02) was connected to the bioreactor inlet; the outlet tubing returned to the reservoir. Black food dye (McCormick 052100581873) was perfused at 250 µL min⁻¹ through the collagen FRESH‑printed vascular network housed in a custom bioreactor, following Hudson et al.

3D‑Print Code Generation for FRESH

The simulated vascular network was Boolean‑subtracted from a solid tissue block in Autodesk Fusion 360 to generate a perfusable cavity. STL files were sliced in Ultimaker Cura (layer height 60 µm; print speed 15–50 mm s⁻¹; 3 perimeters; 3 top/bottom layers; 35 % infill; 95 % extrusion multiplier; 0.1 mm retraction). The resulting G‑code was pasted into an Aerotech BASIC script for execution on the bioprinter.

OCT Imaging and 3 D Gauging

OCT was performed as described by Tashman et al. 2023. 3‑D volumes were acquired with a Thorlabs Vega 1300 nm system (VEG210C1) and OCT‑LK4 objective, using the highest signal settings that avoided artefacts. Stacks were exported as 32‑bit TIFF, background‑subtracted and denoised in Fiji/ImageJ, then segmented in 3D Slicer using the Grow from seeds tool. The segmented STL was compared to the original CAD STL in CloudCompare; distance deviations were visualised as false‑colour maps and histograms.

Bright‑ and Dark‑Field Imaging of FRESH Prints

Bright‑/dark‑field images were captured with a Leica M165 FC stereomicroscope (1 × objective) and a Prime 95B camera (Photometrics) controlled by µManager 2.0. Images were saved as TIFF for analysis.

Granular Hydrogel Preparation

Both support matrix and ink were made from Carbopol® 974P NF (Lubrizol CBP1053H) at 0.2 wt %. Carbopol (2 g) and NaOH (0.8 g) were dispersed in 100 mL water and mixed at 1500–2000 rpm in a FlackTek SpeedMixer for 2 min, then diluted 10 × with water and stirred overnight (685–950 rpm). For visualisation, Pearl Ex Magenta pigment (2 wt %) was added to the ink formulation. Clear Carbopol support was transferred to an acrylic box; pigmented ink was loaded into a 5 mL syringe (Hamilton 81520) fitted with a 30 G stainless‑steel tip (Nordson 7018433, 0.15 mm ID).

G‑code Generation for Granular Hydrogel Printing

3‑D coordinates exported from SimVascular were converted to G‑code with a custom Python script and then to Aerobasic for an Aerotech A3200 controller driving a custom three‑axis printer with four print‑heads. Printed networks were photographed with a Canon EOS 5D Mark IV and 180 mm macro lens. The network shown in Figure 5J was printed at 0.2 wt % Carbopol, scaled 1.5 ×.

Fabrication of a 2.5‑D Perfusable Model for PIV

The CFD design was flattened to a 2.5‑D geometry and fabricated via sacrificial writing into functional tissue (SWIFT). A PDMS support bath (Sylgard SE1700 : 527 : 184 in 2 : 1 : 1 w/w/w) was degassed and loaded into a rectangular mould. Hydrophobic fumed‑silica ink (6 % w/v TS‑720 in mineral oil) was extruded with a custom printer following G‑code. Inlet/outlet ports were created with 22 G pins. The construct was cured 1 h at 60 °C, mineral oil removed with xylene flush, and channels rinsed with PBS before perfusing 2 % FITC‑dextran. Three identical models were produced.

Particle Imaging Velocimetry (PIV)

Tracer fluid (water : glycerol : 10 µm beads, 25:50:3 by volume; final bead concentration ≈ 1.4 × 10⁵ mL⁻¹) was homogenised in a SpeedMixer (2500 rpm, 30 s). The channel network was cleared at 200 µL min⁻¹, then measured at 50 µL min⁻¹. Videos were acquired at 20 Hz with a Nikon Ts‑2R epifluorescence microscope and sCMOS camera (Teledyne Photometrics Kinetix). Frames were differenced, Gaussian‑filtered, and processed with trackpy to obtain velocity fields. Flow rates were calculated by fitting parabolic profiles (Hagen–Poiseuille) as in Du et al. 2023.

Synthesis and Characterisation of Alginate Methacrylate

Alginate methacrylate was synthesised by reacting 2 % (w/v) alginate with methacrylic anhydride at pH 7 for 72 h, precipitating in cold ethanol, dialysing (14 kDa MWCO, 3 d) and lyophilising. Vinyl substitution was confirmed by ¹H NMR (Bruker Avance Neo 500 MHz, 256 scans) showing Ha/Hb signals at 5.75–6.25 ppm.

Cell Culture

HEK293 cells (passages 8–10) were maintained in DMEM + 10 % FBS + 1 × pen‑strep. Cells were sub‑cultured at 70–90 % confluence using TrypLE Express, pelleted (300 × g, 3 min) and counted for bioprinting.

Bioprinting of Acellular Vascular Trees and Perfusion Assay

A 4 % (w/v) alginate‑methacrylate / 2 % Carbopol 971P NF / 0.1 % LAP support matrix was prepared and degassed. Ten‑vessel vascular networks were printed into 25 mL matrices in 25 × 25 × 30 mm acrylic containers using sacrificial 2 % Carbopol + 0.1 % FITC‑dextran + 5 % magenta UV powder ink (31 G nozzle, 8 psi). Constructs were photocross‑linked (405 nm, 1 min), channels cleared with PBS, and perfused with 0.5 % FITC‑dextran at 0–1000 µL min⁻¹ via a Masterflex Ismatec Reglo pump.

Nested Embedded 3‑D Bioprinting

Perfused models employed a support matrix of 0.7 % alginate‑MA / 1.4 % Carbopol / 0.5 % PEGDA (20 kDa) / 0.1 % LAP in Ca²⁺‑free PBS. A cell‑laden bio‑ink (3.2 % alginate‑MA / 2.4 % Carbopol / 2 % PEGDA / 0.1 % LAP, HEK293 1 × 10⁷ cells mL⁻¹) was printed as a concentric‑ring annulus (outer Ø 20 mm, inner Ø 8 mm, 18 mm height). A FRESH‑based sacrificial ink was then printed to generate a 25‑vessel network. Constructs were cross‑linked (405 nm, 2 min) and perfused with DMEM +/+ (1000 µL min⁻¹) for 7 d using a custom housing. Non‑perfused controls were cultured statically in DMEM +/+ or PBS.

Viability Assay

After 7 d, constructs were bisected and stained with LIVE/DEAD (Calcein‑AM / EthD‑1). Confocal z‑stacks (Zeiss LSM 980) were processed to compute viability maps and radial distributions using custom MATLAB scripts (details in Supplementary Figure S15). Viability was calculated as L / (L + D) using cell‑area normalisation (mean live cell area ≈ 207.9 µm²; dead ≈ 220.4 µm²).

Micro‑Computed Tomography (µCT)

A 20 % (w/v) BaSO₄ / 2 % Carbopol ink was printed into 1 % Carbopol support and imaged on a Bruker SkyScan 1276 (85 kV, 200 µA, 0.4° rotation, 1 mm Al filter). STLs were reconstructed with NRecon, exported from 3D Slicer, and Hausdorff distances calculated in MeshLab.

Confocal Microscopy

LIVE/DEAD and evacuated channels were imaged on a Zeiss LSM 980 (1024² pixels). Imaging volumes: viability, 3394 × 3394 × 515 µm (z‑step = 10 µm, tile scan with 10 % overlap); evacuated channels, 5656 × 5656 × 4335 µm (z‑step = 15 µm). Analyses were performed on summed z‑projections.

Statistical Analysis

Statistics were performed in GraphPad Prism 9.6.1 and scipy 1.3.1. Unpaired Welch‑corrected t‑tests were used for multiple comparisons (α = 0.05). KL‑divergence was calculated as described previously; significance: p < 0.05 *, < 0.01 **, < 0.001 ***.

Synthetic Vasculature Performance Testing

Performance benchmarks were executed on a Dell Precision 7920 (Windows 10, Intel® Xeon® Gold 5220, 2.2 GHz). Serial CCO generation timing followed the benchmark of Cury et al. 2021 for direct comparison.
description: Sharing & Access 




Resource
Link / Notes


---------------------------------------------------------------
---------------------------------------------------------------


Primary code base
Zenodo DOI: SVV


Raw Zeiss `.czi` images
Available within corresponding figure folders


svMultiPhysics Solver for 3D Fluids & FSI
SimVascular/svMultiPhysics


svZeroDSolver Solver for 0D ROM Fluid Problems
SimVascular/svZeroDSolver


SimVascular Modeling and Physics GUI
SimVascular/SimVascular
description: Code & Software Notes

svcco vascular-construction library

The svcco folders included herein provide partial builds of the svv package that examine performance intermediates that cannot be done through the complete package (since it is production-line code that would otherwise be slowed down by storing or evaluating developer metrics) but may be necessary for rebuilding figures that support claims made about software architecture decisions. The requirements for properly using this code is listed below:



Language   : Python >=3.9  

Location   : Supplement Materials/.../svcco/

Tested with  : SimVascular 22.07.20, VTK 9.1, NumPy 1.24, SciPy 1.10  


Figure-generation scripts



Within applicable figure folders the python scripts used to generate the figures along with all relevant data are provided such that running the script can reproduce the figure component. This includes archived versions of the vascularization code as (e.g. Figure_1c.py, mesh_vs_patch.py, …)  

Require Matplotlib 3.8 and Python >=3.9


MATLAB analysis

Some image and biological analysis involves the use of MATLAB such as Figure 5 live/dead quantification (e.g. Fig. 5P ii/MATLAB Code/) which has been run with MATLAB R2023a. 
description: Notes: Anatomic Models



Brain tissue anatomic models obtained from The Database Center for Life Science, BodyParts3D/Anatomography under the license CC-BY SA 2.1J