solvx_reservoir_tools
Version:
Client library for SolvxAI Reservoir Engineering Tools - Property of Nexa Consulting Services
560 lines (559 loc) • 25.3 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.SolvxaiClient = void 0;
const axios_1 = __importDefault(require("axios"));
class SolvxaiClient {
constructor(config) {
this.client = axios_1.default.create({
baseURL: config.baseUrl,
headers: {
'X-API-Key': config.apiKey,
'Content-Type': 'application/json'
}
});
}
/**
* Calculates all PVT (Pressure-Volume-Temperature) properties for a given set of reservoir conditions
* @param params Object containing reservoir parameters:
* - reservoir_temperature: Reservoir temperature in °F
* - reservoir_pressure: Reservoir pressure in psia
* - api_gravity: API gravity of the oil
* - gas_specific_gravity: Specific gravity of the gas
* - gas_oil_ratio: Gas-oil ratio in scf/STB (optional)
* - bubble_point_pressure: Bubble point pressure in psia (optional)
* - h2s_content: H2S content in mole fraction (optional)
* - co2_content: CO2 content in mole fraction (optional)
* - n2_content: N2 content in mole fraction (optional)
* - water_salinity: Water salinity in ppm (optional)
* - correlations: Custom correlation settings (optional)
* @returns Promise containing calculated PVT properties
*/
async calculatePvtProperties(params) {
const response = await this.client.post('/api/pvt/calculateallproperties', params);
return response.data;
}
/**
* Calculates bubble point pressure from gas-oil ratio using specified correlation
* @param params Object containing calculation parameters:
* - correlation: Name of the correlation to use
* - initial_gor: Initial gas-oil ratio in scf/STB
* - gas_gravity: Gas specific gravity
* - api: API gravity of the oil
* - temperature: Temperature in °F
* - nitrogen_percentage: Nitrogen content in mole fraction (optional)
* @returns Promise containing calculated bubble point pressure
*/
async calculatePbFromGor(params) {
const response = await this.client.post('/api/pvt/calculatepbfromgor', params);
return response.data;
}
/**
* Calculates gas-oil ratio from bubble point pressure using specified correlation
* @param params Object containing calculation parameters:
* - correlation: Name of the correlation to use
* - pb: Bubble point pressure in psia
* - gas_gravity: Gas specific gravity
* - api: API gravity of the oil
* - temperature: Temperature in °F
* @returns Promise containing calculated gas-oil ratio
*/
async calculateGorFromPb(params) {
const response = await this.client.post('/api/pvt/calculategorfrompb', params);
return response.data;
}
/**
* Calculates oil properties for given reservoir conditions
* @param params Object containing reservoir parameters:
* - reservoir_temperature: Reservoir temperature in °F
* - pressure: Pressure in psia
* - api_gravity: API gravity of the oil
* - gas_specific_gravity: Specific gravity of the gas
* - gas_oil_ratio: Gas-oil ratio in scf/STB (optional)
* - bubble_point_pressure: Bubble point pressure in psia (optional)
* - h2s_content: H2S content in mole fraction (optional)
* - co2_content: CO2 content in mole fraction (optional)
* - n2_content: N2 content in mole fraction (optional)
* - correlations: Custom correlation settings (optional)
* @returns Promise containing calculated oil properties
*/
async calculateOilProperties(params) {
const response = await this.client.post('/api/pvt/calculateoilproperties', params);
return response.data;
}
/**
* Calculates gas properties for given reservoir conditions
* @param params Object containing reservoir parameters:
* - reservoir_temperature: Reservoir temperature in °F
* - pressure: Pressure in psia
* - gas_specific_gravity: Specific gravity of the gas
* - h2s_content: H2S content in mole fraction (optional)
* - co2_content: CO2 content in mole fraction (optional)
* - n2_content: N2 content in mole fraction (optional)
* - correlations: Custom correlation settings (optional)
* @returns Promise containing calculated gas properties
*/
async calculateGasProperties(params) {
const response = await this.client.post('/api/pvt/calculategasproperties', params);
return response.data;
}
/**
* Calculates water properties for given reservoir conditions
* @param params Object containing reservoir parameters:
* - reservoir_temperature: Reservoir temperature in °F
* - pressure: Pressure in psia
* - water_salinity: Water salinity in ppm (optional)
* - correlations: Custom correlation settings (optional)
* @returns Promise containing calculated water properties
*/
async calculateWaterProperties(params) {
const response = await this.client.post('/api/pvt/calculatewaterproperties', params);
return response.data;
}
/**
* Calculates bottom hole pressure (BHP) for given well conditions
* @param params Object containing well parameters:
* - mt_data: Measured depth and true vertical depth data
* - annulus_data: Annulus flow and geometry data
* - tubular_data: Tubing and casing dimensions
* - temperature_data: Temperature profile data
* - pvt_data: PVT properties data
* - production_data: Production rates and pressures
* - pvt_correlation_model: PVT correlation settings
* @returns Promise containing calculated bottom hole pressure
*/
async calculateBhp(params) {
const response = await this.client.post('/api/bhp/BHPcalculator', params);
return response.data;
}
/**
* Calculates interfacial tension using Ramey correlation
* @param params Object containing fluid properties:
* - rs: Solution gas-oil ratio in scf/STB
* - api: API gravity of the oil
* - gas_gravity: Gas specific gravity
* - bo: Oil formation volume factor
* - pressure: Pressure in psia
* - temperature: Temperature in °F
* - z: Gas compressibility factor
* @returns Promise containing calculated interfacial tension
*/
async calculateInterfacialTensionRamey(params) {
const response = await this.client.post('/api/pvt/interfacialtension/ramey', params);
return response.data;
}
/**
* Calculates interfacial tension using Asheim correlation
* @param params Object containing fluid properties:
* - rs: Solution gas-oil ratio in scf/STB
* - api: API gravity of the oil
* - gas_gravity: Gas specific gravity
* - bo: Oil formation volume factor
* - pressure: Pressure in psia
* - temperature: Temperature in °F
* - z: Gas compressibility factor
* @returns Promise containing calculated interfacial tension
*/
async calculateInterfacialTensionAsheim(params) {
const response = await this.client.post('/api/pvt/interfacialtension/asheim', params);
return response.data;
}
/**
* Calculates interfacial tension using Baker-Swerdloff correlation
* @param params Object containing fluid properties:
* - api: API gravity of the oil
* - pressure: Pressure in psia
* - temperature: Temperature in °F
* @returns Promise containing calculated interfacial tension
*/
async calculateInterfacialTensionBakerSwerdloff(params) {
const response = await this.client.post('/api/pvt/interfacialtension/bakerswerdloff', params);
return response.data;
}
/**
* Calculates oil-water interfacial tension
* @param params Object containing fluid properties:
* - api: API gravity of the oil
* - temperature: Temperature in °F
* - water_salinity: Water salinity in ppm
* - gas_gravity: Gas specific gravity
* - rs: Solution gas-oil ratio in scf/STB
* - bo: Oil formation volume factor
* - bw: Water formation volume factor
* @returns Promise containing calculated oil-water interfacial tension
*/
async calculateInterfacialTensionOilWater(params) {
const response = await this.client.post('/api/pvt/interfacialtension/oilwater', params);
return response.data;
}
/**
* Calculates gas-water interfacial tension
* @param params Object containing fluid properties:
* - pressure: Pressure in psia
* - temperature: Temperature in °F
* - water_salinity: Water salinity in ppm
* - z_factor: Gas compressibility factor
* - gas_gravity: Gas specific gravity
* - bw: Water formation volume factor
* @returns Promise containing calculated gas-water interfacial tension
*/
async calculateInterfacialTensionGasWater(params) {
const response = await this.client.post('/api/pvt/interfacialtension/gaswater', params);
return response.data;
}
/**
* Calculates compressibility using David-Yale correlation
* @param params Object containing reservoir parameters:
* - depth: Depth in feet
* - reservoir_pressure: Reservoir pressure in psia
* - pressure: Pressure in psia
* @returns Promise containing calculated compressibility
*/
async calculateCompressibilityDavidYale(params) {
const response = await this.client.post('/api/pvt/compressibility/davidyale', params);
return response.data;
}
/**
* Calculates compressibility using McCain correlation
* @param params Object containing fluid properties:
* - t_deg_f: Temperature in °F
* - psia: Pressure in psia
* - gor: Gas-oil ratio in scf/STB
* - gas_grav: Gas specific gravity
* - api: API gravity of the oil
* - pb: Bubble point pressure in psia
* - initial_gor: Initial gas-oil ratio in scf/STB
* @returns Promise containing calculated compressibility
*/
async calculateCompressibilityMcCain(params) {
const response = await this.client.post('/api/pvt/compressibility/mccain', params);
return response.data;
}
/**
* Calculates gas solubility in water using specified correlation
* @param params Object containing parameters:
* - correlation: Name of the correlation to use
* - temperature: Temperature in °F
* - pressure: Pressure in psia
* @returns Promise containing calculated gas solubility in water
*/
async calculateGasSolubilityInWater(params) {
const response = await this.client.post('/api/pvt/calculategassolubilityinwater', params);
return response.data;
}
/**
* Calculates gas density
* @param params Object containing gas properties:
* - temperature: Temperature in °F
* - pressure: Pressure in psia
* - gas_gravity: Gas specific gravity
* - n2_content: N2 content in mole fraction (optional)
* - co2_content: CO2 content in mole fraction (optional)
* - h2s_content: H2S content in mole fraction (optional)
* @returns Promise containing calculated gas density
*/
async calculateGasDensity(params) {
const response = await this.client.post('/api/pvt/calculategasdensity', params);
return response.data;
}
/**
* Calculates gas viscosity using specified correlation
* @param params Object containing gas properties:
* - correlation: Name of the correlation to use
* - temperature: Temperature in °F
* - pressure: Pressure in psia
* - gas_gravity: Gas specific gravity
* - h2s_content: H2S content in mole fraction (optional)
* - n2_content: N2 content in mole fraction (optional)
* - co2_content: CO2 content in mole fraction (optional)
* @returns Promise containing calculated gas viscosity
*/
async calculateGasViscosity(params) {
const response = await this.client.post('/api/pvt/calculategasviscosity', params);
return response.data;
}
/**
* Calculates gas compressibility using specified correlation
* @param params Object containing gas properties:
* - correlation: Name of the correlation to use
* - temperature: Temperature in °F
* - pressure: Pressure in psia
* - gas_gravity: Gas specific gravity
* - n2_content: N2 content in mole fraction (optional)
* - co2_content: CO2 content in mole fraction (optional)
* - h2s_content: H2S content in mole fraction (optional)
* @returns Promise containing calculated gas compressibility
*/
async calculateGasCompressibility(params) {
const response = await this.client.post('/api/pvt/calculategascompressibility', params);
return response.data;
}
/**
* Calculates gas formation volume factor using specified correlation
* @param params Object containing gas properties:
* - correlation: Name of the correlation to use
* - temperature: Temperature in °F
* - pressure: Pressure in psia
* - gas_gravity: Gas specific gravity
* - n2_content: N2 content in mole fraction (optional)
* - co2_content: CO2 content in mole fraction (optional)
* - h2s_content: H2S content in mole fraction (optional)
* @returns Promise containing calculated gas formation volume factor
*/
async calculateGasFVF(params) {
const response = await this.client.post('/api/pvt/calculategasfvf', params);
return response.data;
}
/**
* Calculates gas compressibility factor (Z-factor) using specified correlation
* @param params Object containing gas properties:
* - correlation: Name of the correlation to use
* - temperature: Temperature in °F
* - pressure: Pressure in psia
* - gas_gravity: Gas specific gravity
* - n2_content: N2 content in mole fraction (optional)
* - co2_content: CO2 content in mole fraction (optional)
* - h2s_content: H2S content in mole fraction (optional)
* @returns Promise containing calculated Z-factor
*/
async calculateZFactor(params) {
const response = await this.client.post('/api/pvt/calculatezfactor', params);
return response.data;
}
/**
* Calculates water viscosity using specified correlation
* @param params Object containing water properties:
* - correlation: Name of the correlation to use
* - temperature: Temperature in °F
* - pressure: Pressure in psia (optional)
* - water_salinity: Water salinity in ppm (optional)
* @returns Promise containing calculated water viscosity
*/
async calculateWaterViscosity(params) {
const response = await this.client.post('/api/pvt/calculatewaterviscosity', params);
return response.data;
}
/**
* Calculates water compressibility using specified correlation
* @param params Object containing water properties:
* - correlation: Name of the correlation to use
* - pressure: Pressure in psia
* - temperature: Temperature in °F
* @returns Promise containing calculated water compressibility
*/
async calculateWaterCompressibility(params) {
const response = await this.client.post('/api/pvt/calculatewatercompressibility', params);
return response.data;
}
/**
* Calculates water formation volume factor using specified correlation
* @param params Object containing water properties:
* - correlation: Name of the correlation to use
* - temperature: Temperature in °F
* - pressure: Pressure in psia
* @returns Promise containing calculated water formation volume factor
*/
async calculateWaterFVF(params) {
const response = await this.client.post('/api/pvt/calculatewaterfvf', params);
return response.data;
}
/**
* Calculates oil compressibility using specified correlation
* @param params Object containing oil properties:
* - correlation: Name of the correlation to use
* - api: API gravity of the oil
* - pressure: Pressure in psia
* - temperature: Temperature in °F
* - gas_gravity: Gas specific gravity
* - pb: Bubble point pressure in psia (optional)
* - gor: Gas-oil ratio in scf/STB (optional)
* @returns Promise containing calculated oil compressibility
*/
async calculateOilCompressibility(params) {
const response = await this.client.post('/api/pvt/calculateoilcompressibility', params);
return response.data;
}
/**
* Calculates oil viscosity using specified correlations
* @param params Object containing oil properties and correlation settings:
* - dead_oil_correlation: Correlation for dead oil viscosity
* - saturated_correlation: Correlation for saturated oil viscosity
* - undersaturated_correlation: Correlation for undersaturated oil viscosity
* - api: API gravity of the oil
* - temperature: Temperature in °F
* - pressure: Pressure in psia
* - gas_gravity: Gas specific gravity
* - pb: Bubble point pressure in psia (optional)
* - rs: Solution gas-oil ratio in scf/STB (optional)
* @returns Promise containing calculated oil viscosity
*/
async calculateOilViscosity(params) {
const response = await this.client.post('/api/pvt/calculateoilviscosity', params);
return response.data;
}
/**
* Calculates oil formation volume factor using specified correlation
* @param params Object containing oil properties:
* - correlation: Name of the correlation to use
* - temperature: Temperature in °F
* - pressure: Pressure in psia
* - api: API gravity of the oil
* - gas_gravity: Gas specific gravity
* - pb: Bubble point pressure in psia (optional)
* - initial_gor: Initial gas-oil ratio in scf/STB (optional)
* - co_correlation: Correlation for solution gas-oil ratio (optional)
* @returns Promise containing calculated oil formation volume factor
*/
async calculateOilFVF(params) {
const response = await this.client.post('/api/pvt/calculateoilfvf', params);
return response.data;
}
/**
* Calculates solution gas-oil ratio (Rs) using specified correlation
* @param params Object containing oil properties:
* - correlation: Name of the correlation to use
* - temperature: Temperature in °F
* - pressure: Pressure in psia
* - api: API gravity of the oil
* - gas_gravity: Gas specific gravity
* - pb: Bubble point pressure in psia
* @returns Promise containing calculated solution gas-oil ratio
*/
async calculateRs(params) {
const response = await this.client.post('/api/pvt/calculaters', params);
return response.data;
}
/**
* Calculates pseudopressure for gas reservoirs
* @param params Object containing reservoir properties:
* - reservoir_pressure: Reservoir pressure in psia
* - reservoir_temperature: Reservoir temperature in °F
* - co2: CO2 content in mole fraction (optional)
* - h2s: H2S content in mole fraction (optional)
* - n2: N2 content in mole fraction (optional)
* - correlation_for_gas_viscosity: Correlation for gas viscosity
* - correlation_for_z_factor: Correlation for Z-factor
* - gas_gravity: Gas specific gravity
* @returns Promise containing calculated pseudopressure
*/
async calculatePseudopressure(params) {
const response = await this.client.post('/api/pvt/calculatepseudopressure', params);
return response.data;
}
/**
* Retrieves available correlations for PVT calculations
* @returns Promise containing list of available correlations
*/
async getAvailableCorrelations() {
const response = await this.client.get('/api/correlations-collection');
return response.data;
}
/**
* Checks the API status
* @returns Promise containing API status information
*/
async getApiStatus() {
const response = await this.client.get('/api');
return response.data;
}
/**
* Calculates dead oil viscosity using specified correlation
* @param params Object containing oil properties:
* - correlation: Name of the correlation to use
* - api: API gravity of the oil
* - temperature: Temperature in °F
* @returns Promise containing calculated dead oil viscosity
*/
async calculateDeadOilViscosity(params) {
const response = await this.client.post('/api/pvt/calculatedeadoilvisc', params);
return response.data;
}
/**
* Calculates saturated oil viscosity using specified correlation
* @param params Object containing oil properties:
* - correlation: Name of the correlation to use
* - dead_oil_viscosity: Dead oil viscosity in cp
* - rs: Solution gas-oil ratio in scf/STB
* @returns Promise containing calculated saturated oil viscosity
*/
async calculateSaturatedOilViscosity(params) {
const response = await this.client.post('/api/pvt/calculatesaturatedoilvisc', params);
return response.data;
}
/**
* Calculates undersaturated oil viscosity using specified correlation
* @param params Object containing oil properties:
* - correlation: Name of the correlation to use
* - saturated_oil_viscosity: Saturated oil viscosity in cp
* - api: API gravity of the oil
* - pressure: Pressure in psia
* - pb: Bubble point pressure in psia
* @returns Promise containing calculated undersaturated oil viscosity
*/
async calculateUndersaturatedOilViscosity(params) {
const response = await this.client.post('/api/pvt/calculateundersaturatedoilvisc', params);
return response.data;
}
/**
* Calculates superposition time for multiple phase rates using specified flow regime
* @param params Object containing:
* - time: Array of time values
* - phase_rates: Dictionary containing rate arrays for different phases (e.g., {"oil": [...], "gas": [...], "water": [...]})
* - flow_regime: Flow regime type ('linear', 'bilinear', 'pss', or 'radial')
* @returns Promise containing superposition time arrays for each phase
*/
async calculateSuperpositionTime(params) {
const response = await this.client.post('/api/rta/calculatesuperpositiontime', params);
return response.data;
}
/**
* Calculates derivatives for multiple phase rates using specified flow regime
* @param params Object containing:
* - time: Array of time values
* - phase_rates: Dictionary containing rate arrays for different phases (e.g., {"oil": [...], "gas": [...], "water": [...]})
* - pressure: Array of pressure values (common for all phases)
* - flow_regime: Flow regime type ('linear', 'bilinear', 'pss', or 'radial')
* - p_initial: Initial reservoir pressure
* - fluid_p: List of fluid properties [Temp, Specific_Gravity, API, GOR, MoleFraction_H2S, MoleFraction_CO2, MoleFraction_N2, MoleFraction_H2O]
* - s_ratio: Superposition time ratio for derivative calculation (optional, default is 4.0)
* @returns Promise containing derivative arrays for each phase
*/
async calculateDerivatives(params) {
const response = await this.client.post('/api/rta/calculatederivatives', params);
return response.data;
}
/**
* Calculates superposition time for a single phase using specified flow regime
* @param params Object containing:
* - time: Array of time values
* - rate: Array of rates for a single phase
* - flow_regime: Flow regime type ('linear', 'bilinear', 'pss', or 'radial')
* - phase_name: Optional name for the phase
* @returns Promise containing array of superposition time values
*/
async calculateSinglePhaseSuperpositionTime(params) {
const response = await this.client.post('/api/rta/calculatesinglephasesuper', params);
return response.data;
}
/**
* Calculates derivatives for a single phase using specified flow regime
* @param params Object containing:
* - time: Array of time values
* - rate: Array of rates for a single phase
* - pressure: Array of pressure values
* - flow_regime: Flow regime type ('linear', 'bilinear', 'pss', or 'radial')
* - is_gas: True if gas phase, False if oil phase
* - p_initial: Initial reservoir pressure
* - fluid_p: List of fluid properties [Temp, Specific_Gravity, API, GOR, MoleFraction_H2S, MoleFraction_CO2, MoleFraction_N2, MoleFraction_H2O]
* - s_ratio: Superposition time ratio for derivative calculation (optional, default is 4.0)
* - phase_name: Optional name for the phase
* @returns Promise containing array of derivative values
*/
async calculateSinglePhaseDerivatives(params) {
const response = await this.client.post('/api/rta/calculatesinglephaseders', params);
return response.data;
}
}
exports.SolvxaiClient = SolvxaiClient;