Class FlashGradients

java.lang.Object
neqsim.thermo.util.derivatives.FlashGradients
All Implemented Interfaces:
Serializable

public class FlashGradients extends Object implements Serializable
Container for gradients of flash calculation results with respect to input parameters.

Stores sensitivities of flash outputs (K-values, phase fraction, phase compositions) with respect to:

  • Temperature (T)
  • Pressure (P)
  • Feed composition (z)

These gradients are computed using the implicit function theorem, which provides exact derivatives without differentiating through the iterative flash solver.

Mathematical Background

At phase equilibrium, the residual equations F(y; θ) = 0 are satisfied, where y represents the solution variables (K-values, β) and θ represents parameters (T, P, z).

By the implicit function theorem:

dy/dθ = -(∂F/∂y)^(-1) * (∂F/∂θ)
Since:
3.0
Author:
ESOL
See Also:
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    private final double
    Current vapor phase fraction (β).
    private final String[]
    Component names.
    private final double
    Derivative of vapor fraction w.r.t. pressure: dβ/dP [1/bar].
    private final double
    Derivative of vapor fraction w.r.t. temperature: dβ/dT [1/K].
    private final double[]
    Derivatives of vapor fraction w.r.t. feed composition: dβ/dz_i.
    private final double[]
    Derivatives of K-values w.r.t. pressure: dK_i/dP [1/bar].
    private final double[]
    Derivatives of K-values w.r.t. temperature: dK_i/dT [1/K].
    private final double[][]
    Derivatives of K-values w.r.t. feed composition: dK_i/dz_j.
    private final String
    Error message if gradient computation failed.
    private final double[]
    Current K-values (y_i/x_i).
    private final int
    Number of components.
    private final int
    Number of phases.
    private static final long
     
    private final boolean
    Whether gradients were successfully computed.
  • Constructor Summary

    Constructors
    Constructor
    Description
    FlashGradients(double[] kValues, double beta, double[] dKdT, double[] dKdP, double[][] dKdz, double dBetadT, double dBetadP, double[] dBetadz, String[] componentNames)
    Constructor for successful gradient computation.
    FlashGradients(int numberOfComponents, String errorMessage)
    Constructor for failed gradient computation.
  • Method Summary

    Modifier and Type
    Method
    Description
    double
    Get current vapor phase fraction.
    Get component names.
    double
    Get derivative of vapor fraction w.r.t. pressure.
    double
    Get derivative of vapor fraction w.r.t. temperature.
    double[]
    Get derivatives of vapor fraction w.r.t. feed composition.
    double
    getDBetadz(int componentIndex)
    Get derivative of vapor fraction w.r.t. specific component in feed.
    double[]
    Get all K-value pressure derivatives.
    double
    getDKdP(int componentIndex)
    Get derivative of K-value w.r.t. pressure.
    double[]
    Get all K-value temperature derivatives.
    double
    getDKdT(int componentIndex)
    Get derivative of K-value w.r.t. temperature.
    double[][]
    Get full K-value composition Jacobian.
    double
    getDKdz(int i, int j)
    Get derivative of K-value w.r.t. feed composition.
    double[]
    getDKdzRow(int componentIndex)
    Get K-value composition derivatives for a component.
    double
    getDxdT(int componentIndex, double[] z)
    Compute derivative of liquid phase composition x_i w.r.t. temperature.
    double
    getDydT(int componentIndex, double[] z)
    Compute derivative of vapor phase composition y_i w.r.t. temperature.
    Get error message if computation failed.
    double
    getKValue(int componentIndex)
    Get K-value for a component.
    double[]
    Get current K-values.
    int
    Get number of components.
    int
    Get number of phases.
    boolean
    Check if gradients are valid.
    double[]
    Get all gradients as a flat array for ML frameworks.
     

    Methods inherited from class Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
  • Field Details

    • serialVersionUID

      private static final long serialVersionUID
      See Also:
    • numberOfComponents

      private final int numberOfComponents
      Number of components.
    • numberOfPhases

      private final int numberOfPhases
      Number of phases.
    • kValues

      private final double[] kValues
      Current K-values (y_i/x_i).
    • beta

      private final double beta
      Current vapor phase fraction (β).
    • dKdT

      private final double[] dKdT
      Derivatives of K-values w.r.t. temperature: dK_i/dT [1/K].
    • dKdP

      private final double[] dKdP
      Derivatives of K-values w.r.t. pressure: dK_i/dP [1/bar].
    • dKdz

      private final double[][] dKdz
      Derivatives of K-values w.r.t. feed composition: dK_i/dz_j.
    • dBetadT

      private final double dBetadT
      Derivative of vapor fraction w.r.t. temperature: dβ/dT [1/K].
    • dBetadP

      private final double dBetadP
      Derivative of vapor fraction w.r.t. pressure: dβ/dP [1/bar].
    • dBetadz

      private final double[] dBetadz
      Derivatives of vapor fraction w.r.t. feed composition: dβ/dz_i.
    • componentNames

      private final String[] componentNames
      Component names.
    • valid

      private final boolean valid
      Whether gradients were successfully computed.
    • errorMessage

      private final String errorMessage
      Error message if gradient computation failed.
  • Constructor Details

    • FlashGradients

      public FlashGradients(double[] kValues, double beta, double[] dKdT, double[] dKdP, double[][] dKdz, double dBetadT, double dBetadP, double[] dBetadz, String[] componentNames)
      Constructor for successful gradient computation.
      Parameters:
      kValues - current K-values
      beta - current vapor fraction
      dKdT - K-value temperature derivatives
      dKdP - K-value pressure derivatives
      dKdz - K-value composition derivatives
      dBetadT - vapor fraction temperature derivative
      dBetadP - vapor fraction pressure derivative
      dBetadz - vapor fraction composition derivatives
      componentNames - component names
    • FlashGradients

      public FlashGradients(int numberOfComponents, String errorMessage)
      Constructor for failed gradient computation.
      Parameters:
      numberOfComponents - number of components
      errorMessage - error description
  • Method Details

    • isValid

      public boolean isValid()
      Check if gradients are valid.
      Returns:
      true if gradients were successfully computed
    • getErrorMessage

      public String getErrorMessage()
      Get error message if computation failed.
      Returns:
      error message or null if successful
    • getNumberOfComponents

      public int getNumberOfComponents()
      Get number of components.
      Returns:
      number of components
    • getNumberOfPhases

      public int getNumberOfPhases()
      Get number of phases.
      Returns:
      number of phases
    • getKValues

      public double[] getKValues()
      Get current K-values.
      Returns:
      array of K_i = y_i/x_i
    • getKValue

      public double getKValue(int componentIndex)
      Get K-value for a component.
      Parameters:
      componentIndex - component index
      Returns:
      K_i
    • getBeta

      public double getBeta()
      Get current vapor phase fraction.
      Returns:
      β (vapor mole fraction)
    • getDKdT

      public double getDKdT(int componentIndex)
      Get derivative of K-value w.r.t. temperature.
      Parameters:
      componentIndex - component index
      Returns:
      dK_i/dT [1/K]
    • getDKdT

      public double[] getDKdT()
      Get all K-value temperature derivatives.
      Returns:
      array of dK_i/dT
    • getDKdP

      public double getDKdP(int componentIndex)
      Get derivative of K-value w.r.t. pressure.
      Parameters:
      componentIndex - component index
      Returns:
      dK_i/dP [1/bar]
    • getDKdP

      public double[] getDKdP()
      Get all K-value pressure derivatives.
      Returns:
      array of dK_i/dP
    • getDKdz

      public double getDKdz(int i, int j)
      Get derivative of K-value w.r.t. feed composition.
      Parameters:
      i - K-value component index
      j - feed composition component index
      Returns:
      dK_i/dz_j
    • getDKdzRow

      public double[] getDKdzRow(int componentIndex)
      Get K-value composition derivatives for a component.
      Parameters:
      componentIndex - component index
      Returns:
      array of dK_i/dz_j for all j
    • getDKdz

      public double[][] getDKdz()
      Get full K-value composition Jacobian.
      Returns:
      matrix [i][j] = dK_i/dz_j
    • getDBetadT

      public double getDBetadT()
      Get derivative of vapor fraction w.r.t. temperature.
      Returns:
      dβ/dT [1/K]
    • getDBetadP

      public double getDBetadP()
      Get derivative of vapor fraction w.r.t. pressure.
      Returns:
      dβ/dP [1/bar]
    • getDBetadz

      public double[] getDBetadz()
      Get derivatives of vapor fraction w.r.t. feed composition.
      Returns:
      array of dβ/dz_i
    • getDBetadz

      public double getDBetadz(int componentIndex)
      Get derivative of vapor fraction w.r.t. specific component in feed.
      Parameters:
      componentIndex - component index
      Returns:
      dβ/dz_i
    • getComponentNames

      public String[] getComponentNames()
      Get component names.
      Returns:
      array of component names
    • getDxdT

      public double getDxdT(int componentIndex, double[] z)
      Compute derivative of liquid phase composition x_i w.r.t. temperature.

      Using: x_i = z_i / (1 + β*(K_i - 1))

      Parameters:
      componentIndex - component index
      z - feed composition
      Returns:
      dx_i/dT
    • getDydT

      public double getDydT(int componentIndex, double[] z)
      Compute derivative of vapor phase composition y_i w.r.t. temperature.

      Using: y_i = K_i * x_i

      Parameters:
      componentIndex - component index
      z - feed composition
      Returns:
      dy_i/dT
    • toFlatArray

      public double[] toFlatArray()
      Get all gradients as a flat array for ML frameworks.

      Layout: [dK_0/dT, ..., dK_n/dT, dK_0/dP, ..., dK_n/dP, dβ/dT, dβ/dP, dK_0/dz_0, ...]

      Returns:
      flattened gradient array
    • toString

      public String toString()
      Overrides:
      toString in class Object