Sign in

    zhaoyuanjuns/moonbit_extractor/process does not have a README file

    BalanceLedger

    pub(all) struct BalanceLedger {
    entries : Array[StreamBalance]
    total_carrier_error : Double
    total_solvent_error : Double
    total_solute_error : Double
    maximum_relative_error : Double
    closed : Bool
    } derive(Eq, ToJson,
    Debug
    )

    ComponentLedger

    pub(all) struct ComponentLedger {
    component : String
    feed : Double
    product : Double
    waste : Double
    recovered : Double
    recovery : Double
    closure_error : Double
    } derive(Eq, ToJson,
    Debug
    )

    EnvelopeSummary

    pub(all) struct EnvelopeSummary {
    evaluated : Int
    feasible : Int
    infeasible : Int
    minimum_recovery : Double
    maximum_recovery : Double
    average_recovery : Double
    limiting_scenario : String
    } derive(Eq, ToJson,
    Debug
    )

    EquipmentKind

    pub(all) enum EquipmentKind {
    Mixer
    Settler
    ExtractorColumn
    HeatExchanger
    Pump
    StorageTank
    } derive(Eq, ToJson,
    Debug
    )

    Equipment categories used for preliminary process sizing.

    EquipmentSizing

    pub(all) struct EquipmentSizing {
    name : String
    kind : EquipmentKind
    working_volume : Double
    design_volume : Double
    cross_section_area : Double
    diameter : Double
    heat_transfer_area : Double
    pump_head : Double
    warnings : Array[String]
    } derive(Eq, ToJson,
    Debug
    )

    EquipmentSpec

    pub(all) struct EquipmentSpec {
    name : String
    kind : EquipmentKind
    design_flow : Double
    design_residence_time : Double
    design_pressure : Double
    design_temperature : Double
    safety_factor : Double
    } derive(Eq, ToJson,
    Debug
    )

    EquipmentSpec::new

    fn EquipmentSpec::new(name~ : String, kind~ : EquipmentKind, design_flow~ : Double, design_residence_time~ : Double, design_pressure~ : Double, design_temperature~ : Double, safety_factor? : Double) -> EquipmentSpec raise
    ExtractionError

    Flowsheet

    pub(all) struct Flowsheet {
    name : String
    steps : Array[ProcessStep]
    } derive(Eq, ToJson,
    Debug
    )

    Flowsheet::add

    fn Flowsheet::add(self : Flowsheet, step : ProcessStep) -> Flowsheet

    Flowsheet::step_count

    fn Flowsheet::step_count(self : Flowsheet) -> Int

    Flowsheet::steps

    fn Flowsheet::steps(self : Flowsheet) -> Array[ProcessStep]

    FlowsheetResult

    pub(all) struct FlowsheetResult {
    name : String
    inlet : ProcessStream
    outlet : ProcessStream
    steps : Array[StepResult]
    total_residual : Double
    maximum_step_residual : Double
    passed : Bool
    } derive(Eq, ToJson,
    Debug
    )

    HeatExchangerSizing

    pub(all) struct HeatExchangerSizing {
    area : Double
    log_mean_temperature_difference : Double
    duty : Double
    hot_outlet_temperature : Double
    cold_outlet_temperature : Double
    pinch_temperature_difference : Double
    } derive(Eq, ToJson,
    Debug
    )

    LedgerEntry

    pub(all) struct LedgerEntry {
    name : String
    inlet : Double
    outlet : Double
    generated : Double
    consumed : Double
    residual : Double
    } derive(Eq, ToJson,
    Debug
    )

    MixerSizing

    pub(all) struct MixerSizing {
    volume : Double
    power : Double
    power_per_volume : Double
    tip_speed : Double
    torque : Double
    } derive(Eq, ToJson,
    Debug
    )

    OperatingLimit

    pub(all) struct OperatingLimit {
    name : String
    lower : Double
    upper : Double
    unit : String
    critical : Bool
    } derive(Eq, ToJson,
    Debug
    )

    Operating-envelope utilities for translating process limits into executable checks and scenario summaries.

    OperatingLimit::contains

    fn OperatingLimit::contains(self : OperatingLimit, value : Double) -> Bool

    OperatingLimit::new

    fn OperatingLimit::new(name~ : String, lower~ : Double, upper~ : Double, unit? : String, critical? : Bool) -> OperatingLimit raise
    ExtractionError

    OperatingLimit::normalized_distance

    fn OperatingLimit::normalized_distance(self : OperatingLimit, value : Double) -> Double

    OperatingLimit::to_text

    fn OperatingLimit::to_text(self : OperatingLimit) -> String

    OperatingPoint

    pub(all) struct OperatingPoint {
    name : String
    values : Array[Double]
    feasible : Bool
    violations : Array[String]
    distance_to_limit : Double
    } derive(Eq, ToJson,
    Debug
    )

    OperatingPoint::critical

    fn OperatingPoint::critical(self : OperatingPoint, limits : ArrayView[OperatingLimit]) -> Bool

    OperatingPoint::margin_vector

    fn OperatingPoint::margin_vector(self : OperatingPoint, limits : ArrayView[OperatingLimit]) -> Array[Double]

    OperatingWindow

    pub(all) struct OperatingWindow {
    minimum_flow : Double
    maximum_flow : Double
    minimum_concentration : Double
    maximum_concentration : Double
    minimum_distribution : Double
    maximum_distribution : Double
    minimum_recovery : Double
    maximum_recovery : Double
    } derive(Eq, ToJson,
    Debug
    )

    Operating-window validation keeps a calculation inside a declared process envelope.

    OperatingWindow::contains

    fn OperatingWindow::contains(self : OperatingWindow, flow : Double, concentration : Double, distribution : Double, recovery : Double) -> Bool

    OperatingWindow::new

    fn OperatingWindow::new(flow~ : Range, concentration~ : Range, distribution~ : Range, recovery~ : Range) -> OperatingWindow

    OperatingWindow::validate

    fn OperatingWindow::validate(self : OperatingWindow, flow : Double, concentration : Double, distribution : Double, recovery : Double) -> Array[Violation]

    OperationKind

    pub(all) enum OperationKind {
    Contact(distribution~ : Double)
    Heat(outlet_temperature_kelvin~ : Double)
    Cool(outlet_temperature_kelvin~ : Double)
    PressureDrop(outlet_pressure_pascal~ : Double)
    Split(fraction~ : Double)
    HoldUp(residence_seconds~ : Double)
    } derive(Eq, ToJson,
    Debug
    )

    ProcessStep

    pub(all) struct ProcessStep {
    name : String
    kind : OperationKind
    } derive(Eq, ToJson,
    Debug
    )

    ProcessStream

    pub(all) struct ProcessStream {
    name : String
    carrier_flow : Double
    solvent_flow : Double
    carrier_concentration : Double
    solvent_concentration : Double
    temperature :
    Temperature

    pressure :
    Pressure

    } derive(Eq, ToJson,
    Debug
    )

    A stream state used by sequential flowsheet calculations.

    ProcessStream::carrier_solute

    fn ProcessStream::carrier_solute(self : ProcessStream) -> Double

    ProcessStream::name

    fn ProcessStream::name(self : ProcessStream) -> String

    ProcessStream::new

    fn ProcessStream::new(name~ : String, carrier_flow~ : Double, solvent_flow~ : Double, carrier_concentration~ : Double, solvent_concentration? : Double, temperature~ :
    Temperature
    , pressure~ :
    Pressure
    ) -> ProcessStream raise
    ExtractionError

    ProcessStream::overall_concentration

    fn ProcessStream::overall_concentration(self : ProcessStream) -> Double

    ProcessStream::solvent_solute

    fn ProcessStream::solvent_solute(self : ProcessStream) -> Double

    ProcessStream::total_flow

    fn ProcessStream::total_flow(self : ProcessStream) -> Double

    ProcessStream::total_solute

    fn ProcessStream::total_solute(self : ProcessStream) -> Double

    ProcessStream::with_name

    fn ProcessStream::with_name(self : ProcessStream, name : String) -> ProcessStream

    ProcessStream::with_pressure

    ProcessStream::with_temperature

    PumpSizing

    pub(all) struct PumpSizing {
    head : Double
    hydraulic_power : Double
    shaft_power : Double
    efficiency : Double
    pressure_rise : Double
    } derive(Eq, ToJson,
    Debug
    )

    Range

    pub(all) struct Range {
    lower : Double
    upper : Double
    } derive(Eq, ToJson,
    Debug
    )

    Range::new

    fn Range::new(lower~ : Double, upper~ : Double) -> Range raise
    ExtractionError

    RecycleResult

    pub(all) struct RecycleResult {
    converged_stream : ProcessStream
    iterations : Int
    residual : Double
    converged : Bool
    } derive(Eq, ToJson,
    Debug
    )

    A recycle convergence result for a single recycle fraction.

    SafetyFactor

    pub(all) struct SafetyFactor {
    nominal : Double
    factor : Double
    design : Double
    } derive(Eq, ToJson,
    Debug
    )

    ScenarioPoint

    pub(all) struct ScenarioPoint {
    name : String
    temperature : Double
    pressure : Double
    flow : Double
    solvent_ratio : Double
    recovery : Double
    feasible : Bool
    } derive(Eq, ToJson,
    Debug
    )

    SettlerSizing

    pub(all) struct SettlerSizing {
    volume : Double
    interface_area : Double
    length : Double
    width : Double
    height : Double
    overflow_rate : Double
    } derive(Eq, ToJson,
    Debug
    )

    StepResult

    pub(all) struct StepResult {
    step_name : String
    inlet : ProcessStream
    outlet : ProcessStream
    residual : Double
    duty : Double
    warning : String
    } derive(Eq, ToJson,
    Debug
    )

    StreamBalance

    pub(all) struct StreamBalance {
    stream : String
    carrier_in : Double
    carrier_out : Double
    solvent_in : Double
    solvent_out : Double
    solute_in : Double
    solute_out : Double
    carrier_error : Double
    solvent_error : Double
    solute_error : Double
    closed : Bool
    } derive(Eq, ToJson,
    Debug
    )

    Mass-balance closure and utility accounting for process streams.

    StreamComparison

    pub(all) struct StreamComparison {
    carrier_flow_change : Double
    solvent_flow_change : Double
    solute_change : Double
    temperature_change : Double
    pressure_change : Double
    concentration_change : Double
    } derive(Eq, ToJson,
    Debug
    )

    StreamStatistics

    pub(all) struct StreamStatistics {
    stream : String
    total_flow : Double
    solute_flow : Double
    solute_fraction : Double
    concentration_ratio : Double
    thermal_content : Double
    pressure_energy : Double
    } derive(Eq, ToJson,
    Debug
    )

    UtilityAllocation

    pub(all) struct UtilityAllocation {
    node : String
    requested : Double
    allocated : Double
    curtailed : Double
    fraction : Double
    served : Bool
    } derive(Eq, ToJson,
    Debug
    )

    UtilityNetwork

    pub(all) struct UtilityNetwork {
    kind : String
    nodes : Array[UtilityNode]
    total_demand : Double
    total_capacity : Double
    utilization : Double
    feasible : Bool
    curtailed_demand : Double
    } derive(Eq, ToJson,
    Debug
    )

    UtilityNode

    pub(all) struct UtilityNode {
    name : String
    demand : Double
    capacity : Double
    priority : Int
    available : Bool
    } derive(Eq, ToJson,
    Debug
    )

    Violation

    pub(all) enum Violation {
    BelowMinimum(name~ : String, value~ : Double, minimum~ : Double)
    AboveMaximum(name~ : String, value~ : Double, maximum~ : Double)
    } derive(Eq, ToJson,
    Debug
    )

    allocate_utility

    fn allocate_utility(network : UtilityNetwork) -> Array[UtilityAllocation]

    allocations_curtailed

    fn allocations_curtailed(allocations : ArrayView[UtilityAllocation]) -> Double

    allocations_failed_nodes

    fn allocations_failed_nodes(allocations : ArrayView[UtilityAllocation]) -> Array[String]

    allocations_service_rate

    fn allocations_service_rate(allocations : ArrayView[UtilityAllocation]) -> Double

    allocations_total

    fn allocations_total(allocations : ArrayView[UtilityAllocation]) -> Double

    apply_safety_factor

    fn apply_safety_factor(nominal~ : Double, factor~ : Double) -> SafetyFactor raise
    ExtractionError

    balance_error_vector

    fn balance_error_vector(ledger : BalanceLedger) -> Array[Double]

    balance_ledger

    fn balance_ledger(entries : ArrayView[StreamBalance], tolerance : Double) -> BalanceLedger

    balance_markdown

    fn balance_markdown(ledger : BalanceLedger) -> String

    build_utility_network

    fn build_utility_network(kind : String, nodes : ArrayView[UtilityNode]) -> UtilityNetwork

    cascade_recovery

    fn cascade_recovery(stage_recoveries : ArrayView[Double]) -> Double raise
    ExtractionError

    compare_streams

    fn compare_streams(first : ProcessStream, second : ProcessStream) -> StreamComparison

    component_ledger

    fn component_ledger(component : String, feed : Double, product : Double, waste : Double, tolerance : Double) -> ComponentLedger raise
    ExtractionError

    component_ledger_csv

    fn component_ledger_csv(ledgers : ArrayView[ComponentLedger]) -> String

    concentration_after_recovery

    fn concentration_after_recovery(feed : Double, recovery : Double) -> Double raise
    ExtractionError

    envelope_recovery

    fn envelope_recovery(temperature : Double, pressure : Double, flow : Double, solvent_ratio : Double, equilibrium_factor : Double, stage_count : Int) -> Double raise
    ExtractionError

    equipment_margin

    fn equipment_margin(actual_flow~ : Double, design_flow~ : Double) -> Double raise
    ExtractionError

    equipment_utilization

    fn equipment_utilization(actual_flow~ : Double, design_flow~ : Double) -> Double raise
    ExtractionError

    estimate_heat_duty

    Estimate a heat duty from a flowsheet temperature change.

    feasible_points

    fn feasible_points(points : ArrayView[OperatingPoint]) -> Array[OperatingPoint]

    flowsheet_ledger

    Combine per-step material balances into ledger entries.

    infeasible_points

    fn infeasible_points(points : ArrayView[OperatingPoint]) -> Array[OperatingPoint]

    ledger_entry

    fn ledger_entry(name~ : String, inlet~ : Double, outlet~ : Double, generated? : Double, consumed? : Double) -> LedgerEntry raise
    ExtractionError

    ledger_passes

    fn ledger_passes(entries : ArrayView[LedgerEntry], tolerance~ : Double) -> Bool

    ledgers_reconciled

    fn ledgers_reconciled(ledgers : ArrayView[ComponentLedger], tolerance : Double) -> Bool

    limits_minimum_span

    fn limits_minimum_span(limits : ArrayView[OperatingLimit]) -> Double

    make_scenario

    fn make_scenario(name~ : String, temperature~ : Double, pressure~ : Double, flow~ : Double, solvent_ratio~ : Double, equilibrium_factor~ : Double, stage_count~ : Int) -> ScenarioPoint raise
    ExtractionError

    maximum_residual

    fn maximum_residual(entries : ArrayView[LedgerEntry]) -> Double

    merge_streams

    mix_streams

    Mix two streams on a common mass-flow basis.

    near_limit_points

    fn near_limit_points(points : ArrayView[OperatingPoint], threshold : Double) -> Array[OperatingPoint]

    network_add_node

    fn network_add_node(network : UtilityNetwork, node : UtilityNode) -> UtilityNetwork

    network_is_feasible

    fn network_is_feasible(network : UtilityNetwork, reserve_fraction : Double) -> Bool

    network_margin

    fn network_margin(network : UtilityNetwork) -> Double

    network_remove_node

    fn network_remove_node(network : UtilityNetwork, name : String) -> UtilityNetwork

    network_reserve

    fn network_reserve(network : UtilityNetwork) -> Double

    network_scale_capacity

    fn network_scale_capacity(network : UtilityNetwork, factor : Double) -> UtilityNetwork

    network_scale_demand

    fn network_scale_demand(network : UtilityNetwork, factor : Double) -> UtilityNetwork

    network_sensitivity

    fn network_sensitivity(network : UtilityNetwork, demand_factors : ArrayView[Double]) -> Array[Double]

    network_utilization

    fn network_utilization(network : UtilityNetwork) -> Double

    operating_point_csv

    fn operating_point_csv(point : OperatingPoint) -> String

    operating_points_csv

    fn operating_points_csv(points : ArrayView[OperatingPoint]) -> String

    outlet_recovery

    fn outlet_recovery(result : FlowsheetResult) -> Double

    overall_recovery

    fn overall_recovery(ledgers : ArrayView[ComponentLedger]) -> Double

    point_is_near_limit

    fn point_is_near_limit(point : OperatingPoint, threshold : Double) -> Bool

    fn recommended_safety_factor(uncertainty_fraction : Double, minimum? : Double) -> Double raise
    ExtractionError

    recovery_percentile_band

    fn recovery_percentile_band(scenarios : ArrayView[ScenarioPoint], lower_probability? : Double, upper_probability? : Double) -> (Double, Double) raise
    ExtractionError

    recovery_quantile

    fn recovery_quantile(scenarios : ArrayView[ScenarioPoint], probability : Double) -> Double raise
    ExtractionError

    required_recovery_per_stage

    fn required_recovery_per_stage(target_recovery : Double, stage_count : Int) -> Double raise
    ExtractionError

    robust_scenario

    fn robust_scenario(scenarios : ArrayView[ScenarioPoint], minimum_recovery : Double) -> Bool

    scenario_markdown

    fn scenario_markdown(scenarios : ArrayView[ScenarioPoint]) -> String

    scenario_names

    fn scenario_names(scenarios : ArrayView[ScenarioPoint]) -> Array[String]

    scenario_recovery_values

    fn scenario_recovery_values(scenarios : ArrayView[ScenarioPoint]) -> Array[Double]

    scenario_sensitivity

    fn scenario_sensitivity(baseline : ScenarioPoint, perturbations : ArrayView[ScenarioPoint]) -> Array[Double]

    simulate

    simulate_recycle

    fn simulate_recycle(flowsheet : Flowsheet, inlet : ProcessStream, recycle_fraction~ : Double, tolerance? : Double, maximum_iterations? : Int) -> RecycleResult raise
    ExtractionError

    size_equipment

    fn size_equipment(spec : EquipmentSpec, density~ : Double, velocity~ : Double, heat_duty~ : Double, heat_transfer_coefficient~ : Double) -> EquipmentSizing raise
    ExtractionError

    size_heat_exchanger

    fn size_heat_exchanger(duty~ : Double, overall_coefficient~ : Double, hot_inlet_temperature~ : Double, hot_outlet_temperature~ : Double, cold_inlet_temperature~ : Double, cold_outlet_temperature~ : Double) -> HeatExchangerSizing raise
    ExtractionError

    size_mixer

    fn size_mixer(flow~ : Double, residence_time~ : Double, density~ : Double, power_number~ : Double, rotation_per_second~ : Double, impeller_diameter~ : Double) -> MixerSizing raise
    ExtractionError

    size_pump

    fn size_pump(flow~ : Double, pressure_rise~ : Double, density~ : Double, efficiency~ : Double) -> PumpSizing raise
    ExtractionError

    size_settler

    fn size_settler(total_flow~ : Double, residence_time~ : Double, length_to_width? : Double, width_to_height? : Double) -> SettlerSizing raise
    ExtractionError

    split_stream

    fn split_stream(stream : ProcessStream, fraction : Double, first_name : String, second_name : String) -> (ProcessStream, ProcessStream) raise
    ExtractionError

    statistics_filter_dilute

    fn statistics_filter_dilute(statistics : ArrayView[StreamStatistics], threshold : Double) -> Array[StreamStatistics]

    statistics_filter_rich

    fn statistics_filter_rich(statistics : ArrayView[StreamStatistics], threshold : Double) -> Array[StreamStatistics]

    statistics_maximum_ratio

    fn statistics_maximum_ratio(statistics : ArrayView[StreamStatistics]) -> Double

    statistics_mean

    fn statistics_mean(statistics : ArrayView[StreamStatistics]) -> StreamStatistics

    statistics_minimum_ratio

    fn statistics_minimum_ratio(statistics : ArrayView[StreamStatistics]) -> Double

    statistics_quality_range

    fn statistics_quality_range(statistics : ArrayView[StreamStatistics]) -> Double

    statistics_ratio_range

    fn statistics_ratio_range(statistics : ArrayView[StreamStatistics]) -> Double

    statistics_total_flow

    fn statistics_total_flow(statistics : ArrayView[StreamStatistics]) -> Double

    statistics_total_solute

    fn statistics_total_solute(statistics : ArrayView[StreamStatistics]) -> Double

    stream_balance

    fn stream_balance(name : String, inlet : ProcessStream, outlet : ProcessStream, tolerance : Double) -> StreamBalance

    stream_carrier_fraction

    fn stream_carrier_fraction(stream : ProcessStream) -> Double

    stream_change_magnitude

    fn stream_change_magnitude(change : StreamComparison) -> Double

    stream_comparison_report

    fn stream_comparison_report(comparison : StreamComparison) -> String

    stream_concentration_change

    fn stream_concentration_change(first : ProcessStream, second : ProcessStream) -> Double

    stream_concentration_ratio

    fn stream_concentration_ratio(stream : ProcessStream) -> Double

    stream_energy_change

    fn stream_energy_change(first : ProcessStream, second : ProcessStream, heat_capacity : Double) -> Double

    stream_flow_ratio

    fn stream_flow_ratio(first : ProcessStream, second : ProcessStream) -> Double

    stream_is_dilute

    fn stream_is_dilute(stream : ProcessStream, threshold : Double) -> Bool

    stream_is_rich

    fn stream_is_rich(stream : ProcessStream, threshold : Double) -> Bool

    stream_loss_factor

    fn stream_loss_factor(feed : ProcessStream, waste : ProcessStream) -> Double

    stream_pressure_change

    fn stream_pressure_change(first : ProcessStream, second : ProcessStream) -> Double

    stream_pressure_ratio

    fn stream_pressure_ratio(first : ProcessStream, second : ProcessStream) -> Double

    stream_pressure_work

    fn stream_pressure_work(first : ProcessStream, second : ProcessStream) -> Double

    stream_quality_index

    fn stream_quality_index(stream : ProcessStream) -> Double

    stream_quality_label

    fn stream_quality_label(stream : ProcessStream) -> String

    stream_recovery_factor

    fn stream_recovery_factor(feed : ProcessStream, product : ProcessStream) -> Double

    stream_solute_fraction

    fn stream_solute_fraction(stream : ProcessStream) -> Double

    stream_solute_ratio

    fn stream_solute_ratio(first : ProcessStream, second : ProcessStream) -> Double

    stream_solvent_concentration_change

    fn stream_solvent_concentration_change(first : ProcessStream, second : ProcessStream) -> Double

    stream_solvent_fraction

    fn stream_solvent_fraction(stream : ProcessStream) -> Double

    stream_statistics

    fn stream_statistics(stream : ProcessStream, heat_capacity : Double) -> StreamStatistics

    stream_statistics_csv

    fn stream_statistics_csv(statistics : ArrayView[StreamStatistics]) -> String

    stream_statistics_markdown

    fn stream_statistics_markdown(statistics : ArrayView[StreamStatistics]) -> String

    stream_summary_line

    fn stream_summary_line(statistics : StreamStatistics) -> String

    stream_temperature_change

    fn stream_temperature_change(first : ProcessStream, second : ProcessStream) -> Double

    stream_temperature_ratio

    fn stream_temperature_ratio(first : ProcessStream, second : ProcessStream) -> Double

    streams_balanced

    fn streams_balanced(inlet : ProcessStream, outlet : ProcessStream, tolerance : Double) -> Bool

    total_feed

    fn total_feed(ledgers : ArrayView[ComponentLedger]) -> Double

    total_pressure_drop

    fn total_pressure_drop(result : FlowsheetResult) -> Double

    total_product

    fn total_product(ledgers : ArrayView[ComponentLedger]) -> Double

    total_temperature_change

    fn total_temperature_change(result : FlowsheetResult) -> Double

    utility_allocation_csv

    fn utility_allocation_csv(allocations : ArrayView[UtilityAllocation]) -> String

    utility_limit_report

    fn utility_limit_report(limits : ArrayView[OperatingLimit]) -> String

    utility_network_alerts

    fn utility_network_alerts(network : UtilityNetwork, maximum_utilization : Double) -> Array[String]

    utility_network_balanced

    fn utility_network_balanced(network : UtilityNetwork, tolerance : Double) -> Bool

    utility_network_cost

    fn utility_network_cost(network : UtilityNetwork, unit_cost : Double) -> Double

    utility_network_emissions

    fn utility_network_emissions(network : UtilityNetwork, emission_factor : Double) -> Double

    utility_network_markdown

    fn utility_network_markdown(network : UtilityNetwork) -> String

    utility_network_max_priority

    fn utility_network_max_priority(network : UtilityNetwork) -> Int

    utility_network_min_priority

    fn utility_network_min_priority(network : UtilityNetwork) -> Int

    utility_network_summary

    fn utility_network_summary(network : UtilityNetwork) -> String

    utility_node

    fn utility_node(name : String, demand : Double, capacity : Double, priority : Int) -> UtilityNode

    utility_node_count_available

    fn utility_node_count_available(network : UtilityNetwork) -> Int

    utility_node_rank

    fn utility_node_rank(network : UtilityNetwork, name : String) -> Int

    vessel_volume_for_batch

    fn vessel_volume_for_batch(batch_mass~ : Double, density~ :
    Density
    , fill_fraction~ : Double, safety_factor? : Double) ->
    Volume
    raise
    ExtractionError

    worst_margin

    fn worst_margin(points : ArrayView[OperatingPoint]) -> Double