Skip to the content.

title: Physical Properties Package description: This documentation covers NeqSim’s physical properties calculation system, including transport properties (viscosity, thermal conductivity, diffusivity), interfacial properties (surface tension), and … —

This documentation covers NeqSim’s physical properties calculation system, including transport properties (viscosity, thermal conductivity, diffusivity), interfacial properties (surface tension), and density correlations.

Contents


Package Architecture

The physical properties package follows a modular design with clear separation between:

  1. Property Handlers - Manage which models to use for each phase type
  2. Physical Properties System - Phase-specific property containers
  3. Methods - Individual calculation models (viscosity, conductivity, etc.)
  4. Mixing Rules - Combine pure component properties into mixture properties
  5. Interface Properties - Surface/interfacial tension calculations
physicalproperties/
├── PhysicalPropertyHandler.java    # Main entry point
├── PhysicalPropertyType.java       # Property type enum
├── system/
│   ├── PhysicalProperties.java     # Abstract base class
│   ├── PhysicalPropertyModel.java  # Model selection enum
│   ├── gasphysicalproperties/      # Gas phase implementations
│   ├── liquidphysicalproperties/   # Liquid phase implementations
│   └── solidphysicalproperties/    # Solid phase implementations
├── methods/
│   ├── gasphysicalproperties/
│   │   ├── viscosity/
│   │   ├── conductivity/
│   │   └── diffusivity/
│   ├── liquidphysicalproperties/
│   │   ├── viscosity/
│   │   ├── conductivity/
│   │   ├── diffusivity/
│   │   └── density/
│   └── commonphasephysicalproperties/
│       ├── viscosity/              # Models valid for all phases
│       ├── conductivity/
│       └── diffusivity/
├── mixingrule/
│   └── PhysicalPropertyMixingRule.java
└── interfaceproperties/
    ├── InterfaceProperties.java
    └── surfacetension/

Basic Usage

Initializing Physical Properties

Physical properties are calculated after thermodynamic equilibrium has been established:

import neqsim.thermo.system.SystemSrkEos;
import neqsim.thermodynamicoperations.ThermodynamicOperations;

// Create fluid and run flash
SystemInterface fluid = new SystemSrkEos(298.15, 50.0);
fluid.addComponent("methane", 0.9);
fluid.addComponent("ethane", 0.1);
fluid.setMixingRule("classic");

ThermodynamicOperations ops = new ThermodynamicOperations(fluid);
ops.TPflash();

// Initialize physical properties
fluid.initPhysicalProperties();

// Access properties
double gasViscosity = fluid.getPhase("gas").getViscosity("kg/msec");
double gasConductivity = fluid.getPhase("gas").getThermalConductivity("W/mK");
double gasDensity = fluid.getPhase("gas").getDensity("kg/m3");

Physical Property Models

NeqSim provides several pre-configured physical property model sets:

Model Description Best For
DEFAULT Standard models for oil/gas General hydrocarbon systems
WATER Water-specific correlations Aqueous systems
SALT_WATER Salt water correlations Brine systems
GLYCOL Glycol-specific models Glycol dehydration
AMINE Amine solution models Gas sweetening
CO2WATER CO₂-water system models CCS applications
BASIC Minimal calculations Fast approximations
// Set physical property model
fluid.initPhysicalProperties("GLYCOL");

// Or use the enum directly
import neqsim.physicalproperties.system.PhysicalPropertyModel;
fluid.initPhysicalProperties(PhysicalPropertyModel.AMINE);

Selecting Individual Models

You can override specific property models while keeping others at defaults:

Viscosity Model Selection

fluid.initPhysicalProperties();

// Set viscosity model for a specific phase
fluid.getPhase("gas").getPhysicalProperties().setViscosityModel("friction theory");
fluid.getPhase("oil").getPhysicalProperties().setViscosityModel("LBC");

Available viscosity models:

The PFCT/CSP viscosity model supports four tunable CSP viscosity parameters through setCspViscosityParameters, setCspViscosityParameter, and the matching getCspViscosityParameters accessors on PhysicalProperties.

Thermal Conductivity Model Selection

fluid.getPhase("gas").getPhysicalProperties().setConductivityModel("Chung");
fluid.getPhase("oil").getPhysicalProperties().setConductivityModel("PFCT");

Available conductivity models:

Diffusivity Model Selection

fluid.getPhase("gas").getPhysicalProperties().setDiffusionCoefficientModel("Wilke Lee");
fluid.getPhase("oil").getPhysicalProperties().setDiffusionCoefficientModel("Siddiqi Lucas");

Available diffusivity models:

Density Model Selection (Liquids)

