Skip to the content.

Utility Air System

Models utility air systems for offshore and onshore facilities per ISO 8573-1.

Table of Contents


Overview

Location: neqsim.process.equipment.util.UtilityAirSystem

The UtilityAirSystem class models compressed air systems providing:

Key Features


Design Standards

Standard Description
ISO 8573-1 Compressed Air Quality Classes
NORSOK P-002 Process System Design
API RP 11P Packaged Reciprocating Compressors
EN 12021 Breathing air for diving and other operations

Air Quality Classes

ISO 8573-1 Classification

Class Max Particles (μm) Dew Point (°C) Max Oil (mg/m³) Typical Use
CLASS_1 0.1 -70 0.01 Breathing/Medical
CLASS_2 1.0 -40 0.1 Instrument Air
CLASS_3 5.0 -20 1.0 Control Air
CLASS_4 15.0 +3 5.0 Plant Air
CLASS_5 40.0 +7 25.0 Service Air

Quality Class Usage

import neqsim.process.equipment.util.UtilityAirSystem.AirQualityClass;

// Get instrument air requirements
AirQualityClass instrAir = AirQualityClass.CLASS_2;
double maxParticles = instrAir.getMaxParticleSizeMicron();  // 1.0 μm
double dewPoint = instrAir.getMaxDewPointC();                // -40°C
double maxOil = instrAir.getMaxOilMgM3();                    // 0.1 mg/m³
String use = instrAir.getTypicalUse();                       // "Instrument Air"

System Components

Typical System Layout

                    ┌───────────────┐
Atmospheric Air ───►│  Air Filter   │
                    └───────┬───────┘
                            │
                            ▼
                    ┌───────────────┐
                    │  Compressor   │───► Intercooler
                    │   (N+1)       │
                    └───────┬───────┘
                            │
                            ▼
                    ┌───────────────┐
                    │  Aftercooler  │───► Condensate
                    │   + Separator │
                    └───────┬───────┘
                            │
                            ▼
                    ┌───────────────┐
                    │  Air Dryer    │───► Purge/Regen
                    │  (Desiccant)  │
                    └───────┬───────┘
                            │
                            ▼
                    ┌───────────────┐
                    │   Receiver    │
                    │     Tank      │
                    └───────┬───────┘
                            │
               ┌────────────┼────────────┐
               ▼            ▼            ▼
          Instrument    Plant Air   Service Air
             Air

Compressor Types

Type Description Best Application
ROTARY_SCREW Most common for continuous duty General purpose
RECIPROCATING High pressure capability Small systems, high P
CENTRIFUGAL Large capacity Large facilities
SCROLL Small, quiet operation Small/specialty

Dryer Types

Type Dew Point (°C) Air Yield Notes
REFRIGERATED +3 95% Lowest cost
DESICCANT_HEATLESS -40 85% Simple, reliable
DESICCANT_HEATED -40 92% More efficient
MEMBRANE -20 80% Compact, no moving parts
HYBRID -70 88% Breathing air

Usage Examples

Java Example - Complete System

import neqsim.process.equipment.util.UtilityAirSystem;
import neqsim.process.equipment.util.UtilityAirSystem.*;

// Create utility air system
UtilityAirSystem airSystem = new UtilityAirSystem("Platform Air System");

// Configure for instrument air quality
airSystem.setTargetQuality(AirQualityClass.CLASS_2);  // ISO Class 2
airSystem.setCompressorType(CompressorType.ROTARY_SCREW);
airSystem.setDryerType(DryerType.DESICCANT_HEATED);

// Set operating parameters
airSystem.setDischargePressure(8.0);      // barg
airSystem.setInletTemperature(25.0);      // °C ambient
airSystem.setInletRelativeHumidity(70.0); // % RH
airSystem.setAfterCoolerOutletTemp(35.0); // °C

// Configure redundancy (N+1)
airSystem.setNumberOfCompressors(3);  // 2 duty + 1 standby

// Set demand
airSystem.setTotalAirDemand(500.0);   // Nm³/hr
airSystem.setInstrumentAirFraction(0.60);  // 60% instrument air
airSystem.setPlantAirFraction(0.30);       // 30% plant air
airSystem.setServiceAirFraction(0.10);     // 10% service/breathing

// Add specific consumers
airSystem.addConsumer("Instrument Air Header", AirQualityClass.CLASS_2, 300.0);
airSystem.addConsumer("Plant Air Header", AirQualityClass.CLASS_4, 150.0);
airSystem.addConsumer("Breathing Air", AirQualityClass.CLASS_1, 50.0);

// Set receiver tank
airSystem.setReceiverVolume(10.0);  // m³

// Run calculations
airSystem.run();

