Program Listing for File reference_flow.h¶
↰ Return to documentation for file (include/immersx/vascularization/reference_flow.h)
// Copyright (C) 2026 by Luca Heltai
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
#ifndef immersx_vascularization_reference_flow_h
#define immersx_vascularization_reference_flow_h
#include <deal.II/base/mpi.h>
#include <immersx/vascularization/network.h>
namespace ImmersX::Vascularization
{
struct ReferenceConditions
{
std::map<Id, double> pressures;
std::map<Id, double> inflows;
std::map<Id, std::pair<double, double>> robin = {};
};
struct ReferenceParameters
{
void
validate() const;
unsigned int maximum_iterations = 10000;
double linear_relative_tolerance = 1.e-12;
double conservation_relative_tolerance = 1.e-9;
double absolute_flow_tolerance = 0.;
};
struct VesselReference
{
double resistance = 0.;
double flow = 0.;
std::array<double, 2> wall_shear{{0., 0.}};
};
struct TerritoryReference
{
double flow = 0.;
double flow_per_demand = 0.;
double arterial_flow = 0., portal_flow = 0., venous_flow = 0.;
double compartment_pressure = std::numeric_limits<double>::quiet_NaN();
};
struct ReferenceResult
{
ValidationReport validation;
std::map<Id, double> pressures;
std::map<Id, VesselReference> vessels;
std::map<Id, TerritoryReference> territories;
std::map<Id, double> terminal_outflows;
std::map<Id, double> boundary_inflows;
double dissipated_power = 0.;
double maximum_flow_defect = 0.;
double relative_flow_defect = 0.;
double boundary_flow_balance = 0.;
double linear_residual = 0.;
unsigned int iterations = 0;
};
ReferenceResult
solve_reference(const NetworkData &network,
const std::vector<TerminalPair> &pairs,
const ReferenceConditions &conditions,
const ReferenceParameters ¶meters,
MPI_Comm communicator);
ReferenceResult
solve_reference(const NetworkData &network,
const std::vector<TerminalPair> &pairs,
const std::vector<TerminalTriplet> &triplets,
const ReferenceConditions &conditions,
const ReferenceParameters ¶meters,
MPI_Comm communicator);
ReferenceConditions
demand_flow_conditions(const NetworkData &network,
const std::map<Id, double> &port_pressures,
double total_flow,
const std::vector<Id> &selected_terminals,
MPI_Comm communicator);
ReferenceConditions
demand_flow_conditions(const NetworkData &network,
const std::map<Id, double> &port_pressures,
const std::map<System, double> &total_flows,
const std::vector<Id> &selected_terminals,
MPI_Comm communicator);
double
reference_pressure(const NetworkData &network,
const ReferenceResult &reference,
Id vessel,
double coordinate);
} // namespace ImmersX::Vascularization
#endif