fluid.getPhase("oil").getPhysicalProperties().setDensityModel("Costald");

Available density models:


Model Tuning

Several models support parameter tuning for better match with experimental data:

LBC Viscosity Tuning

The LBC model has 5 tunable parameters for the dense-fluid contribution:

// Set all parameters at once
double[] lbcParams = {0.1023, 0.023364, 0.058533, -0.040758, 0.0093324};
fluid.getPhase("oil").getPhysicalProperties().setLbcParameters(lbcParams);

// Or set individual parameters
fluid.getPhase("oil").getPhysicalProperties().setLbcParameter(0, 0.105);

Friction Theory Constants

For non-SRK/PR equations of state:

FrictionTheoryViscosityMethod viscModel =
    (FrictionTheoryViscosityMethod) fluid.getPhase("oil")
        .getPhysicalProperties().getViscosityModel();

viscModel.setFrictionTheoryConstants(
    kapac,    // Attractive constant
    kaprc,    // Repulsive constant
    kaprrc,   // Repulsive-repulsive constant
    kapa,     // Attractive matrix (3x3)
    kapr,     // Repulsive matrix (3x3)
    kaprr     // Repulsive-repulsive constant
);

Accessing Calculated Properties

After initialization, properties are available through the phase interface:

Per-Phase Properties

// Viscosity
double viscosity = fluid.getPhase("gas").getViscosity();           // Pa·s
double viscosity_cP = fluid.getPhase("gas").getViscosity("cP");    // cP

// Thermal conductivity
double k = fluid.getPhase("gas").getThermalConductivity();         // W/(m·K)
double k_alt = fluid.getPhase("gas").getThermalConductivity("W/mK");

// Density
double rho = fluid.getPhase("gas").getDensity();                   // kg/m³
double rho_alt = fluid.getPhase("gas").getDensity("kg/m3");

// Kinematic viscosity
double nu = fluid.getPhase("gas").getKinematicViscosity();         // m²/s

// Binary diffusion coefficients
double[][] Dij = fluid.getPhase("gas").getPhysicalProperties()
    .getDiffusivityCalc().getBinaryDiffusionCoefficients();        // m²/s

Pure Component Properties

// Pure component viscosity (for mixing rule debugging)
double pureVisc = fluid.getPhase("gas").getPhysicalProperties()
    .getPureComponentViscosity(0);

Interfacial Properties

// Surface tension between phases
fluid.initPhysicalProperties();
double sigma = fluid.getInterphaseProperties().getSurfaceTension(0, 1);  // N/m

Adding New Models

To add a custom physical property model:

1. Create the Model Class

package neqsim.physicalproperties.methods.liquidphysicalproperties.viscosity;

import neqsim.physicalproperties.system.PhysicalProperties;

public class MyCustomViscosityModel extends Viscosity {

    public MyCustomViscosityModel(PhysicalProperties phase) {
        super(phase);
    }

    @Override
    public double calcViscosity() {
        // Your implementation here
        double viscosity = 0.0;

        // Access phase properties
        double T = phase.getPhase().getTemperature();  // K
        double P = phase.getPhase().getPressure();     // bar
        double rho = phase.getPhase().getDensity();    // kg/m³

        // Access component properties
        for (int i = 0; i < phase.getPhase().getNumberOfComponents(); i++) {
            double x = phase.getPhase().getComponent(i).getx();
            double Tc = phase.getPhase().getComponent(i).getTC();
            // ... calculate contribution
        }

        return viscosity;  // Pa·s
    }

    @Override
    public double getPureComponentViscosity(int i) {
        // Return pure component viscosity for component i
        return 0.0;
    }
}

2. Register in PhysicalProperties

Add to setViscosityModel() in PhysicalProperties.java:

public void setViscosityModel(String model) {
    // ... existing models ...
    else if ("MyCustomModel".equals(model)) {
        viscosityCalc = new MyCustomViscosityModel(this);
    }
}

3. Use the Model

fluid.getPhase("oil").getPhysicalProperties().setViscosityModel("MyCustomModel");

Performance Considerations

  1. Lazy Initialization: Properties are only calculated when initPhysicalProperties() is called
  2. Selective Updates: Use init(phase, PropertyType) to update only specific properties
  3. Reuse Systems: Clone fluids rather than recreating for sensitivity studies
// Efficient property sweep
SystemInterface baseFluid = createFluid();
baseFluid.initPhysicalProperties();

for (double T : temperatures) {
    SystemInterface fluid = baseFluid.clone();
    fluid.setTemperature(T, "K");
    ops.TPflash();
    fluid.initPhysicalProperties();
    // ... use properties
}

See Also