// Results
System.out.println("Utility Air System Results:");
System.out.println("  Compressor power: " + airSystem.getTotalCompressorPower() + " kW");
System.out.println("  Condensate rate: " + airSystem.getCondensateRateLhr() + " L/hr");
System.out.println("  Delivered dew point: " + airSystem.getDeliveredDewPointC() + " °C");
System.out.println("  Receiver holdup: " + airSystem.getReceiverHoldupMinutes() + " min");

// Get JSON report
String report = airSystem.toJson();

Python Example

from neqsim import jneqsim

UtilityAirSystem = jneqsim.process.equipment.util.UtilityAirSystem
AirQualityClass = jneqsim.process.equipment.util.UtilityAirSystem.AirQualityClass
CompressorType = jneqsim.process.equipment.util.UtilityAirSystem.CompressorType
DryerType = jneqsim.process.equipment.util.UtilityAirSystem.DryerType

# Create utility air system
air_system = UtilityAirSystem("Platform Air")

# Configure
air_system.setTargetQuality(AirQualityClass.CLASS_2)
air_system.setCompressorType(CompressorType.ROTARY_SCREW)
air_system.setDryerType(DryerType.DESICCANT_HEATED)
air_system.setDischargePressure(8.0)  # barg
air_system.setTotalAirDemand(500.0)   # Nm³/hr

# Add consumers
air_system.addConsumer("Instrument Air", AirQualityClass.CLASS_2, 300.0)
air_system.addConsumer("Plant Air", AirQualityClass.CLASS_4, 150.0)

air_system.run()

print(f"Compressor power: {air_system.getTotalCompressorPower():.1f} kW")
print(f"Dew point: {air_system.getDeliveredDewPointC():.1f} °C")

Condensate Calculation

// Estimate condensate from ambient air compression
airSystem.setInletTemperature(30.0);       // Hot day
airSystem.setInletRelativeHumidity(80.0);  // Humid
airSystem.run();

double condensateRate = airSystem.getCondensateRateLhr();
System.out.println("Condensate to drain: " + condensateRate + " L/hr");

// Condensate increases significantly in tropical climates!

Sizing and Capacity

Compressor Sizing

// Set total demand with diversity factor
airSystem.setTotalAirDemand(600.0);  // Nm³/hr peak demand
airSystem.setDiversityFactor(0.7);    // 70% simultaneous use

// Size compressors
airSystem.autoSizeCompressors();

double perCompressor = airSystem.getCompressorCapacityEach();  // Nm³/hr
int numCompressors = airSystem.getNumberOfCompressors();

Receiver Tank Sizing

Standard practice: Provide 1-3 minutes of demand at delivery pressure.

// Size receiver for 2 minutes holdup
airSystem.setReceiverHoldupMinutes(2.0);
airSystem.autoSizeReceiver();

double tankVolume = airSystem.getReceiverVolume();  // m³
System.out.println("Receiver tank: " + tankVolume + " m³");

Power Estimation

// Estimate compressor power
// Typical: 6-8 kW per 100 Nm³/hr at 7 barg

airSystem.setTotalAirDemand(500.0);
airSystem.setDischargePressure(7.0);
airSystem.run();

double power = airSystem.getTotalCompressorPower();  // kW
double specific = power / 500.0 * 100;  // kW per 100 Nm³/hr

System.out.println("Specific power: " + specific + " kW per 100 Nm³/hr");

API Reference

Constructors

Constructor Description
UtilityAirSystem(String name) Create system with name

Configuration - Quality

Method Description
setTargetQuality(AirQualityClass) Set ISO 8573-1 quality class
setCompressorType(CompressorType) Set compressor type
setDryerType(DryerType) Set air dryer type

Configuration - Operating Parameters

Method Description
setDischargePressure(double) Set delivery pressure (barg)
setInletTemperature(double) Set ambient temperature (°C)
setInletRelativeHumidity(double) Set ambient humidity (%)
setAfterCoolerOutletTemp(double) Set aftercooler outlet (°C)

Configuration - Capacity

Method Description
setTotalAirDemand(double) Set total demand (Nm³/hr)
setNumberOfCompressors(int) Set number of compressors
setReceiverVolume(double) Set receiver tank volume (m³)
addConsumer(String, AirQualityClass, double) Add air consumer

Configuration - Demand Split

Method Description
setInstrumentAirFraction(double) Set instrument air fraction
setPlantAirFraction(double) Set plant air fraction
setServiceAirFraction(double) Set service/breathing fraction

Results

Method Description
getTotalCompressorPower() Get total compressor power (kW)
getCondensateRateLhr() Get condensate rate (L/hr)
getDeliveredDewPointC() Get actual delivered dew point (°C)
getReceiverHoldupMinutes() Get receiver holdup time (min)
getCompressorCapacityEach() Get individual compressor capacity
toJson() Get full results as JSON