You are on page 1of 170

PIPESIM 2012.

3
Open Link Reference Manual
PIPESIM 2012.3 Open Link Reference Manual

Copyright © 2015 Schlumberger. All rights reserved.

This work contains the confidential and proprietary trade secrets of Schlumberger and may not be copied or stored in an
information retrieval system, transferred, used, distributed, translated or retransmitted in any form or by any means, electronic or
mechanical, in whole or in part, without the express written permission of the copyright owner.

Trademarks & Service Marks

“Schlumberger,” the Schlumberger logotype, and other words or symbols used to identify the products and services described
herein are trademarks, trade names or service marks of Schlumberger and its licensors, or the property of their respective owners.
These marks may not be copied, imitated or used, in whole or in part, without the express prior written permission of Schlumberger.
In addition, covers, page headers, custom graphics, icons, and other design elements may be service marks, trademarks, and/or
trade dress of Schlumberger, and may not be copied, imitated, or used, in whole or in part, without the express prior written
permission of Schlumberger. Other company, product, and service names are the properties of their respective owners.

The Microsoft® Office User Interface is subject to protection under U.S. and international intellectual property laws and is used by
Schlumberger Technology Corporation under license from Microsoft.

An asterisk (*) is used throughout this document to designate a mark of Schlumberger.

Security Notice

The software described herein is configured to operate with at least the minimum specifications set out by Schlumberger. You are
advised that such minimum specifications are merely recommendations and not intended to be limiting to configurations that may
be used to operate the software. Similarly, you are advised that the software should be operated in a secure environment
whether such software is operated across a network, on a single system and/or on a plurality of systems. It is up to you to
configure and maintain your networks and/or system(s) in a secure manner. If you have further questions as to recommendations
regarding recommended specifications or security, please feel free to contact your local Schlumberger representative.

Schlumberger Private – Customer Use


PIPESIM 2012.3 Open Link Reference Manual

Contents
Overview .................................................................................................................... 6
Modules and Interfaces ............................................................................................ 7

Quick Start Tutorial .................................................................................................... 9

Case Study 1 – Building a Well Model from Excel ..................................................... 14


Problem Outline ..................................................................................................... 14
Requirements ........................................................................................................ 14
Procedure ............................................................................................................. 14
Step by step tutorial ............................................................................................... 15

Case Study 2 - Nodal Analysis .................................................................................. 27


Problem Outline ..................................................................................................... 27
Requirements ........................................................................................................ 27
Procedure ............................................................................................................. 27
Step by Step Tutorial.............................................................................................. 28

Modules and Interfaces ............................................................................................ 34


ISingleBranchModel Interface ................................................................................. 35
IObjectProperties Interface ..................................................................................... 43
ITubing Interface ................................................................................................... 44
IVertCompObj Interface ......................................................................................... 47
IFlowlineObj Interface ............................................................................................ 48
IHeatTransfer Interface .......................................................................................... 50
IFluid Interface ...................................................................................................... 51
IProjectInfo Interface ............................................................................................. 52
IErosionCorrosion Interface .................................................................................... 52
INetModel Interface ............................................................................................... 54
ModelBuilder object................................................................................................ 62
IBlackOil object...................................................................................................... 62
ISinglePointCalib object .......................................................................................... 64
IMultiPointCalib object ............................................................................................ 65
IViscosityData object .............................................................................................. 67
IThermal object ..................................................................................................... 69
ICompositional object ............................................................................................. 70
3
PIPESIM 2012.3 Open Link Reference Manual

ICompositional2 object ........................................................................................... 76


FlowCorrelations Interface ...................................................................................... 76
ICFlowCorrelations2 Interface ................................................................................. 78
Single Branch Operations........................................................................................ 78
Systems Analysis ................................................................................................... 79
Pressure and Temperature Profiles .......................................................................... 81
Flow Correlation Comparison .................................................................................. 83
Data Matching ....................................................................................................... 84
Nodal Analysis ....................................................................................................... 87
Wax Deposition ..................................................................................................... 89
Gas Lift Rate vs Casing Head Pressure ..................................................................... 91
Single Branch Operations: Supporting Interfaces ...................................................... 93
IBoundaryProps Interface ....................................................................................... 93
IEngineOptions Interface ........................................................................................ 94
IFactorRange Interface........................................................................................... 94
Gas Lift Diagnostics COM Object ............................................................................. 95
GLWell Interface and Object ................................................................................... 95
IGLDesign Object ................................................................................................. 103
IDesignParams Object .......................................................................................... 107
IDesignBias Object ............................................................................................... 108
IGLValveSystem Object ........................................................................................ 109
Single Branch Output Reader COM ........................................................................ 111
PerformCurve Object ............................................................................................ 116
PNSReaderCOM ................................................................................................... 119
Inflow Performance Calculator COMT ...................................................................... 128
Units Library ........................................................................................................ 131
Reservoir Table.................................................................................................... 133

Defined constants and strings ................................................................................ 137


Object Type Identifiers ......................................................................................... 137
Object Properties ................................................................................................. 138
Tubing object’s properties .................................................................................... 145
Generic Source .................................................................................................... 157
Network Separator (reinjector) .............................................................................. 157

4
PIPESIM 2012.3 Open Link Reference Manual

Artificial Lift ......................................................................................................... 157


Completion Options .............................................................................................. 157
IPR Types (Vertical) ............................................................................................. 158
IPR Types (Horizontal) ......................................................................................... 158
IPR Options (Horizontal) ....................................................................................... 158
Fluid Types.......................................................................................................... 158
Pipe Flow Types................................................................................................... 159
Rate Types .......................................................................................................... 159
Separator Types .................................................................................................. 159
Single Branch Operations...................................................................................... 159
Equations of State................................................................................................ 160
Viscosity Types .................................................................................................... 160
BIP Sets .............................................................................................................. 160
Emulsion Types ................................................................................................... 161

Case Studies ........................................................................................................... 166


Detailed explanation of routine ............................................................................. 166

5
PIPESIM 2012.3 Open Link Reference Manual

Overview
This guide explains how to use Open Link to interface with PIPESIM from external applications.

An overview of the functionality of Open Link is provided, along with the necessary interface functions and
arguments. This allows you to load both network and single branch PIPESIM models, query them
(equipment configuration, gas lift injection, etc.), and perform simulations.

Basic Functions

The functions described in this document fall into the following categories;

 Get functions - Get the results after a simulation or query an item for its current data value, such as
obtaining the choke bean size.
 Set functions - Set a valve to be used in subsequent simulation, such as setting the reservoir pressure.
 Operation functions - Perform an operation on a model, such as running a simulation.

Potential Usage

The Open Link functionality can be used in the following cases:

 Running PIPESIM in batch mode with a number of scenarios.


 Creating custom reports.
 Importing production data from a database and populating the models.
 Running PIPESIM in-conjunction with other Engineering applications. Hyprotech have already used this
functionality to link Hysys and PIPESIM.

Utilizing Open Link

The Open Link functions can be called from any of the following:

 VBA macro. This could be written in Excel, Access, etc.


 Visual Basic programs.
 C++ programs

Supported Interfaces

 INetModel: for network models and network operations


 ISingleBranchModel: for single branch models and operations

Dependency MAP

Open Link can be used to access PIPESIM functionality from external programs. The programs that can
automate PIPESIM simulations are those that are defined as automation clients according to Microsoft
standards, and in the same way, Open Link is an automation server. Typical examples of automation clients
include VBA (Visual Basic for Applications) macros, which can be written from programs such as Excel or
Access, C++ and Visual Basic. Open Link provides therefore an open architecture where you control and

6
PIPESIM 2012.3 Open Link Reference Manual

automate PIPESIM simulation models through custom programs or macros without having to manually
enter the data or view the results using the graphical interface. It is assumed you are familiar with both
PIPESIM and the chosen program or programming language in which the automation code is to be written.
Those new to VBA are recommended to closely follow the Quick Start Tutorial and the Case Studies.

The Open Link functionality is distributed with the PIPESIM installation and is included in a number of library
files.

 The main file is Net32COM.DLL, which normally resides in the programs directory and provides the
framework and main entry points into both networks and single branch simulation models.
Net32COM.DLL must be copied to the PIPESIM programs directory and registered.
 There are other files that support Net32COM, for instance FluidModelCOM.DLL and
FlowCorrelationCOM, which provide access to properties defined in the fluid models and flow
correlations respectively.
 Each library file, in turn, defines at least one interface, which is a logical entry point into a well-defined
area of functionality. Each interface includes a number of public access functions that ‘set’ or ‘get’ a
specified property or just perform operations (that is run a simulation). As an example the
FluidModelCOM library defines two interfaces: IBlackOil, for black oil models and ICompositional, to
deal with compositional models. IBlackOil defines property functions such as API, Watercut or GasSG.
These properties can be ‘set’ (assigned) to a model prior to a simulation run or they can be ‘get’
(retrieved) and copied into an Excel cell.

The Modules and Interfaces section lists the modules and interfaces that are part of Open Link. This
document contains further details of the modules and interfaces, together with some code samples.
Highlighted items represent information that is new, previously unpublished or amended from the previous
PIPESIM release. The present reference guide applies to the release version 2010.

Modules and Interfaces

Net32COM.DLL INetModel Network models and operations


ISingleBranchModel Single branch models and operations
IISingleBranchModel2
IObjectProperties Generic equipment properties
TubingObj Tubing specific properties and operations
InjectorObj Injector specific properties
VertCompObj Vertical completion specific properties
FlowlineObj Flowline specific properties and operations
ErosionCorrosion Erosion and corrosion settings
HeatTransfer Heat transfer properties
PSOpSystems.DLL IISystemsAnalysis Systems Analysis operation
IIPTProfile Pressure/Temp Profiles operation
IICorrMatching Flow Correlation Matching operation

7
PIPESIM 2012.3 Open Link Reference Manual

NodalOp.DLL IINodalAnal Nodal Analysis Operation


FluidModelCOM.DLL IBlackOil Black Oil model properties
ICompositional Compositional model properties
SinglePointCalib BO single point calibration properties
MultiPointCalib BO multipoint calibration properties
ViscosityData BO viscosity properties
Thermal BO thermal properties
FlowCorrelationCOM. CIFlowCorrelation Vertical and horizontal flow correlation properties
DLL ICIFlowCorrelation2
UnitsCOM.DLL IUnitSystem General unit conversions
GLDiagn.DLL GLWell Gas lifted well model for diagnostics
WaxOp.DLL IWaxOp Wax deposition operation
DataMatching.DLL IDataMatchingOp Data matching operation
QgiChpOp.dll.DLL IPlotQgiVsChp Gas Lift Rate vs Casing Head Pressure operation

8
PIPESIM 2012.3 Open Link Reference Manual

Quick Start Tutorial


This quick start guide shows macro code written in VBA using Microsoft Excel. Even though each language
implements its own particular syntax, the basic logic to write an Open Link code or macro will be identical. A
number of case studies along with VBA code using Excel are provided under the ..\Case Studies\Open Link
directory.

1. Before you start - you must let VBA know about the Open Link interfaces. To do this, click on Tools |
References… from the main menu in the VBA window. You should now see a dialog box like this:

2. Scroll down the list of available references until you find the Net32COM 1.0 Type Library. Check the box
to the left of the reference.
3. Now do the same for the FluidModelCOM 1.0 Type Library and for PNSReader 1.0 type library.
4. Click on OK to close the References window.

9
PIPESIM 2012.3 Open Link Reference Manual

Loading and running an existing model

1. Load the existing network model: ‘Small Network.bpn’, which is shipped with the PIPESIM installation
and normally located in:
‘C:\Program Files\Schlumberger\PIPESIM\Case Studies\Network Analysis\Small
Network\’

If the model were opened from the PIPESIM graphical interface it would look like the picture below:

2. Using the VisualBasic editor (you can quickly open it from Excel using the shortcut Alt+F11) create a
variable of the type INetModel to perform the basic interaction with the network model. We will call it
‘NetModel’:
Dim NetModel As New NET32COMLib.INetModel

3. Open the model:


NetModel.OpenModel “‘C:\Program Files\Schlumberger\PIPESIM\Case
Studies\Network Analysis\Small Network\Small Network.bpn’”

4. Run the model (asynchronously):


NetModel.RunNetwork2 False, "-B"

10
PIPESIM 2012.3 Open Link Reference Manual

The first argument, in this case ‘False’, tells the calculation engine not to use a restart file and the
second argument ‘-B’ is an engine switch that instructs the engine to run in batch mode. For more
information on engine commands please refer to the PIPESIM help.
When executing this macro you should see the calculation engine running in the background. This
process is run asynchronously which means that the macro will continue its execution without waiting
for the simulation run to finish.
 If you want your macro to stop until the engine terminates in order to, say, display a result, then you
can replace the line above by the following code:

NetModel.RunNetwork2 False, "-B"


bRunning = NetModel.GetIsModelRunning
While bRunning = True
bRunning = NetModel.GetIsModelRunning
newHour = Hour(Now())
newMinute = Minute(Now())
newSecond = Second(Now()) + 1
waitTime = TimeSerial(newHour, newMinute, newSecond)
Application.Wait waitTime
Wend
MsgBox "Finished..."

This code will run the simulation synchronously. It starts the simulation and then waits until it is
finished. It checks every one second for the engine status through a call to ‘GetIsModelRunning. When
‘GetIsModelRunning’ it returns ‘False’ indicating that the simulation run is finished, the macro code
displays a message box.

Getting results

We would like to display some results from the simulation. The library that reads the results file is
PNSReader and we must create a variable of the type PNSCom in order to extract data from the simulation
output. The public access functions available in PNSReader are detailed in PNSReaderCOM.
HTU UTH

1. Create a PNSCom variable, let’s call it ‘results’:


Dim results As New PNSREADERLib.PNSCom

2. Read the results file. This file is located in the same directory as the model file and has the same file
name but with the extension ‘.pns’:
results.ReadPnsFile(“‘C:\Program Files\Schlumberger\PIPESIM\Case
Studies\Network Analysis\Small Network\Small Network.pns’”)

11
PIPESIM 2012.3 Open Link Reference Manual

3. Get the pressure and temperature at the sink ‘Sink_1’ (see model picture above)
Dim index as Long
Dim pressure as Double
Dim temperature as Double
index = results.GetNodeIndex(“Sink_1”)
pressure = results.GetNodeVariableValue (index, "Pressure")
temperature = results.GetNodeVariableValue (index, "Temperature ")

In the same way variables such as “LiquidRate”, “GasRate”, “MassRate”, “GLR” or “WaterCut” can be
obtained for Sink_1 or any other node in the network.

Changing BlackOil fluid parameters

So far, we have opened, run and obtained results for a network model as it was originally defined within the
PIPESIM graphical interface. In this step, we will change some parameters to the opened model. Here is
where the true power of Open Link starts to show, the Excel spreadsheet may define a range of values to be
tested in the context of a ‘what if’ scenario and multiple simulation jobs may be set up to compare results
for a range of input values for one or more properties.

1. Create a BlackOil variable:


Dim BlackOil As New FLUIDMODELCOMLib.IblackOil

2. Get the BlackOil model from the network


Set BlackOil = NetModel.BlackOilDefault

The BlackOil variable has been ‘filled’ with the values defined in the blackoil model in NetModel. You
can corroborate this by adding a watch with the VBA debugging tool and inspecting the different
variable fields.
3. Set a Watercut value of 15%:
BlackOil.Watercut = 15

4. Set an API value of 27.5:


BlackOil.API = 27.5

5. Set this BlackOil with a modified watercut and API back into the network:
NetModel.BlackOilDefault = BlackOil

6. You can now re-run the model with the new values, get the new results, display them in an Excel cell or
plot, etc.

12
PIPESIM 2012.3 Open Link Reference Manual

Changing a choke property

The following piece of code sets a new value for the choke bean size in “Choke” which is defined in the
single branch model that corresponds to the production well “Well_1”.
NetModel. SetPropertyVal (“Choke”, “Well_1”, "Bean Size", 3.5,
"inches")

The above line sets bean size = 3.5 inches to “Choke” in “Well_1. ”.

Saving the changes

1. Any changes made to a single branch or network model can be saved simply by calling the
SaveModel(…) function.
Dim bOK as Boolean
bOK = NetModel.SaveModel(“C:\MyOpenLinkModels\Network.bpn”)

The argument is the full path to the file where the model will be saved. It can also be re-saved to the
original model file.
2. bOK will be TRUE (1) or FALSE (0) depending on whether the save operation succeeded or not. As with
all Open Link function calls that return a TRUE/FALSE state, a FALSE value indicates that some kind of
error condition occurred and an error description can be obtained by calling GetLastError():
Dim Error as String
If bOK = False Then
NetModel.GetLastError Error
MsgBox errorStr
End If

13
PIPESIM 2012.3 Open Link Reference Manual

Case Study 1 – Building a Well Model from Excel


Problem Outline
It is often desired to build PIPESIM well models from a corporate database. The problem can be solved by:

1. Pasting the wells data in excel.


2. Using a VBA routine containing Open Link statements to automate the Bps files creation.
This case study illustrates the resolution of such a problem.

Requirements
It is assumed that the reader is familiar with the basics of building models in PIPESIM.

No prior knowledge of VBA (Visual Basic For Application) is required. VBA is a programming language that
is accessed from Microsoft Excel. VBA statements can be used to interact with Microsoft Applications.
These statements cannot interact with PIPESIM. Open Link is the name given to a group of statements that
can be used in VBA to interact with PIPESIM.

Procedure
1. Create a Well Model Template. (That is build a well model in PIPESIM but do not fill any of the objects
that make up the model with values). Save the well model template with the name template.bps.
2. Organize the wells data in tabular form in Excel.
3. Write the VBA routine that will create a Bps file for each well of the spreadsheet. (The routine will
make use of the model template.bps as will be shown further down in the text).
4. Run the routine – The Bps are created and stored in a directory specified in the routine.

14
PIPESIM 2012.3 Open Link Reference Manual

Step by step tutorial


To Create a Well Model Template
1. Open PIPESIM – Open a new well performance analysis window as shown below.

2. Create the following Well Model in the opened window.


3. Save the model with the simple model description selected in both the tubing object and the flow line
object.

This is done by double-clicking on both the flowline_1 and tubing_1 object, selecting simple model in
each user form and pressing on the button OK.

4. Save the well model under the name template.bps with the following path:
D:/OpenLink/template/template.bps

15
PIPESIM 2012.3 Open Link Reference Manual

To Create a table of wells data in Excel (2 vertical gas wells)


1. Open Excel.
2. In the Opened workbook, select sheet 1 (the sheet should be selected by default).
3. Create the following table in Excel (4 Rows – 24 Columns).

4. Start the table at the cell $A$4 and finish at the cell $X$7.
5. List of the 24 columns (A to X in order) (The values are given for each column):

Index. (1,2)

Field. (Field1, Field2)

Well Number (435,436)

Gathering Station (Man1,Man2)

Gas Gravity (lbs/cu.ft gas sc) /(lbs/cu.ft air sc). (62,62)

Oil API (Field1, Field2)

GOR scf/bbl (800000,900000)

(10,20)
Water Cut %

Pws Psia (Static pressure of the reservoir). (1800,3000)

Temperature F (200,200)

PI mmscf/d/psi2 (1.5053E-08,1.7427E-7)

Perforation MD m (2104,2104)

16
PIPESIM 2012.3 Open Link Reference Manual

Perforation TVD m (2104,2102)

Tubing 1 MD m (2054,2052)

Tubing 1 ID (2.44,2.44)

Tubing 2 MD (Casing MD) (2104,2104)

Tubing 2 ID (Casing TVD) (5.5,5.5)

Flow line elevation (m) (0,0)

Flow line ID “ (3,3)

Flow line Length km (4.305,1.212)

Choke Size 1/64th”.


P P (95,95)

Gas Rate mmscf/d (0.041,1.39)

Well Head Pressure psia (195,250)

Pressure at the end of the flow line. psia (150,440)

6. In cell $A$8 write the template path: D:/OpenLink/template/template.bps


7. In cell $A$9 write the path in which the Bps files are to be stored:
D:/OpenLink/

8. In cell $D$11 write the surface temperature: 90 F.


9. Save the current workbook under the name Openlink.xls with the following path:
D:/OpenLink/Excel/Openlink.xls

17
PIPESIM 2012.3 Open Link Reference Manual

Preliminary steps
1. Enable Macros in your workbook.
2. Select the Menu tools – Sub Menu Macro – Security as shown below.

The following user form should appear:

3. Select Medium. High does not let the user run any unsigned Macros.
4. Insert a Button in the workbook that will launch the routine.

18
PIPESIM 2012.3 Open Link Reference Manual

First, display the Control Toolbox Toolbars.

5. Then insert a button in the spreadsheet by clicking on the Command Button Icon in the Control Toolbox;
and clicking and dragging the button in the spreadsheet. This is shown below:

Design Mode

Icon.

Command Button
Icon.

19
PIPESIM 2012.3 Open Link Reference Manual

The default name of the button is CommandButton1.

Note: Clicking on the Command Button icon activates the design mode that allows you to place buttons
and other types of controls in the spreadsheet. You will need to deactivate the design mode manually
when you want the routine associated with the button to be executed when you click on it.

6. Next change the name of the button by right-clicking on the button CommandButton1 the following
menu should appear:

7. Click on CommandButton Object Submenu Edit. You can now change the caption of the button
CommandButton1 to: “Create Well Model”.

20
PIPESIM 2012.3 Open Link Reference Manual

8. Open the VBA Editor Windows. As the design mode is activated, it is possible to open the VBA editor
windows by double-clicking on the button CommandButton1. The following window should then
appear:
Private Sub CommandButton1_Click()

End Sub

The window that contains the statements is called the Code window. You write VBA routines in the
Code window. The word Sub in the first line indicates to the computer that it is the beginning of a new
routine. (In effect, several routines can be written in the same Code window). The word
CommandButton1_Click in the first line indicates to the computer that the routine following can only be
executed by clicking on the button CommandButton_1. The statement End Sub indicates to the
computer that this is the end of the routine. Any routine must finish with this statement.

To Activate the Open Link statements Libraries


In order to be able to write our routine using Open Link statements we need to indicate to the computer
that we are going to use those statements. We need to activate those statements so that they can be
understood by VBA.

1. We can activate the Open Link statements by clicking on the menu Tools, submenu References.

21
PIPESIM 2012.3 Open Link Reference Manual

You should now see a dialog box like the one below:

2. Scroll down the list of available references until you find the FluidModelCOM 1.0 Type Library. Check
the box to the left of the reference.
3. Now do the same for Net32COM 1.0 Type Library and NODALOPLib.INodalAnal.
4. Click on OK to close the reference window.

Each of the three library activated is a group of Open Link statements that can be used in VBA to
communicate with PIPESIM. These libraries will be available from Excel after having installed PIPESIM.
They need to be activated before they can be used while programming.
Note: If a routine is passed from one computer to another, and it does not work on the receiving
computer, it is because the Open Link Libraries have not been activated.

22
PIPESIM 2012.3 Open Link Reference Manual

To write the VBA routine using Open Link Statements


1. Write the following routine:
The actual workings of the routine will be explained in Case Studies.
HTU UTH

23
PIPESIM 2012.3 Open Link Reference Manual

24
PIPESIM 2012.3 Open Link Reference Manual

25
PIPESIM 2012.3 Open Link Reference Manual

To Run the routine


1. Go back to Excel and select the two wells with the mouse (by highlighting the corresponding rows) you
will have created two .bps files corresponding to the two wells of the spreadsheet. The directory Open
Link will contain the two .bps Files (shown below).

26
PIPESIM 2012.3 Open Link Reference Manual

Case Study 2 - Nodal Analysis


Problem Outline
It is required to see if our production data is consistent with what the model predicts the flow rate should
be. We will run a nodal analysis on each of the wells. The boundary conditions of the problem are the
reservoir static pressure and the outlet pressure of the model (i.e. the downstream end of the flow line).
The Stock tank gas flow rate at the operation point will be compared to the Gas flow rate given in the
production data.

Requirements
It is assumed that the reader is familiar with the PIPESIM Nodal Analysis User Form.

Procedure
You will write a VBA-Open Link routine that uses the table built in the previous case study. The routine fills
in a Nodal Analysis operation interface using the static pressure, tubing ID and Outlet Pressure stored in
Excel and then assigns this Nodal Analysis operation interface to the Well Models created in Case study 1.
Each of the models is then run. A Nodal Analysis plot (system plot_.plt) is produced for each well. You
can then check on the graphs if the stock tank flow rates at the operation points are consistent with the
production data.

27
PIPESIM 2012.3 Open Link Reference Manual

Step by Step Tutorial


1. Open the Excel File (OpenLink.xls)
D:/OpenLink/Excel/Openlink.xls

2. Insert a second button in the Spreadsheet. This is done using the control toolbox as in Case Study 1.
The default name of the button will be CommandButton2.

3. Open the VBA editor. This is done as in Case Study 1 by double clicking on the button CommandButton2.
The code written for the previous case study will be visible.
Private Sub CommandButton2_Click()
End Sub

At the end of the code, from the previous case study, the statements are visible.

28
PIPESIM 2012.3 Open Link Reference Manual

To Write the VBA routine using Open Link statements


1. Write the routine:
The workings of the routine are explained in Case Studies.
HTU UTH

29
PIPESIM 2012.3 Open Link Reference Manual

30
PIPESIM 2012.3 Open Link Reference Manual

31
PIPESIM 2012.3 Open Link Reference Manual

To Run the routine


1. Go back to Excel and select the two wells (by highlighting the corresponding rows).
2. Press the button CommandButton_2. This runs a nodal analysis on the two .bps files produced in Case
Study 1. The contents of folder Open Link after having run the routine is shown below:

. plt Files.

3. Clicking on the .plt files will display the following graphs:

Plot of Man1_435

32
PIPESIM 2012.3 Open Link Reference Manual

Plot of Man2_436

33
PIPESIM 2012.3 Open Link Reference Manual

Modules and Interfaces


1. Values returned as -7777 mean 'UNSET' or could not calculate do to missing data or has not been
calculated.
2. For all modules and interfaces, required methods are shown in RED, and conditionally required in
GREEN.

34
PIPESIM 2012.3 Open Link Reference Manual

ISingleBranchModel Interface

ISingleBranchModel object - Get Methods

 GetNameList (ObjectType As
T T
Returns in pNameArray an array of String with the names of
Long, pNameArray, Count As objects of the given type (ObjectType). The number of objects
Long) found is returned in Count. ObjectType can be any value of:
1 – Fold
2 – Source
3 – Sink
4 – Junction
5 – Branch
6 – Text
7 – Production Well
8 – Injection Well
9 – End Mark
10 - Generic Source
11 - Vertical Completion
12 - Horizontal Completion
13 – Flowline
14 – Riser
15 - Zero length connector
16 – Tubing
17 - Generic Node
18 – Choke
19 – Compressor
20 – Expander
21 - Heat Exchanger
22 – ESP
23 - Multiphase Booster
24 – Gas Lift
25 – Separator
26 - Report tool
27 - Adder/Multiplier
28 - Nodal Analysis Point
29 - Engine Keyword Tool
30 – Reinjector
31 – Well Connector
32 – SSSV
33 – Gas Lift Valve
34 – Black Box
35 – Coil Tubing
36 – PCP
37 – Rod Pump
 GetEquipmentInfo
T T
If ParentObject string is empty, the function is the same as
(EquipmentType As Long, TGetNameList (…)T. See TGetNameList (…) Tfor a map to
ParentType As Long, ParentObject EquipmentType options. Otherwise it returns in
35
PIPESIM 2012.3 Open Link Reference Manual

As String, EquipmentNames, EquipmentNames array of String with the names of child objects
Count As Long) of the given type (ObjectType) for specified ParentObject of
ParentType
 GetHasArtificialLift (ObjectType
T T
Returns 0: no artificial lift
As Long, ObjectName As String, 1: gas lift injection
Lift As Long)
2: ESP
-1: Object not found
ObjectType must be Tubing type (16)
ObjectName the name of the tubing
 GetStartBoundaryObject
T T
Returns the ObjectType (SeeT GetNameList (…)T) and its name of
(ObjectType As Long, ObjectName the upstream-most object in the single branch model. The
As String) upstream-most object in a branch is determined by the drawing
direction when a user initially creates the branch.
 GetCountObjectsInProfile (Count
T T
Returns the number of objects in the single branch model
As Long)
 GetObjectAtIndex (Index As Long,
T T
Returns the object's type and name at the specified zero-based
ObjectType As Long, ObjectName index. Index must between zero and the number returned by
As String) GetCountObjectsInProfile (…) minus 1.
 GetLastError (ErrorStr As String)
T T
Returns the last error message produced by the interface.
 GetIsModelRunning () As Boolean
T T
Returns Boolean value True if the simulation process is active
 GetOperationInterface
T T Returns the operation object
(pIOperation As Object)
 GetOperationType () As Long
T T
Returns Long value as the operation defined for the model. See
XDefined constants and stringsX
 GetPropertyNames (ObjectName
T T
Returns in PropNames the list of properties defined for the object
As String, PropNames) as Long ObjectName. Returns the number of properties as function’s
return value
 GetPropertyVal (ObjectName As
T T
For specified property (PropName) in the specified object
String, PropName As String, (ObjectName) function gets a property value in ’Value’ and the
pValue As Double, pUnitStr As units in UnitStr. Return value is True if the property was retrieved
String) As Boolean successfully, otherwise False. For implemented PropNames see
XDefined constants and stringsX.
 GetPropertyValAtObjectIndex
T T
Gets a specified property value.
(ObjectName As String, PropName This function extends the functionality of TGetPropertyValT by
As String, pValue As Double, allowing you to retrieve a property from a specified
pUnitStr As String, SubObjectType sub-component within an object. A typical use of this is when for
As Long, Index As Long) As instance it is required to get a gas lift flowrate (PropName) from
Boolean the top (Index = 0) gas lift injection point (SubObjectType) in the
tubing ‘Tubing_1’ (ObjectName). For available options see
XDefined constants and stringsX

36
PIPESIM 2012.3 Open Link Reference Manual

 GetPropertyStringAtObjectIndex
T T
The function is similar to TGetPropertyValAtObjectIndexT but for
(ObjectName As String, PropName properties defined as string
As String, pValue As String, Index
As Long) As Boolean
 GetPropertyType (ObjectName As
T T Returns the property type:
String, PropName As String) As UNDEFINED -1
Long
REAL 0 (value in strict SI units)
INT 1
DOUBLE 2
STR 3
 GetSensitivityInfo (ObjectType As
T T
Returns the list of variable names upon which a sensitivity
Long, ObjectName As String, analysis can be performed for the given object (defined by its
VariableNames, ItemReference) type and name). See TGetNameList ()T for object type values.
ItemReference holds additional binary information about the
sensitivity that is required by some operation module interfaces
(such as the Artificial Lift COM interface)
 GetSensitivityVariables
T T
Requests the list of variable names and their measurements upon
(ObjectName As String, which a sensitivity analysis can be performed for the given object
VariableNames, StdQtyNames) As (defined by name). The return value holds number of the
Long variables
 GetHorizCompWellbore
T T
Return the wellbore as a flowline object of a horizontal
(ObjectName As String, Wellbore, completion with label ObjectName. The method also returns a
As IFlowlineObj) As Boolean boolean to indicate if the return of wellbore is successful
 WasSavedWithObsoletePackage
T
Return if the model was saved with specified obsolete flash
(ObsoletePackgeName As String) package (ObsoletePackgeName)
As Boolean ObsoletePackgeName: “SIS” for SIS flash package, “SPPTS” for
SIEP SPPTS flash package (not case sensitive); otherwise, return
false.
 ReadDefaultPVTFile (PVTFilename
T
Return the file name (PVTFilename) and compositional data
As String, Composition As Object) (Composition) of the PVT file which is used as default fluid in the
As Boolean model.
The return value indicates if the PVT file reading is successful.
 ReadBoundaryPVTFile
T
Return the file name (PVTFilename) and compositional data
(ObjectName As String, (Composition) of the PVT file which is used as local fluid in a
PVTFilename As String, boundary (ObjectName).
Composition As Object) As The return value indicates if the PVT file reading is successful.
Boolean
 GetPVTFile (bstrPVTFilename As
T T
Gets the compositional file (.pvt) set in the fluidmodel of the
String) branch
Note: This gets the pvt file name even if the branch is not in pvt
mode.

37
PIPESIM 2012.3 Open Link Reference Manual

 GetBoundaryProperties (Pressure
T T
Returns the boundary properties set in the model for the single
As Double, Temperature As branch. The branch must be a boundary object (Source, Sink,
Double, Fluidrate As Double, Production Well or Injection Well)
Fluidtype As Long) Pressures in psia
Temperatures in F
Fluidtype = 0 (liquid rate), Fluidrate in STB/D
Fluidtype = 1 (gas rate), Fluidrate in mmscf/d
Fluidtype = 2 (mass rate), Fluidrate in lb/s

ISingleBranchModel object - Set Methods

 SetOperationInterface
T T
pIOperation: The interface instance to an operation object.
(pIOperation As Unknown) This function assigns the given operation to the opened single
branch model
 SetOperationType
T T
Sets the operation type for the single branch model.
(OperationType As Long) See Defined constants and strings
X X

 SetPropertyVal (ObjectName As
T T
Sets the specified property (PropName) in the specified object
String, PropName As String, value (ObjectName) to the value given in Value in the given units
As Double, UnitStr As String) As (UnitStr). Function returns True if the property was set
Boolean successfully, otherwise False. Implemented PropNames:
see Defined constants and strings.
X X

 SetPropertyStringAtObjectIndex
T T
As SetPropertyValAtObjectIndex (…) but for properties defined
T T

(ObjectName As String, PropName as string


As String, value As String, Index As
Long) As Boolean
 SetPropertyValAtObjectIndex
T T
This function extends the functionality of SetPropertyVal by
T T

(ObjectName As String, PropName allowing you to set a property to a specified sub-component


As String, value As Double, UnitStr within an object. A typical use of this is when for instance it is
As String, SubObjectType As Long, required to set a gas lift flowrate (PropName) through the top
Index As Long) As Boolean (Index = 0) gas lift injection point (SubObjectType) in the tubing
‘Tubing_1’ (ObjectName). For available options see Defined
X

constants and strings.X

 SetPVTFile (bstrPVTFilename As
T T
Sets the compositional mode to pvt and the compositional file
String) (.pvt) to be used as the main fluid in the simulations
 SetUnitManager
T T Sets the Unit Manager object
(p_VarUnitManager)
 SetBoundaryProperties (Pressure
T T
Sets the boundary properties set in the model for the single
As Double, Temperature As branch. The branch must be a boundary object (Source, Sink,
Double) Production Well or Injection Well)
Pressures in psia
Temperatures in F

38
PIPESIM 2012.3 Open Link Reference Manual

ISingleBranchModel object - Properties

 BlackOil As Object
T T
Gets/sets the Black Oil fluid definition object
 Composition As Object
T T
Gets/sets the fluid composition object
 FlowCorrelation As Object
T T
Gets/sets the Flow Correlation object
 Fluid As FluidModel
T T
Gets/sets the FluidModel object (See IFlowlineObj
X

Interface)
X

 FluidModelType As Long
T T
Gets/sets the fluid type (0: black oil, 1: compositional, 2:
PVT file, 3: MFL file)
 GasLiftDesign As Object
T T
Gets/sets the Gas Lift Design object
 GasLiftSystemProps As Object
T T
Gets/sets the Gas Lift System Properties object
 ObjectProperties (ObjectName As
T T
Sets/returns a ProfileObject (See IObjectProperties
X

String) As ProfileObj Interface). Depending on the object type of ObjectName


X

this interface can be set to the specific object type


interface. For instance a tubing object returns a
ProfileObject, which can be set to a TubingObj object. The
TubingObj (See ITubing Interface) contains properties and
X X

methods to define or obtain information from a detailed


tubing object.
 ProjectInfo As ProjectInfo
T T
Returns the ProjectInfo object to access project specific
T T

data
 ProjectPath As String
T T
Sets full path name to the model file
 FieldSurvey As Object
T T
Gets/sets the FieldSurvey object
 ErosionCorrosion As Object
T T
Gets/sets the ErosionCorrosion object
 Keywords As String
T T
Gets/sets the additional engine keywords
 HeatTransferOptionsPipeBurialMethod
T
Gets/sets the flag value for heat transfer options pipe
As long burial method:
1983: 1983 method
2000: 2000 method (set to this value if given value is not
1983, 2000, or 2009)
2009: 2009 method
 HeatTransferOptionsIFCMethod As long
T
Gets/sets the flag value for heat transfer options inside
film coefficient method:
1: Kaminsky
2: Kreith Separate Reynolds number (set to this value if
given value is not 1, or 2)
 HeatTransferOptionsUValueMultiplier
T
Gets/sets the value for heat transfer options U value
As double multiplier
 EnableHydrateSubcoolingCalculation As
T
Gets/sets the flag value for heat transfer options hydrate
long subcooling calculation:

39
PIPESIM 2012.3 Open Link Reference Manual

0: disable
1: enable (set to this value if given value is not 0, or 1)
Note: Property is for compositional models only

ISingleBranchModel object - Operations

 ExportEngineFiles ()
T T
This function generates an ASCII file (.psm) in the PIPESIM
engine keyword language that corresponds to the opened
model. This file can then be used with PIPESIM expert
mode.
 ExportEngineFiles2 (operationfile As
T T
In addition to ExportEngineFiles (), this function returns
T T

String) As String the full pathname to the exported file (.psm) and its
associated operation file (.inc)
 ExportEngineFiles3 (nExpertMode As
T T
This function is similar to ExportEngineFiles function
T T

Long) but it allows to specify the format for exported files in


nExpertMode parameter:
0 – default format,
1 – with expert extensions
2 – for ESP design
3 – same as for 1 but warning is displayed if files exist
 KillSimulationProcess ()
T T
Terminates the simulation process
 NewModel (bstrModelFileName As
T T
Creates a new PIPESIM model. bstrModelFileName: full
String, ProfileTypesList, path to the file where the new model is to be saved.
ProfileNamesList) As Boolean ProfileTypesList: a list of object type identifiers (integer
numbers) that describe the object connectivity in the
model – see Defined constants and strings for ids map.
X X

ProfileNamesList: a list of object names for each one of


the elements of ProfileTypesList. This variant may be
empty in which case default names will be assigned. The
method returns True if operation was successful, False
otherwise
 OpenModel (bstrModelFileName As
T T
Opens the given single branch model. Filename must be a
String) valid PIPESIM single branch model file (.bps).
This function must be called first when using this
interface.
Note: Will return false also if the number of component
in any composition or in the model in general is more
than 50.

40
PIPESIM 2012.3 Open Link Reference Manual

 RunSingleBranchModel (bRestart As
T T
Runs the currently opened model by calling the
Boolean) calculation engine program as specified in the PIPESIM
installation. If bRestart is True the simulation will load any
previously restart files (.rst files) as its initial conditions.
Return value is True for successful engine start, False
otherwise.
 RunSingleBranchModel2 (bRestart As
T T
Similar to SetOperationInterface, it also accepts one or
T T

Boolean, EngSwitches As String, more switches to be passed to the simulation engine and
DynamicPlot As Boolean) turns dynamic plotting on/off.
 RunSingleBranchModel3 (bRestart As
T T
Similar to SetOperationInterface2, it also allows using of
T T

Boolean, EngSwitches As String, the Expert extensions


DynamicPlot As Boolean,
ExpertExtensions As Boolean)
 SaveModel (bstrPathName As String) As
T T
Saves the currently opened model to a file given by
Boolean bstrPathName. Function returns True if model is saved,
otherwise the return value is False.
 ValidateTubingConfiguration(MaxInjTV
T
This function checks the tubing configuration above the
D As Double) As Boolean T
injection point to verify that all dimensions are properly
set. If function fails the error message is available using
the GetLastError function.
 SetOutpoutUnits(nUnits As Integer) As
T
This function forces the output to be written in specified
BooleanT
units (0 – model’s default units, 1 – Eng units and 2 – SI
units).

41
PIPESIM 2012.3 Open Link Reference Manual

ISingleBranchModel object – Examples

VBA Sample Code


Dim SingleBranchObj As New NET32COMLib.ISingleBranchModel
Dim equipnames As Variant
Dim sensvarnames As Variant
Dim objref As Variant

Dim count As Long

'Open the model


SingleBranchObj.OpenModel “C:\Program Files\Schlumberger\Pipesim\Case
Studies\Open Link\Gas Lift Performance.bps”

'Export Psm file


Dim ExportFile As String
Dim OperationFile As String
ExportFile = SingleBranchObj.ExportEngineFiles2(OperationFile)

'Get object information

Dim count As Long


Dim objtype As Long
Dim objname As String

SingleBranchObj.GetCountObjectsInProfile count

'Write to the spreadsheet the list of objects in the single branch model
For indx = 0 To count - 1
SingleBranchObj.GetObjectAtIndex indx, objtype, objname
Cells(indx + 1, 1) = objname
Cells(indx + 1, 2) = objtype
Next

'Get Sensitivity Information for the tubing (type = 16) with identifier Tub_1
SingleBranchObj.GetSensitivityInfo 16, Tub_1, sensvarnames, objref

'Write the list of sensitivity variables to the spreadsheet


Dim name As Variant
For Each name In sensvarnames
r.Cells(i, 1) = name
i = i + 1
Next

42
PIPESIM 2012.3 Open Link Reference Manual

IISingleBranchModel2 Interface

IISingleBranchModel2 object - Properties

 UFactorMultiplier As Double
T T
Gets/sets the u-factor multiplier for a single branch model

VBA Sample Code


Dim SingleBranchObj As New NET32COMLib.ISingleBranchModel
Dim SingleBranchObjLnk As NET32COMLib.IISingleBranchModel2
SingleBranchObj.OpenModel “C:\Program Files\Schlumberger\Pipesim\Case
Studies\Well Design and Performance\Flow Correlation Match.bps”
Set SingleBranchObjLnk = SingleBranchObj
Dim strvalue As String
strvalue = "Previous U-Factor multiplier value for the model " +
CStr(SingleBranchObjLnk.UFactorMultiplier)
MsgBox strvalue
'set new u-factor mulplier value for the model
SingleBranchObjLnk.UFactorMultiplier = 2

IObjectProperties Interface

ProfileObj object - Properties

 Fluid As FluidModel
T T
Gets a FluidModel interface object (see description below)

ProfileObj object - Get Methods

 GetLastError () As String
T T
Returns an error description
 GetPropertyNames (PropNames) As
T T
Returns in PropNames the array of properties defined for
Long the object. Function’s return value is the number of
properties
 GetValue (PropName As String,
T T
Gets the specified property (PropName) value in Value in the
pValue, pUnitStr As String, Index As given units (UnitStr). Return value is True if the property was
Long) As Boolean set successfully, otherwise False. Implemented
PropNames: see Defined constants and strings. Index is a
X X

reserved argument, set it to ‘–1’.

ProfileObj object - Set Methods

 SetValue (PropName As String, value,


T T
Sets the specified property (PropName) value in Value in the
UnitStr As String, Index As Long) As given units (UnitStr). Return value is True if the property was
Boolean set successfully, otherwise False. Implemented
PropNames: see Defined constants and strings. Index is a
X X

reserved argument, set it to ‘–1’.

43
PIPESIM 2012.3 Open Link Reference Manual

ITubing Interface

TubingObj Object - Get Methods

 GetCountDownholeEquipment (Type
T T
Returns the number of items specified in the detailed tubing
As Long) As Long model of a given type of equipment
Type: any of
T T

16 – Tubing section
18 - Choke
22 - Centrifugal Pump
24 - Injection Point
25 - Separator
32 – SSSV
33 – Gas Lift Valve
36 – PCP
37 – Rod Pump
(See Object Type Identifiers)
X X

 GetCountTubingSection () As Long
T T
Similar to GetCountDownholeEquipment, but specific to
T T

tubing sections
 GetDeviationSurvey_SI (Type As
T T
Returns in a Variant the matrix of doubles defined as two
Long) As Variant columns and a variable number of rows. The variable in each
column depends in the requested Type.
Type: 0 = md vs. tvd, 1 = md vs. angle, 2 = tvd vs. angle
T T

All values are in strict SI units


 GetDownholeEquipment (Type As
T T
Returns the md (as function’s return value) and the label of a
Long, Index As Long, label As String) given Type of downhole equipment and at given Index.
As Double Type: any of
T T

16 – Tubing section
18 - Choke
22 - Centrifugal Pump
24 - Injection Point
25 - Separator
32 – SSSV
33 – Gas Lift Valve
36 – PCP
37 – Rod Pump
Index: the 0 based positional index of the item. Index = 0
refers to the top-most item closest to the wellhead.
 GetDownholeEquipmentAtIndex
T T
Returns the equipment type, label and md (as function’s

44
PIPESIM 2012.3 Open Link Reference Manual

(Index As Long, Type As Long, label As return value) in strict SI units at a given Index.
String) As Double See GetDownholeEquipment for definition of Index
T T

 GetGeothermalSurvey_SI (vbIsTVD
T T
Returns the geothermal survey in Variant matrix of doubles
As Boolean) As Variant defined as three columns and a variable number of rows.
The columns are defined as Depth vs. Ambient Temperature
vs. U value. Depth is TVD if vbIsTVD = true, otherwise MD
 GetTubingSection (Index As Long,
T T
Similar to GetDownholeEquipment, but specific to tubing
T T

label As String) As Double sections


 GetMDatTVD_SI (tvd As Double) As
T T
Returns the md given the tvd based on the deviation survey
Double
 GetTVDatMD_SI (md As Double) As
T T
Returns the tvd given the md based on the deviation survey
Double
 GetInputOK (info As String) As
T T
Validates the tubing data and returns True if configuration is
Boolean correct, otherwise the function returns False and info
contains the error message

TubingObj Object -Set Methods

 SetDeviationSurvey_SI (Type As
T T
Sets a deviation survey to a detailed tubing model.
Long, Survey) As Boolean See GetDeviationSurvey_SI for available types. Survey
T T

must be a variant matrix of double values specified as a


two-column table with any number of rows (minimum 2).
The variable types of columns are determined as following:
Type 0 (default): md, tvd;
Type 1: md, angle;
Type 2: tvd, angle.
 SetGeothermalSurvey_SI (vbIsTVD
T T
Sets a geothermal survey to a detailed tubing model.
As Boolean, Survey) As Boolean See GetGeothermalSurvey_SI for definition of Survey and
T T

vbIsTVD.

TubingObj Object -Properties

 InjectionPointFluid (Index As Long)


T T
Gets/sets the FluidModel object for the injection point at a
As FluidModel given index. An index of -1 will return the fluid of the gas lift
node in the simple model of the tubing. An index of -2 will
return the fluid of the remedial coiled tuning in the detailed
model of the tubing. It is the user resposability to make sure
the information he is asking is consistent with the mode he
is in. This function is only applicable for compositional
models. See ISinglePointCalib object. X

 RemedialCoiledTubingEnabled As
T T
Enables/disables Remedial Coiled Tubing option in
Boolean configuration

45
PIPESIM 2012.3 Open Link Reference Manual

TubingObj Object - Operations

 AddDownholeEquipment (Type As
T T
Adds an equipment item to the detailed tubing
Long, md_SI As Double, label As Type: any of
String) As Long
22 - Centrifugal Pump
24 - Injection Point
25 - Separator
32 – SSSV
33 – Gas Lift Valve
36 – PCP
37 – Rod Pump
label: the item’s label
Function returns the 0 based positional index of the added
item. Index = 0 refers to the top-most item closest to the
wellhead
 AddGasLiftValve_SI (md As Double,
T T
Adds a gas lift valve to the tubing object. Returns the
manuf As String, series As String, zero-based index corresponding to the valve position with
portName As String, portSize As index of the topmost valve equal to 0.
Double, mode As String, ptro As
Double, Ap As Double, Ab As Double,
nomOD As Double, cv As Double,
dpfo As Double) As Long
 AddTubingSection (BottomMD_SI As
T T
Adds a section of tubing
Double, label As String) As Long BottomMD_SI: the bottom md of the section in strict SI units
label: the item’s label
Function returns the 0 based positional index of the added
section
 ClearGasLiftValves ()
T T
Removes all gas lift valves from the tubing
 RemoveDownholeEquipment (Type
T T
Removes a piece of equipment of a given type and at the
As Long, Index As Long) given Index.
Type: any of
22 - Centrifugal Pump
24 - Injection Point
25 - Separator
32 – SSSV
33 – Gas Lift Valve
36 – PCP
37 – Rod Pump
Index: the 0 based positional index of the item. Index = 0
refers to the top-most item closest to the wellhead

46
PIPESIM 2012.3 Open Link Reference Manual

 RemoveTubingSection (Index As
T T
Similar to RemoveDownholeEquipment but applicable to
T T

Long) tubing sections


 DisplayDialog (p_VarUnitManager,
T T
Function invokes tubing configuration dialog and returns
fluidtype As Integer) As Boolean True if OK button was clicked, False otherwise.
p_VarUnitManager is a Units Manager object and fluidtype
can be one of the following values:
0: black oil
1: composition
2: PVT file
3: MFL file

IVertCompObj Interface

VertCompObj Object - Get Methods

 GetInputOK (info As String) As


T T
Validates the flowline data and returns True if configuration
Boolean is correct, otherwise the function returns False and info
contains the error message

VertCompObj Object - Set Methods

 SetMultipoint(value As Long) As
T
Set either multipoint=1 or isochronal=0 type of IPR data
Boolean T
table
 SetIPRFluidType(Type As Long) As
T Set fluid type for IPR: type_liquid=0, type_gas=1
Boolean T

 SetIPRTable_SI(QPPoints) As Boolean
T T
Sets the IPR table values. QPPoints is a 3-column array of
T

Doubles, where first column contains Flowrate values,


second column contains Pwf values and the third one
contains Pws values. All values are in strict SI units
 GetConingTableData(IsUsed As
T
Returns the coning table data for the vertical completion.
Boolean, ConedGasSG As Double, IsUsed is TRUE if it is set and FALSE otherwise, ConedGasSG
T

Flowrate, GOR, WCut) As Boolean T


contains a value for coned gas specific gravity, Flowrate,
T T

GOR and WCut are the one-column arrays of Doubles


containing flowrate, GOR and watercut values respectively.
All values are in Eng units
T

 GetPSSRelPermTableData(WaterSat,
T
Returns the relative permeability table data for the vertical
RelPermOil, RelPermWater) As completion with pseudo steady state model. WaterSat,
Boolean T
RelPermOil and RelPermWater are the one-column arrays of
Doubles containing water satuation, relative permeability for
oil and relative permeability for water, respectively. All
values are in Eng units
T

47
PIPESIM 2012.3 Open Link Reference Manual

VertCompObj Object - Operations

 CalculateIPR() As Boolean
T T

 DisplayDialog (p_VarUnitManager)
T T
Function invokes Vertical Completion configuration dialog
As Boolean and returns True if OK button was clicked, False otherwise.
Pass a Null variant as the argument’s value.

VertCompObj Object - Properties

 Fluid As FluidModel
T T
Gets a FluidModel interface object
Note: This is a get only property.

IFlowlineObj Interface

FlowlineObj Object - Properties

 HeatTransfer As Object
T T
Gets/sets HeatTransfer object

FlowlineObj Object - Get Methods

 GetInputOK (info As String) As


T T
Validates the flowline data and returns True if configuration
Boolean is correct, otherwise the function returns False and info
contains the error message

FlowlineObj Object - Operations

 AddProfileNode_SI (distance As
T T
Adds a node to the flowline detailed node description. All
Double, elevation As Double, values must be given in strict SI units.
ambientT As Double, uValue As
Double, label As String)
 ClearDetailedProfile ()
T T
Deletes all nodes in the flowline detailed profile
 UseDetailedProfile (UseDetailed As
T T
UseDetailed = True: instructs the flowline to use the detailed
Boolean) profile description.
UseDetailed = False: use the flowline’s simple description,
detailed nodes will be generated automatically.
 DisplayDialog (p_VarUnitManager)
T T
Function invokes flowline configuration dialog and returns
As Boolean True if OK button was clicked, False otherwise. Pass a Null
variant as the argument’s value.
 GetNodesCount () As Long
T T
Function returns a number of nodes defined in a detailed
profile

48
PIPESIM 2012.3 Open Link Reference Manual

 GetPipeOD (od as Double, units as


T T
Function calculates pipe’s OD based on coating properties
String)

49
PIPESIM 2012.3 Open Link Reference Manual

IHeatTransfer Interface

HeatTransfer Object - Properties

 UValueType As Long
T T
Gets/sets U Value type. Possible values are 0 for calculated,
1 for insulated, 2 for coated, 3 for bare in air, 4 for bare in
water and 5 for user-specified
 IsIFCIncluded As Boolean
T T
Gets/sets a Boolean value for inside filem coefficient. True if
IFC is included in U Value and False if it is calculated
separately.
 AmbientFluidType As Long
T T
Gets/sets an ambient fluid type. 0 for air and 1 for water.

HeatTransfer Object - Get Methods

 GetUValue (uVal as Double, units as


T T
Returns U Value and units string. Fails if UValueType is set to
T

String) calculatedT

 GetPipeConductivity (dblVal as
T T
Returns pipe conductivity value and units string. Fails
Double, units as String) if UValueType is not calculated
T U U T

 GetAmbientFluidVelosity (dblVal as
T T
Returns ambient fluid velocity value and units string. Fails
Double, units as String) if UValueType is not calculated
T U U T

 GetBurialDepth (dblVal as Double,


T T
Returns pipe burial depth value and units string. Fails
units as String) if UValueType is not calculated
T U U T

 GetGroundConductivity (dblVal as
T T
Returns ground conductivity value and units string. Fails
Double, units as String) if UValueType is not calculated
T U U T

 GetCoatingData_SI (varData)
T T
Returns a pipe coating data array. First column containts
layer-specific conductivity values and a second column
containts layer thicknesses. Fails if UValueType is not
T U U

calculatedT

HeatTransfer Object - Set Methods

 SetUValue (uVal as Double, units as


T T
Sets U Value in specified units. Fails if UValueType is set to
T

String) calculatedT

 SetPipeConductivity (dblVal as
T T
Sets pipe conductivity value in specified units. Fails
Double, units as String) if UValueType is not calculated
T U U T

 SetAmbientFluidVelosity (dblVal as
T T
Sets ambient fluid velocity value in specified units. Fails
Double, units as String) if UValueType is not calculated
T U U T

 SetBurialDepth (dblVal as Double,


T T
Sets pipe burial depth value in specified units. Fails
units as String) if UValueType is not calculated
T U U T

50
PIPESIM 2012.3 Open Link Reference Manual

 SetGroundConductivity (dblVal as
T T
Sets ground conductivity value in specified units. Fails
Double, units as String) if UValueType is not calculated
T U U T

 SetCoatingData_SI (varData)
T T
Sets a pipe coating data. Data has to be passed as an array
where first column containts layer-specific conductivity
values and a second column containts layer thicknesses. Fails
if UValueType is not calculated
T U U T

IFluid Interface

FluidModel Object - Properties

 Composition As Object
T T
Accesses the ICompositional object (See ISinglePointCalib
object)
X

 BlackOil As Object
T T
Accesses the IBlackOil object (Ref IBlackOil )
XTU UTX

 FluidModelType As Long
T T
Retrieves the fluid model type: 0: BlackOil, 1: Compositional,
2 PVT File, 3 MFL File
 OverrideValues As Boolean
T T
Sets/gets whether Wcut/GOR values are overridden from
the values defined in the fluid model.
 WCutoverride_SI As Double
T T
Accesses the watercut override value
 GORoverride_SI As Double
T T
Accesses the GOR override value
 OGRoverride_SI As Double
T T
Accesses the OGR override value
 LGRoverride_SI As Double
T T
Accesses the LGR override value
 GLRoverride_SI As Double
T T
Accesses the GLR override value
 GORoverride_Type As Integer
T T
Accesses which GOR type is being overridden (0=GLR,
1=GOR, 2=LGR, 3=OGR)
 IsLocalFluid As Boolean
T T
Sets/gets whether the object is using a local fluid model
 CompositionType As Long
T T
Sets/gets whether the local composition is a PVT file or a
defined PIPESIM composition or local MFL file
 FluidName As String
T T
Sets/gets a fluid name
 PVTFile As String Sets/gets a fluid pvt file. Note that the pvtfile is returned
even if the current mode is not a compositional pvt. You
need to use the properties FluidModelType and
CompositionType to set or check what is the active mode.

FluidModel Object - Get Methods

 GetInputOK (info As String) As


T T
Validates the fluid model data and returns True if
Boolean configuration is correct, otherwise the function returns False
and info contains the error message

51
PIPESIM 2012.3 Open Link Reference Manual

FluidModel Object - Operations

 DisplayDialog (p_VarUnitManager)
T T
Function invokes fluid configuration dialog and returns True
As Boolean if OK button was clicked, False otherwise. Pass a Null
variant as the argument’s value.

IProjectInfo Interface

ProjectInfo Object - Properties

 Description As String
T T
Gets/sets string property
 User As String
T T
Gets/sets string property
 Job As String
T T
Gets/sets string property
 Company As String
T T
Gets/sets string property
 Manager As String
T T
Gets/sets string property
 Remarks As String
T T
Gets/sets string property
 Date As String
T T
Gets/sets string property
 Field As String
T T
Gets/sets string property
 WellNumber As String
T T
Gets/sets string property
 Lease As String
T T
Gets/sets string property
 Country As String
T T
Gets/sets string property
 Address As String
T T
Gets/sets string property
 Email As String
T T
Gets/sets string property
 Phone As String
T T
Gets/sets string property
 Fax As String
T T
Gets/sets string property

IErosionCorrosion Interface

ErosionCorrosion Object - Properties

 CalculatePH As Long
T T
Gets/sets value for Actual pH property (1 – calculate value, 0
– use user-defined pH value)
 CorrosionEfficiency As Double
T T
Gets/sets corrosion efficiency value
 CorrosionModel As Long
T T
Gets/sets value for Corrosion Model property (0 – none, 1 –
use de Waard (1995) model )
 ErosionEfficiency As Double
T T
Gets/sets erosion efficiency value
 ErosionModel As Long
T T
Gets/sets value for Erosion Model property (0 – API 14e
model, 1- SALAMA (2000))

52
PIPESIM 2012.3 Open Link Reference Manual

 ErosionRate_Eng As Double
T T
Gets/sets acceptable erosion rate value
 ErosionVelocityConst As Double
T T
Gets/sets erosion velocity constant value
 GeometryConstant As Double
T T
Gets/sets geometry constant value
 SandGrainSize_Eng As Double
T T
Gets/sets sand grain size value
 SandProdRatio As Double
T T
Gets/sets sand production ratio value
 UserDefinedPH As Double
T T
Gets/sets user-defined pH value

ProjectInfo Object Example

VBA Sample Code


Dim SingleBranchObj As New NET32COMLib.ISingleBranchModel
Dim equipnames As Variant
Dim sensvarnames As Variant
Dim objref As Variant

Dim count As Long

'Open the model


SingleBranchObj.OpenModel “C:\Program Files\Schlumberger\PIPESIM\Case Studies\Open
Link\Gas Lift Performance.bps”

'Export Psm file


Dim ExportFile As String
Dim OperationFile As String
ExportFile = SingleBranchObj.ExportEngineFiles2(OperationFile)

'Get object information

Dim count As Long


Dim objtype As Long
Dim objname As String

SingleBranchObj.GetCountObjectsInProfile count

'Write to the spreadsheet the list of objects in the single branch model
For indx = 0 To count - 1
SingleBranchObj.GetObjectAtIndex indx, objtype, objname
Cells(indx + 1, 1) = objname
Cells(indx + 1, 2) = objtype
Next

'Get Sensitivity Information for the tubing (type = 16) with identifier Tub_1
SingleBranchObj.GetSensitivityInfo 16, Tub_1, sensvarnames, objref

'Write the list of sensitivity variables to the spreadsheet


Dim name As Variant
For Each name In sensvarnames
r.Cells(i, 1) = name
i = i + 1
Next

53
PIPESIM 2012.3 Open Link Reference Manual

INetModel Interface

INetModel Interface - Get Methods

 DoesCustomKeyExists (KeyName as String) as


T T
Returns true if custom data has been stored
Boolean against the KeyName string

 GetNameList (ObjectType As Long,


T T
Returns in pNameArray an array of String with the
pNameArray, Count As Long) names of objects of the given type (ObjectType).
The number of objects found is returned in Count.
ObjectType can be any of:
1 - Folder
2 - Source
3 - Sink
4 - Junction
5 - Branch
6 - Text Object
7 - Production Well
8 – Injection Well
 GetHasArtificialLift (ObjectType As Long,
T T
Returns:
ObjectName As String, Lift As Long) 0: no artificial lift
1: gas lift injection
2: ESP
-1: Object not found
ObjectType must be Tubing type (16)
ObjectName the name of the tubing
 GetEquipmentInfo (EquipmentType As Long,
T T
Returns the names of equipment of type
ParentType As Long, ParentObject As String, EquipmentType (See GetNameList () for the
T T

EquipmentNames, Count As Long) ISingleBranch object for available types), which are
part of the single branch model of object
ParentObject of type ParentType. ParentType
should be ProductionWell (7), InjectionWell (8), or
Branch (5)
 GetLastError (ErrorStr As String)
T T
Returns the last error message produced by the
interface
 GetBoundaryProperties (ObjectName As
T T
Returns the boundary properties set in the model
String, Pressure As Double, Temperature As for object with identifier ObjectName. ObjectName
Double, Fluidrate As Double, Fluidtype As must be a boundary object (Source, Sink,
Long) Production Well or Injection Well)
Pressures in psia

54
PIPESIM 2012.3 Open Link Reference Manual

Temperatures in F
Fluidtype = 0 (liquid rate), Fluidrate in STB/D
Fluidtype = 1 (gas rate), Fluidrate in mmscf/d
Fluidtype = 2 (mass rate), Fluidrate in lb/s
 GetBoundaryProperties_SI
T T
Similar to GetBoundaryProperties except that this
T T

(ObjectName As String, Pressure As Double, function returns the properties in strict SI units.
Temperature As Double, Fluidrate As Double,
fluidtype As Long)
 GetBoundaryBlackOil (ObjectName As String,
T T
Gets the BlackOil object used by the source with
BlackOil As Object) As Boolean identifier ObjectName. Only applicable for
BlackOil models. The function returns True in case
of success and False otherwise
 GetBoundaryComposition (ObjectName As
T T
Gets the Compositional object used by the source
String, Composition As Object) As Boolean with identifier ObjectName. Only applicable for
compositional models, The function returns True in
case of success and False otherwise
 GetBoundaryCompositionType (ObjectName
T T Returns the composition model location used by
As String, Type As Long) the ObjectName source object:
0: object is using a locally defined composition
1: object is using a locally defined PVT file
2: object is using the models globally defined
composition or PVT file
3: object is using a locally defined MFL file
 GetBoundaryPVTFile (ObjectName As String,
T T
Gets the PVT file used by the source with identifier
PVTFilename As String) As Boolean ObjectName. Only applicable for
Compositional/PVT models
 GetBoundaryType (ObjectName As String,
T T
Returns the boundary condition type specified for
Type As Long, CurveOption As Long) the ObjectName source:
Type = 0 pressure and/or flowrate specified
Type = 1 PQ curve specified
If Type = 1 then CurveOption returns:
CurveOption = 0 create curve when required
CurveOption = 1 create curve at every engine run
CurveOption = 2 use a specified PQ curve file
 GetCountObjectsInProfile (NetObjectName As
T T
Returns the number of objects in the single branch
String) As Long model defined for NetObjectName.
 GetIsModelRunning () As Boolean
T T
Returns True if simulation is running
 GetPropertyNames (ObjectName As String,
T T
Returns in PropNames the list of properties
ParentName As String, PropNames) As Long defined for the object ObjectName. If ObjectName
is defined at the single branch level then
ParentName must be the identifier for its parent

55
PIPESIM 2012.3 Open Link Reference Manual

Network object. Return value is the number of


properties
 GetPropertyVal (ObjectName As String,
T T
For specified property (PropName) in the specified
ParentName As String, PropName As String, object (ObjectName) function gets a property value
pValue As Double, pUnitStr As String) As in Value and the units in UnitStr. Return value is
Boolean True if the property was retrieved successfully,
otherwise False. ParentName is the object at the
network level and should define ObjectName in its
single branch model. To get properties of an object
at network level, then ObjectName needs to be the
object name at network level and ParentName
needs to be empty. Implemented PropNames:
see Defined constants and strings
X X

 GetPropertyValAtObjectIndex (ObjectName
T T
Gets a specified property value.
As String, ParentName As String, PropName As This function extends the functionality
String, pValue As Double, pUnitStr As String, of GetPropertyVal by allowing you to retrieve a
T T

SubObjectType As Long, Index As Long) As property from a specified sub-component within


Boolean an object. A typical use of this is when for instance
it is required to get a gas lift flowrate (PropName)
from the top (Index = 0) gas lift injection point
(SubObjectType) in the tubing ‘Tubing_1’
(ObjectName). ParentName is the object at the
network level and should define ObjectName in its
single branch model. For available options
see Defined constants and strings
X X

 GetPropertyStringAtObjectIndex (ObjectName
T T
The function is similar
As String, ParentName As String, PropName As to GetPropertyValAtObjectIndex (…) but for
T T

String, pValue As String, Index As Long) As properties defined as string


Boolean
 GetSingleBranchModel (NetObjectName As
T T
Returns the ISingleBranchModel object for the
String) As ISingleBranchModel NetObjectName specified
 GetSingleBranchModelWithNetworkOverrides Returns the ISingleBranchModel object for the
T T

(NetObjectName As String, OverrideFlags As NetObjectName specified, populated with network


Long) As ISingleBranchModel level overrides for Flow Correlations, GOR, and
Water Cut. OverrideFlags is a set of bit flags that
provides control over which overrides are active.
(override_gor = 1, override_wcut = 2,
override_flow_correlations = 4, override_all = -1)
 GetNamesInFolder(FolderName As String,
T
Returns in pNameArray an array of String with the
ObjectType As Long, pNameArray, Count As names of objects of the given type (ObjectType).
Long)T
The number of objects found is returned in Count.
All allowed ObjectType values are described
for GetNameList function
T T

56
PIPESIM 2012.3 Open Link Reference Manual

 GetNodeCooordinates(ObjectName As String,
T
Returns the array of coordinates for GUI element
pCoordArray) As BooleanT
with name in ObjectName parameter. Values are
T

central point X, central point Y, left, top, right, and


bottom T

 GetConnectionInfo(pBranchArray,
T
Returns the array of all branch names, the array of
pSNodeArray, pENodeArray) As Boolean T
starting nodes and the array of ending nodes for
those branches.
Note: The start and end nodes are determined by
the branch geometry (e.g., for flowline, it is
consistent with the arrow icon direction)
 GetBoundaryCurveFile(ObjectName As String)
T
Returns the offline curve file name for the
As String
T
specified well name
 GetCustomData(KeyName As String, pValue)
T
Returns a variant byte array of the custom data
As Boolean T
that has been stored against the supplied
KeyName string
 GetCustomKeys(pKeyNameArray) As Boolean
T T
Returns an array of the KeyNames strings for which
custom data has been stored
 GetFlowrateLimits_SI(ObjectName as String)
T
Returns a two-column array of Doubles for
As Variant T
specified branch. First column contains lower
limits for mass flowrate, liquid flowrate, water
flowrate, oil flowrate and gas flowrate. The second
one contains upper limits for the same rates.
Note that the support of lower limits has been
discontinued but the interface has not changed.
Therefore, the lower limits values returned are all
unset.
 IsLocalFlowCorrelationUsed(ObjectName as
I
Returns True is a branch or well uses locally
String) As Boolean defined flow correlation and False otherwise
 WasSavedWithObsoletePackage
T
Return if the model was saved with specified
(ObsoletePackgeName As String) As Boolean obsolete flash package (ObsoletePackgeName)
ObsoletePackgeName: “SIS” for SIS flash package,
“SPPTS” for SIEP SPPTS flash package (not case
sensitive); otherwise, return false.
 ReadDefaultPVTFile (PVTFilename As String,
T
Return the file name (PVTFilename) and
Composition As Object) As Boolean compositional data (Composition) of the PVT file
which is used as default fluid in the model.
The return value indicates if the PVT file reading is
successful.

57
PIPESIM 2012.3 Open Link Reference Manual

 ReadBoundaryPVTFile (ObjectName As String,


T
Return the file name (PVTFilename) and
PVTFilename As String, Composition As Object) compositional data (Composition) of the PVT file
As Boolean which is used as local fluid in a boundary
(ObjectName).
The return value indicates if the PVT file reading is
successful.
 GetPVTFile (bstrPVTFilename As String,
T T
Gets the compositional file (.pvt) set in the
bPVTMode As BOOL) fluidmodel of the network and also the PVTMode.
bPVTMode : true if the compositional mode is PVT
Note: This gets the pvt file name even if the
network is not in pvt mode.

INetModel Interface - Set Methods

 SetBoundaryBlackOil (ObjectName
T T
Sets a BlackOil object to a given source. The function
As String, BlackOil As Object) As returns True in case of success and False otherwise
Boolean
 SetBoundaryComposition
T T
Sets a compositional object to a source with identifier
(ObjectName As String, Composition ObjectName. Only applicable for compositional models. The
As Object) As Boolean function returns True in case of success and False otherwise
 SetBoundaryCurveFile (ObjectName
T T
Sets the source boundary condition as defined by the curve
As String, CurveFileName As String) in file CurveFileName. The format of the file must be that of
As Boolean a plot file revision C or later. One way to generate a
boundary file is using the Well Performance Curves
operation in PIPESIM. The object identified by
ObjectName must be a Production Well.
 SetBoundaryFluidrate (ObjectName
T T
Sets the given value in the given units as fluidrate boundary
As String, Fluidtype As Long, value condition for source object ObjectName. Fluidtype can be
As Double, UnitStr As String) any of:
0 = liquid rate, 1 = gas rate, 2 = mass rate
 SetBoundaryPressure (ObjectName
T T
Sets the given value in the given units as pressure boundary
As String, value As Double, UnitStr condition for source object ObjectName. The boundary
As String) pressure could be the pressure of a generic source in
network, or a generic source in a well branch, or a
completion (bottom most if multiple) in a well branch.
 SetBoundaryPVTFile (ObjectName
T T
Sets a PVT file to a given source. PVTFilename must contain
As String, PVTFilename As String) As the full path to a PVT file
Boolean
 SetBoundarySourcePQPoints
T T
Sets a number of pressure and flowrate pairs as a boundary
(ObjectName As String, PQPoints, condition to the referred ObjectName. PQPoints is a
fluidtype As Long, PressureUnits As 2-dimensional array of pressure/flowrate values. The object
String, FlowrateUnits As String) As must be of the type generic source. Number of data points
Boolean cannot exceed 30.

58
PIPESIM 2012.3 Open Link Reference Manual

 SetBoundaryTemperature
T T
Sets the given value in the given units as temperature
(ObjectName As String, value As boundary condition for source object ObjectName. The
Double, UnitStr As String) boundary temperature could be the temperature of a
generic source in network, or a generic source in a well
branch, or a completion (bottom most if multiple) in a well
branch.
 SetBoundaryType (ObjectName As
T T
Sets the type of boundary condition for source object
String, Type As Long, CurveOption ObjectName.
As Long) Type = 0 for pressure and flowrate boundary condition
Type = 1 for curve
If the Type is curve (1) AND the source object is a
Production Well then CurveOption controls how the
wells-offline file is created or used:
CurveOption = 0 create automatically when required
CurveOption = 1 create automatically every time engine is
run
CurveOption = 2 use file (See SetBoundaryCurveFile (…))
 SetPropertyVal (ObjectName As
T T
Sets the specified property (PropName) in the specified
String, ParentName As String, object (ObjectName) to the value given in Value in the
PropName As String, value As given units (UnitStr). Function returns True if the property
Double, UnitStr As String) As was set successfully, otherwise False. ParentName is the
Boolean object at the network level and should define ObjectName
in its single branch model. If properties of an object at
network level needs to be set, then ObjectName needs to
be the object name at network level and ParentName
needs to be empty. Implemented PropNames: see Defined
X

constants and strings.


X

 SetPropertyValAtObjectIndex
T T
This function extends the functionality of SetPropertyVal
(ObjectName As String, ParentName by allowing you to set a property to a specified
As String, PropName As String, value sub-component within an object. A typical use of this is
As Double, UnitStr As String, when for instance it is required to set a gas lift flowrate
SubObjectType As Long, Index As (PropName) through the top (Index = 0) gas lift injection
Long) As Boolean point (SubObjectType) in the tubing ‘Tubing_1’
(ObjectName) which is defined for Well_1 (ParentName).
For available options see Defined constants and strings.
X X

 SetPropertyStringAtObjectIndex
T T
Similar to SetPropertyValAtObjectIndex (…) except that
(ObjectName As String, ParentName PropName is a string type property.
As String, PropName As String, value
As String, Index As Long) As Boolean
 SetPVTFile (bstrPVTFilename As
T T
Sets the compositional mode to pvt and the compositional
String) file (.pvt) to be used as the main fluid in the simulations
 SetSingleBranchModel
T T
Sets the underlying single branch model by way of its
(NetObjectName As String, filename associated .bps file to a network object.
As String) As Boolean

59
PIPESIM 2012.3 Open Link Reference Manual

 SetCustomData(KeyName As String,
T
Stores a variant array of byte data against a KeyName
pValue) As Boolean T
string. This can be used to persist additional custom data,
and can later be retrieved by specifying the KeyName
 SetFlowrateLimits_SI(ObjectName
T
Sets flowrate limits for specified branch passing a
as String, Limits) T
two-column array of Doubles. First column contains lower
limits for mass flowrate, liquid flowrate, water flowrate, oil
flowrate and gas flowrate. The second one contains upper
limits for the same rates.
Note: The support of lower limits has been discontinued
but the interface has not changed. Therefore, the lower
limits values provided are not stored, nor used and will be
overridden by the default unset values for flow limits.

INetModel Interface - Properties

 BlackOilDefault As Object
T T
Gets/sets the default BlackOil model to/from a BlackOil
object
 CompositionDefault As Object
T T
Gets/sets the default composition to/from a Composition
object
 FlowCorrelation As Object
T T
Gets/sets the flow correlation properties to/from a
FlowCorrelation object
 UseNetworkFlowCorrelationOption
T
Gets/sets the flag value to use network flow correlation
sControl As Long
T
options control (if = 1) or to use local branch options (if = 0)
 FluidModelType As Long
T T
0: BlackOil, 1: Compositional, 2: PVT File, 3: MFL File
 LocalFluid (ObjectName As String)
T T
Gets/sets the Fluid object for the specified object
As FluidModel (ObjectName)
 ModelFileName As String
T T
Returns the file path of the current model
 ModelBuilder As ModelBuilder
T T
Returns a ModelBuilder object - see ModelBuilder
X X

 ProjectInfo As ProjectInfo
T T
Get the ProjectInfo object to access project specific data
 ErosionCorrosion As Object
T T
Gets/sets the ErosionCorrosion object
 UseNetErCorrSettings As Long
T T
Gets/sets the flag value to use network erosion & corrosion
settings over local branches settings (if = 1) or to use local
settings otherwise
 BottomKeywords As String
T T
Gets/sets the network engine keywords to be added at
bottom of tnt file
 TopKeywords As String
T T
Gets/sets the network engine keywords to be added on top
of tnt file
 AppVersion As String
T T
Gets the version of PIPESIM
 IsLocalFluidUsed (ObjectName As
T
Returns True if a specified branch or network source are set
String) As Boolean T
to use a locally defined fluid or if a production well is
multilayered.

60
PIPESIM 2012.3 Open Link Reference Manual

Note: This is a get only property.


 HeatTransferOptionsPipeBurialMet
T
Gets/sets the flag value for heat transfer options pipe burial
hod As long method:
1983: 1983 method
2000: 2000 method (set to this value if given value is not
1983, 2000, or 2009)
2009: 2009 method
 HeatTransferOptionsIFCMethod As
T
Gets/sets the flag value for heat transfer options inside film
long coefficient method:
1: Kaminsky
2: Kreith Separate Reynolds number (set to this value if given
value is not 1, or 2)
 HeatTransferOptionsUValueMultipl
T
Gets/sets the value for heat transfer options U value
ier As double multiplier
 EnableHydrateSubcoolingCalculatio
T
Gets/sets the flag value for heat transfer options hydrate
n As long subcooling calculation:
0: disable
1: enable (set to this value if given value is not 0, or 1)
Note: Property is for compositional models only
 UseNetworkHeatTransferOptions
T
Gets/sets the flag value to use network heat transfer options
As long (if = 1) or to use local branch options (if = 0)
 IsMultilayer (ObjectName As String)
T
Returns True if a production well is multilayered. Otherwise a
As Boolean T
property is set to False (network default fluid is used)
Note: This is a get only property.

INetModel Interface - Operations

 ExportEngineFiles ()
T T
This function generates an ASCII file ( .tnt) and a number of
ASCII files (.pst) in the PIPESIM engine keyword language that
is used as input by the calculation engine. This .tnt file can
then be used with PIPESIM expert mode.
 KillSimulationProcess ()
T T
Terminates the simulation process
 OpenModel (bstrModelFileName As
T T
Opens the given network model. Filename must be a valid
String) PIPESIM network model file (.bpn)
This function must be called first when using this object.
Note: Will return false also if the number of component in
any composition or in the model in general is more than 50.

61
PIPESIM 2012.3 Open Link Reference Manual

 RunNetwork (bRestart As Boolean)


T T
Runs the currently opened model by calling the calculation
engine program as specified in the PIPESIM installation.
If bRestart is True the simulation will load any previously
restart files (.rst files) as its initial conditions.
 RunNetwork2 (bRestart As Boolean,
T T
Similar to RunNetwork and also accepts one or more
EngSwitches As String) switches to be passed to the simulation engine.
 SaveModel (bstrPathName As
T T
Saves the currently opened model to a file given by
String) As Boolean bstrPathName
 ResetLocalErCorrSettings() As
T
Overrides all local erosion and corrosion settings with the
Boolean T
global ones

ModelBuilder object

 SetNodeCoordinates (NodeName As
T T
Sets the node coordinates for node object NodeName to X, Y
String, X As Long, Y As Long) coordinates
 TopLeftCoordinate_X As Long
T T
Sets/returns the top left X coordinate of the graphical
panel. SetNodeCoordinates values are passed in relation
T T

to TopLeftCoordinate_X and TopLeftCoordinate_Y


T T T T

 TopLeftCoordinate_Y As Long
T T
As above for the Y coordinate

 BottomRightCoordinate_X As Long
T T
Returns the bottom right X coordinate of the graphical panel
(this is a read-only property)
 BottomRightCoordinate_Y As Long
T T
As above for the Y coordinate

 GetNodeCoordinates (NodeName
T T Gets the node X, Y coordinates for node object NodeName
As String, X As Long, Y As Long)
 GetLastError () As String
T T
Returns the last error message produced by the object

IBlackOil object

IBlackOil object - Properties

 API As Double
T T
API value
 API_Type As Integer
T T
API type (0=API, 1=DOD)
 ConingEnabled As Boolean
T T
True/False
 ConingGasSG As Double
T T
Coning gas specific gravity
 ConingRateType As Long
T T
0: liquid, 1: gas, 2: mass
 ConingTable_SI As Variant
T T
A 3-column array with rate, gor/glr, wcut values, use strict SI
units
 GasSG As Double
T T
Black oil specific gravity
 GLR_SI As Double
T T
Gas/Liquid Ratio use strict SI units

62
PIPESIM 2012.3 Open Link Reference Manual

 GOR_SI As Double
T T
Gas/Oil Ratio use strict SI units
 GOR_Type As Integer
T T
(0=GLR, 1=GOR, 2=LGR, 3=OGR)
 LGR_SI As Double
T T
Liquid/Gas Ratio use strict SI units
 OGR_SI As Double
T T
Oil/Gas Ratio use strict SI units
 SolutionGasCorrelation As Long
T T
0 = Lasater, 1 = Standing, 2 = Vazquez and Beggs, 3 = Glaso, 4
= Kartoatmodjo
 Watercut As Double
T T
Water Cut
 WaterSG As Double
T T
Water specific gravity
 Name As String
T T
Name of the fluid
 Comment As String
T T
String containing the text in the comments field
 Calibration As Long
T T
Calibration type: 0 – no calibration, 1 – single point and 2 -
multipoint
 SinglePointCalib As Object
T T
Single point calibration data object
 MultiPointCalib As Object
T T
Multipoint calibration data object
 Viscosity As Object
T T
String containing the text in the comments field
 ThermalData As Object
T T
String containing the text in the comments field
 Contaminants As Variant
T T
Array of Doubles for contaminant values in a following order:
CO2, H2S, N2, H2 and CO
 WGR_Type As Integer
T T
(0=Watercut, 1=GWR, 2=WGR)
 GWR_SI As Double
T T
Gas/Water Ratio use strict SI units
 WGR_SI As Double
T T
Water/Gas Ratio use strict SI units

IBlackOil object - Methods

 SetBubblePointCalibration
T T
Sets the bubble point data
(SatGas_SI As Double, Pressure_SI
As Double, Temperature_SI As
Double)
 GetBubblePointCalibration
T T
Gets the bubble point data. Return value is a Saturation Gas
(Pressure_SI As Double, correlation : 0 for Lasater, 1 for Standing, 2 for Vazquez and
Temperature_SI As Double) As Beggs, 3 for Glaso, 4 for Kartoatmodjo, 5 for De Ghetto at al
Double or 6 for Petrosky-Farshad

IBlackOil object - Operations

 SetBlob (sBlob As String)


T T
Sets data for the required fluid
sBlob = String containing black oil information

63
PIPESIM 2012.3 Open Link Reference Manual

ISinglePointCalib object

ISinglePointCalib object – Get Methods

 GetCalibrationAtBubblePoint (Press
T T
Function gets calibration data at bubble point. The return
ure_SI As Double, Temperature_SI value is Saturation Gas correlation: 0 for Lasater, 1 for
As Double, SatGas_SI As Double) as Standing, 2 for Vazquez and Beggs, 3 for Glaso, 4 for
Long Kartoatmodjo, 5 for De Ghetto et al. or 6 for Petrosky-Farshad
 GetCalibrationAboveBubblePoint (
T T
Function gets calibration data above bubble point. The
OFVF As Double, Density_SI as return value is density type: 0 for Density, 1 for OFVF or 3
Double, Compressibility_SI as for Compressibility
Double, Pressure_SI As Double,
Temperature_SI As Double) as Long
 GetCalibrationBelowBubblePoint (O
T T
Function gets calibration data below bubble point. The
FVF As Double, Density_SI as return value is density type: 0 for Density or 1 for OFVF
Double, Pressure_SI As Double,
Temperature_SI As Double) as Long
 GetLiveOilViscBelowBubblePoint (P
T T
Function gets live oil viscosity data below bubble point. The
ressure_SI As Double, return value is Live Oil Viscosity Correlation: 0 for Beggs &
Temperature_SI As Double, Robinson, 1 for Chew & Connally, 2 for Kartoatmodjo, 3 for
LiveOilVisc_SI) as Long Khan, 4 for De Ghetto et al., 5 for Hossain, 6 for Elsharkawyor
7 for Petrosky-Farshad
 GetGasViscBelowBubblePoint (Pres
T T
Function gets gas viscosity data below bubble point. The
sure_SI As Double, Temperature_SI return value is gas viscosity.
As Double) as Double
 GetGasZBelowBubblePoint (GasZ as
T T
Function gets gas Z data below bubble point. The return
Double, Pressure_SI As Double, value is gas Z correlation: 0 for Standing, 1 for Hall
Temperature_SI As Double) as Long Yarborough or 2 for Robinson et al.

ISinglePointCalib object – Set Methods

 SetCalibrationAtBubblePoint (SolGasCorr
T T
Function sets calibration data at bubble point. The
as Long, Pressure_SI As Double, acceptable values for Saturation Gas correlation are: 0
Temperature_SI As Double, SatGas_SI As for Lasater, 1 for Standing, 2 for Vazquez and Beggs, 3
Double) for Glaso, 4 for Kartoatmodjo, 5 for De Ghetto et al. or 6
for Petrosky-Farshad
 SetCalibrationAboveBubblePoint (DensT
T T
Function sets calibration data above bubble point. The
ype as Long, OFVF As Double, Density_SI acceptable values for density type are: 0 for Density, 1
as Double, Compressibility_SI as Double, for OFVF or 3 for Compressibility
Pressure_SI As Double, Temperature_SI
As Double)
 SetCalibrationBelowBubblePoint (DensT
T T
Function sets calibration data above bubble point. The
ype as Long, OFVF As Double, Density_SI acceptable values for density type are: 0 for Density or 1
as Double, Pressure_SI As Double, for OFVF

64
PIPESIM 2012.3 Open Link Reference Manual

Temperature_SI As Double)
 SetLiveOilViscBelowBubblePoint (LiveOil
T T
Function sets live oil viscosity data below bubble point.
Corr as Long, Pressure_SI As Double, The acceptable values for Live Oil Viscosity Correlation
Temperature_SI As Double, are: 0 for Beggs & Robinson, 1 for Chew & Connally, 2
LiveOilVisc_SI) for Kartoatmodjo, 3 for Khan, 4 for De Ghetto et al., 5
for Hossain, 6 for Elsharkawyor 7 for Petrosky-Farshad
 SetGasViscBelowBubblePoint (Pressure_
T T
Function sets gas viscosity data below bubble point.
SI As Double, Temperature_SI As Double,
GasVisc_SI as Double)
 SetGasZBelowBubblePoint (GasZCorr as
T T
Function sets gas Z data below bubble point. The
Long, GasZ as Double, Pressure_SI As acceptable values for gas Z correlation are: 0 for
Double, Temperature_SI As Double) Standing, 1 for Hall Yarborough or 2 for Robinson et al.

IMultiPointCalib object

IMultiPointCalib object – Properties

 OFVF as Boolean
T T
True for Oil FVF or False for Oil Density

IMultiPointCalib object – Get Methods

 GetCalibUnits (UnitsArray)
T T
Function returns an array of Strings containing units for
Pressure, Solution Gas GOR, Oil Density, Oil Viscosity and Gas
Viscosity
 GetCorrelations (CorrArray)
T T
Function returns an array of Longs containing correlations for
Solution Gas, OFVF, Oil Viscosity, Gas Z factor and Gas
Viscosity. Available values for each correlation are the same
as for ISinglePointCalib methods
 GetTemperature (Value As Double,
T T Function returns a calibration temperature and units.
Units as String)
 GetCalibrationAtBubblePoint (Calib
T T
Function gets calibration data at bubble point as an array of
Data) Doubles. It contains values for Pressure, Solution Gas, OFVF
or Density, Oil Viscosity, Gas Z factor and Gas Viscosity. All
values are in units supplied by GetCalibUnits method
 GetCalibrationAboveBubblePoint (C
T T
Function gets calibration data above bubble point as a
alibData) two-dimensional array of Doubles. Each row contains
values for Pressure, Solution Gas, OFVF or Density, Oil
Viscosity, Gas Z factor and Gas Viscosity. All values are in units
supplied by GetCalibUnits method
 GetCalibrationBelowBubblePoint (C
T T
Function gets calibration data below bubble point as a
alibData) two-dimensional array of Doubles. Each row contains
values for Pressure, Solution Gas, OFVF or Density, Oil
Viscosity, Gas Z factor and Gas Viscosity. All values are in units

65
PIPESIM 2012.3 Open Link Reference Manual

supplied by GetCalibUnits method

66
PIPESIM 2012.3 Open Link Reference Manual

IMultiPointCalib object – Set Methods

 SetCalibUnits (UnitsArray)
T T
Function sets units for Pressure, Solution Gas GOR, Oil
Density, Oil Viscosity and Gas Viscosity supplied as an array of
Strings
 SetCorrelations (CorrArray)
T T
Function sets correlations for Solution Gas, OFVF, Oil
Viscosity, Gas Z factor and Gas Viscosity supplied as an array
of Longs. Available values for each correlation are the same
as for ISinglePointCalib methods
 SetTemperature (Value As Double
T T
Function sets a calibration temperature in specified units.
Units as String)
 SetCalibrationAtBubblePoint (Calib
T T
Function sets calibration data at bubble point passed as an
Data) array of Doubles. It must contain values for Pressure,
Solution Gas, OFVF or Density, Oil Viscosity, Gas Z factor and
Gas Viscosity. All values are in units supplied by GetCalibUnits
method
 SetCalibrationAboveBubblePoint (C
T T
Function sets calibration data above bubble point passed as a
alibData) two-dimensional array of Doubles. Each row must contain
values for Pressure, Solution Gas, OFVF or Density, Oil
Viscosity, Gas Z factor and Gas Viscosity. All values are in units
supplied by GetCalibUnits method
 SetCalibrationBelowBubblePoint (C
T T
Function sets calibration data below bubble point passed as a
alibData) two-dimensional array of Doubles. Each row must contain
values for Pressure, Solution Gas, OFVF or Density, Oil
Viscosity, Gas Z factor and Gas Viscosity. All values are in units
supplied by GetCalibUnits method

IViscosityData object

IViscosityData object – Properties

 DeadOilCorr as Long
T T
Dead Oil Viscosity correlation. Possible values are: 0 for Beggs
& Robinson, 1 for Glaso, 2 for Kartoatmodjo, 3 for De Ghetto
et al., 4 for Hossain, 5 for Elsharkawy, 6 for Petrosky-Farshad,
7 for user –specified 2 points or 8 for user-supplied table
 LiveOilCorr as Long
T T
Live Oil Viscosity correlation. Possible values are: 0 for Beggs
& Robinson, 1 for Chew & Connally, 2 for Kartoatmodjo, 3 for
Khan, 4 for De Ghetto et al., 5 for Hossain, 6 for Elsharkawyor
7 for Petrosky-Farshad
 EmulViscosity as Long
T T
Emulsion Viscosity Method. Possible values are: 0 for
continuous phase, 1 for volume ratio, 2 for Pipesim Original
Woelflin Loose Emulsion, 3 for Woelflin Loose Emulsion, 4 for

67
PIPESIM 2012.3 Open Link Reference Manual

Woelflin Medium Emulsion, 5 for Woelflin Tight Emulsion, 6


for Brinkman, 7 for Vand with Vand coefficients, 8 for Vand
with Barnea & Mizrahi coefficients, 9 for Vand with
user-supplied coefficients, 10 for Richardson, 11 for Leviton &
Leighton and 12 for user-supplied table
 UsatOilViscosity as Long
T T
Undersaturated Oil Viscosity. Possible values are: 0 for
Vasquez &Beggs, 1 for Kouzel, 2 for Kartoatmodjo, 3 for Khan,
4 for De Ghetto et al., 5 for Hossain, 6 for Elsharkawy, 7 for
Bergman & Sutton, 8 for Petrosky-Farshad or 9 for none

IViscosityData object – Get Methods

 GetDOPoints (Temp1 as Double,


T T
Function returns temperature and viscosity values for Dead
Temp2 as Double, TUnits as String, Oil for user-specified 2-point Dead Oil Viscosity Correlation
Visc1 as Double, Visc2 as Double,
VUnits as String)
 GetUserViscTable_SI (Table)
T T
Function returns a two-column array of Doubles containing
values for Temperature and Viscosity for user-supplied table
Dead Oil Viscosity Correlation
 GetUserEmulTable_SI (Type as
T T
Function returns a three-column array of Doubles containing
Long, Table) values for Temperature, Viscosity Ratio and Viscosity for
user-supplied table Emulsion Viscosity. Type equals 0 for
Temperature-Viscosity Ratio table or 1 for
Temperature-Viscosity table.
 GetWCutCutoff (Method as Long,
T T
Function returns a watercut cutoff method (1 for
WCut As Double, Units as String) user-defined or 0 for Brauner & Ullman) and a cutoff value
and units.
 GetEmulCoeffs (Method as Long,
T T
Function returns a emulsion viscosity method and
Coeff1 as Double, Coeff2 as Double) user-supplied coefficients if applicable. Method equals 9 for
Vand with user-supplied coefficients, 10 for Richardson or -1
for all other chosen methods.
 GetKouzelCoeffs (ParA as Double,
T T
Function returns Kouzel coefficients for Undersaturated Oil
ParB as Double) Viscosity

IViscosityData object – Set Methods

 SetDOPoints (Temp1 as Double,


T T
Function sets temperature and viscosity values for Dead Oil
Temp2 as Double, TUnits as String, for user-specified 2-point Dead Oil Viscosity Correlation
Visc1 as Double, Visc2 as Double,
VUnits as String)
 SetUserViscTable_SI (Table)
T T
Function sets a user-supplied table for Dead Oil Viscosity
Correlation passing a two-column array of Doubles containing
values for Temperature and Viscosity.
 SetUserEmulTable_SI (Type as Long,
T T
Function sets a user-supplied table for Emulsion Viscosity

68
PIPESIM 2012.3 Open Link Reference Manual

Table) passing a three-column array of Doubles containing values for


Temperature, Viscosity Ratio and Viscosity for. Type equals 0
for Temperature-Viscosity Ratio table or 1 for
Temperature-Viscosity table.
 SetWCutCutoff (Method as Long,
T T
Function sets a watercut cutoff method (1 for user-defined or
WCut As Double, Units as String) 0 for Brauner & Ullman) and a cutoff value in specified units.
 SetEmulCoeffs (Method as Long,
T T
Function sets user-supplied coefficients for corresponding
Coeff1 as Double, Coeff2 as Double) emulsion viscosity method. Method must be 9 for Vand with
user-supplied coefficients or 10 for Richardson.
 SetKouzelCoeffs (ParA as Double,
T T
Function sets Kouzel coefficients for Undersaturated Oil
ParB as Double) Viscosity

IThermal object

IThermal object – properties

 EnthalpyCalculationMethod as Long
T
Enthalpy Calculation Method. Possible values are: 0 for 1983
Method, or 1 for 2009 Method.
 SpecificLatentHeat_SI as Double T
Specific Latent Heat in SI unit (J/kg).

IThermal object – Get Methods

 GetConductivity (Values, Units as


T T
Function returns an array of 3 Doubles containing Gas, Oil
String) and Water thermal conductivity values and a units string
 GetEnthropy (Values, Units as
T T
Function returns an array of 3 Doubles containing Gas, Oil
String) and Water heat capacity values and a units string

ISinglePointCalib object – Set Methods

 SetConductivity (Values, Units as


T T
Function sets values for Gas, Oil and Water thermal
String) conductivities passed as an array of 3 Doubles in specified
units
 SetEnthropy (Values, Units as String)
T T
Function sets values for Gas, Oil and Water heat capacities
passed as an array of 3 Doubles in specified units

69
PIPESIM 2012.3 Open Link Reference Manual

ICompositional object

ICompositional object - Properties

 Name As String
T T
Name of the fluid

ICompositional object - Get Methods

Note: Double values are returned in SI units.

 GetComment () As String
T T
Returns a string containing the text in the comments field
 GetPackageType () As Long
T T
Returns the Compositional Package Type to use as long
integer according to the following formula:
1 = Multiflash, 101 = Eclipse 300, 102 = DBR, 103 = GERG, 104
= REFPROP V8
Note: For model saved with SIS flash, this method will return
101 as Eclipse 300 since SIS flash is obsolete.
For model saved with SPPTS flash, this method will return 1
as Multiflash since SPPTS flash is obsolete
 GetComponentList (pVar As Object,
T T
Returns the current component names list.
pVar2As Object, pVar3As Object, pVar = list of component names
HydComp1 As Long, AquComp1 As
pVar2 = list of hydrocarbon names
Long) As Long
pVar3 = list of aqueous names
AquComp1 = number of aqueous components
HydComp1 = number of aqueous components.
Returns total number of components
 GetLibraryComptBP (pVar)
T T
Returns the boiling points of the library components set
by SetLibraryComptCalculator.
T T

pVar = list of boiling points as an array of doubles.


 GetLibraryComptMW (pVar)
T T
Returns the molecular weight of the library components set
by SetLibraryComptCalculator.
T T

pVar = list of molecular weights as an array of doubles.


 GetLibraryComptOM (pVar)
T T
Returns the acentric factors of the library components set
by SetLibraryComptCalculator.
T T

pVar = list of acentric factors as an array of doubles.

70
PIPESIM 2012.3 Open Link Reference Manual

 GetLibraryComptPC (pVar)
T T
Returns the critical pressures of the library components set
by SetLibraryComptCalculator.
T T

pVar = list of critical pressures as an array of doubles.


 GetLibraryComptSG (pVar)
T T
Returns the specific gravities of the library components set
by SetLibraryComptCalculator.
T T

pVar = list of specific gravities as an array of doubles.


 GetLibraryComptTC (pVar)
T T
Returns the critical temperatures of the library components
set by SetLibraryComptCalculator.
T T

pVar = list of critical temperatures as an array of doubles.


 GetLibraryList (pVar) As Long
T T
pVar = list of component descriptors as an array of Booleans
with the values corresponding to the component names
returned from GetComponentList.
T T

True = normal component


False = user defined (petroleum fraction) component.
Return value is a size of the array.
 GetAqueousUnits() as Long) Get the aqueous unit for the aqueous components.
0=moles, 1=WGR in m3/mmsm3, 2=% wcut in vol/vol 3=
mass

Note: If the SetAqueousUnits was used to change the


aqueous unit without resetting the molar list, the getmolarlist
function will inconsistent values.
 GetStrictMolarList (pVar) As Long
T T
pVar = list of molar flow rates as an array of Doubles with the
values corresponding to the component names returned
from GetComponentList. If the aqueous unit is mass then a
T T

conversion to mol is done and the moles are set in the model.
So any subsequent query on the molarlist will return the
values converted from mass For other units the value is
returned as is.
Return value is a size of the array.
 GetMolarList (pVar) As Long
T T
pVar = list of molar flow rates as an array of Doubles with the
values corresponding to the component names returned
from GetComponentList.. The values are the mol values
T T

stored in the model even if they are not active (aqueous unit
not mol). They are NOT necessarily a conversion of the active
values in the model for aqueous components with units other
than model. See also getStrictMolarList
Return value is a size of the array.
 GetMolWeightList (pVar) As Long
T T
pVar = list of molecular weights as an array of doubles with
the values corresponding to the component names returned
from GetComponentList.
Return value is a size of the array.

71
PIPESIM 2012.3 Open Link Reference Manual

 GetBoilingPointList (pVar) As Long


T T
pVar = list of boiling points as an array of doubles with the
values corresponding to the component names returned
from GetComponentList.
T T

Return value is a size of the array.


 GetSpecificGravityList (pVar) As
T T
pVar = list of specific gravities as an array of doubles with the
Long values corresponding to the component names returned
from GetComponentList.
T T

Return value is a size of the array.


 GetCriticalPressureList (pVar) As
T T
pVar = list of critical pressures as an array of doubles with the
Long values corresponding to the component names returned
from GetComponentList.
T T

Return value is a size of the array


 GetCriticalTemperatureList (pVar)
T T
pVar = list of critical temperatures as an array of doubles with
As Long the values corresponding to the component names returned
from GetComponentList.
T T

Return value is a size of the array.


 GetAcentricFactorList (pVar) As
T T
pVar = list of acentric factors as an array of doubles with the
Long values corresponding to the component names returned
from GetComponentList.
T T

Return value is a size of the array.


 GetLiquidViscosityList (pVar) As
T T
pVar = list of liquid viscosity as an array of doubles with the
Long values corresponding to the component names returned
from GetComponentList.
T T

Return value is a size of the array.


 GetCriticalVolumeList (pVar) As
T T
pVar = list of critical volume as an array of doubles with the
Long values corresponding to the component names returned
from GetComponentList.
T T

Return value is a size of the array.


 GetVolumeShiftList (pVar) As Long
T T
pVar = list of volume shift as an array of doubles with the
values corresponding to the component names returned
from GetComponentList.
T T

Return value is a size of the array.


 GetReferenceDensityList (pVar) As
T T
pVar = list of reference density as an array of doubles with
Long the values corresponding to the component names returned
from GetComponentList.
T T

Return value is a size of the array.


 GetReferenceTemperatureList
T T
pVar = list of reference temperature as an array of doubles
(pVar) As Long with the values corresponding to the component names
returned from GetComponentList.
T T

Return value is a size of the array.

72
PIPESIM 2012.3 Open Link Reference Manual

 GetWatsonKFactorList (pVar) As
T T
pVar = list of Watson K factors as an array of doubles with the
Long values corresponding to the component names returned
from GetComponentList.
T T

Return value is a size of the array.


 GetOmegaAList (pVar) As Long
T T
pVar = list of Omega A values as an array of doubles with the
values corresponding to the component names returned
from GetComponentList.
T T

Return value is a size of the array.


 GetOmegaBList (pVar) As Long
T T
pVar = list of Omega B values as an array of doubles with the
values corresponding to the component names returned
from GetComponentList.
T T

Return value is a size of the array.


 GetEmulWaterCut_SI(pWaterCut as pWaterCut is the watercut cutoff in SI (fraction).
double) as bool Get the emulsion watercut cutoff for the Multiflash Package.

Return true if the package of the composition is Multiflash
(the operation was successful), false otherwise

ICompositional object - Set Methods

 SetComment (sComment As String)


T T
Sets a string in the comments field of the compositional
description 1 .
TPF FPT

 SetPackageType (lPackageType As
T T
Sets the Compositional Package Type to use. The following
Long) values of lPackageType will set the package as described:
1 = Multiflash, 101 = Eclipse 300, 102 = DBR, 103 = GERG, 104
= REFPROP V8
Note: For any other input value, this method will return COM
error “E_INVALIDARG” for invalid parameter value.
 SetComponentList (pVar, CompNum
T T
Sets the component names list.
As Long, pVar2, CompNum2 As pVar = list of hydrocarbon names as an array of strings
Long)
pVar2 = list of aqueous names as an array of strings
CompNum = number of hydrocarbon components
CompNum2 = number of aqueous components 2 . TPF FPT

Note: The total number of components is limited to 50.


Return false if more than 50 components is provided
 SetAqueousUnits(AquUnit as Long) Set the aqueous unit for the aqueous components.
0=moles, 1=WGR in m3/mmsm3, 2=% wcut in vol/vol 3=
mass

Note: This function will perform no conversion whatsoever.

1
TP PT Before any set methods are called in Icompositional Interface CreateNewComposition must be called
2
TP PT After all the set methods are called from Icompositional Interface UpdateComposition must be called

73
PIPESIM 2012.3 Open Link Reference Manual

You need to use set MolarList and UpdateComposition to


reset the component "molar" values to their target. To get
the values specified in mass converted to moles, use the
getStrictMolarList function.
 SetMolarList (pVar, CompNum As
T T
pVar = list of molar flow rates as an array of doubles with the
Long) values corresponding to the component names set in
SetComponentList ensuring that the molar flow rates of the
aqueous components come after the molar flow rates of the
hydrocarbon components.
CompNum = total number of components
 SetLibraryList (pVar, CompNum As
T T
pVar = list of component descriptions as an array of bools
Long) with the values corresponding to the component names set
in SetComponentList ensuring that the component
T T

descriptions of the aqueous components come after the


component descriptions of the hydrocarbon components.
CompNum = total number of components
 SetLibraryComptCalculator (pVar,
T T
pVar = list of library component names ONLY as an array of
CompNum As Long) strings.
CompNum = number of components within the above list.
SetLibraryComptCalculator sets the library component
T T

names within the compositional module and calculates the


component parameters.
 SetMolwtList (pVar, CompNum As
T T
pVar = list of molecular weights as an array of doubles with
Long) the values corresponding to the component names set
in SetComponentList ensuring that the molecular weights of
T T

the aqueous components come after the molecular weights


of the hydrocarbon components.
CompNum = total number of components.
 SetPvtFile (sFile As String,
T
Calls the compositional pvt file reader to import the inputted
bIsPVOFile As BOOL, iPVOUnits As pvt file.
Int) sFile = pvt / ptt/ pvo file name.
bIsPVOFile: Optional - True for file name with pvo extension,
and false (default) otherwise.
iPVOUnits = Optional - pvo file unit system: 0 (default) for
metric, 1 for field. This value is ignored if bIsPVOFile is false.
Note: This does not set the compositional mode to pvt, rather
the pvt content is imported as a compositional
 SetBoilingPointList (pVar,
T T
pVar = list of boiling points as an array of doubles with the
CompNum As Long) values corresponding to the component names set in
SetComponentList ensuring that the boiling points of the
aqueous components come after the boiling points of the
hydrocarbon components.
CompNum = total number of components

74
PIPESIM 2012.3 Open Link Reference Manual

 SetSpecificGravityList (pVar,
T T
pVar = list of specific gravities as an array of doubles with the
CompNum As Long) values corresponding to the component names set in
SetComponentList ensuring that the specific gravities of the
aqueous components come after the specific gravities of the
hydrocarbon components.
CompNum = total number of components
 SetCriticalPressureList (pVar,
T T
pVar = list of critical pressures as an array of doubles with the
CompNum As Long) values corresponding to the component names set
in SetComponentList ensuring that the critical pressures of
T T

the aqueous components come after the critical pressures of


the hydrocarbon components.
CompNum = total number of components
 SetCriticalTemperatureList (pVar,
T T
pVar = list of critical temperatures as an array of doubles with
CompNum As Long) the values corresponding to the component names set
in SetComponentList ensuring that the critical temperatures
T T

of the aqueous components come after the critical


temperatures of the hydrocarbon components.
CompNum = total number of components.
 SetAcentricFactorList (pVar,
T T
pVar = list of acentric factors as an array of doubles with the
CompNum As Long) values corresponding to the component names set
in SetComponentList ensuring that the acentric factors of the
T T

aqueous components come after the acentric factors of the


hydrocarbon components.
CompNum = total number of components
 SetEmulWaterCut_SI(nWaterCut as nWaterCut is the watercut cutoff in SI (fraction).
double) as bool Set the emulsion watercut cutoff for the Multiflash Package.

Return true if the package of the composition is Multiflash
(the operation was successful), false otherwise.

ICompositional object - Operations

 CreateNewComposition ()
T T
Blanks all compositional arrays and parameters in memory
 UpdateComposition ()
T T
Updates all compositional arrays and parameters in memory
 SetBlob (sBlob As String)
T T
Sets data for the required composition
sBlob = String containing compositional information 3 .TPF FPT

 SaveAsPVTFile (PVTFilename As
T T
Save composition as a PVT file with specified name
String, bEngUnit As Bool) As Bool PVTFilename and unit. Return true if successful.

3
TP PT The compositional data is provided by the call to the Ipnscom Interface

75
PIPESIM 2012.3 Open Link Reference Manual

ICompositional2 object

ICompositional2 object - Properties

 Eos As Long
T T
Gets/Sets an equation of state (see Appendix for all allowed
options)
 ViscosityModel As Long
T T
Gets/Sets a viscosity model (see Appendix for all allowed
options)
 Bip As Long
T T
Gets/Sets a BIP set (see Appendix for all allowed options)
 Emulsion As Long
T T
Gets/Sets an emulsion (see Appendix for all allowed options)
 ThermalConductivity As Long
T T
Gets a thermal conductivity (0 = None)
 SurfaceTension As Long
T T
Gets a surface tension (0 = None)

ICompositional2 object - GetMethods

 GetUserDefinedBIC(component1 As Get the Binary Interaction Coefficient for component 1 and


String, component2 As String, BIC component2. Note that the BIC are symmetric and the order
As Double) of the component therefore does not matter. Return the
unset value if not defined or there is no user defined BIC.

ICompositional2 object - SetMethods

 SetUserDefinedBIC(component1 As Set the Binary Interaction Coefficient for component 1 and


String, component2 As String, BIC component2. Note that the BIC are symmetric and the order
As Double) As Bool of the component therefore does not matter. Return true if
successful, false otherwise. Example of cases were false is
returned include component1 and comonent2 having the
same name or not being in the current composition.

ICompositional2 object - Methods

 ClearUserDefinedBICs() Clear the Binary Interaction Coefficient table.

FlowCorrelations Interface

CIFlowCorrelation object - Get Methods

 GetHorizontalCorrelationName ()
T T
Returns the horizontal correlation name. The returned string

76
PIPESIM 2012.3 Open Link Reference Manual

As String is a unique keyword name.


 GetHorizontalSourceName () As
T T Returns the correlation’s source name (such as bja, tulsa)
String
 GetVerticalCorrelationName () As
T T
Returns the vertical correlation name. The returned string is a
String unique keyword name (for example ANSAR, BJA, BBR, BBOTD)
 GetVerticalSourceName () As String
T T
Returns the correlation’s source name (such as bja, tulsa)
 GetSensitivityItems (VerticalCorrs
T T
Returns the 4-column array (help string, engine code, main
As Boolean, Items) As Long code and quantity class) of available sensitivity variables in
Items for Vertical (if VerticalCorrs is True) or Horizontal
(VerticalCorrs is False). Number of items is a function’s return
value

CIFlowCorrelation object - Set Methods

 SetHorizontalCorrelation (sSource
T T
Set a horizontal correlation. For example, for the BJA
As String, sCorrelation As String) correlation source it can be any of: BBO, BBOTD, BBR, BBRTD,
BJA, DKAGAD, DKAGAF, DR, DRTD, LOCKMAR, LOCKMARTD,
MB, NOSLIP, OLIEMANS, XIAO or TU2P, and for Tulsa source it
can be one of following: TBB, TDUK or TMB
sSource can be BJA, TULSA
 SetHorizUserCorrelation (sSource
T T Set a horizontal user correlation
As String, sCorrelation As String)
 SetVerticalCorrelation (sSource As
T T
Set a vertical source and correlation. For example for the
String, sCorrelation As String) Tulsa correlation source it can be any of: TBB, TDR, TGA, THB,
TMB or TORK, and for BJA source it can be one of following:
ANSARI, BBO, BBR, DR, GA, GRAYM, GRAYO, HBR, HBRDR,
MB, NOSLIP, ORK or TU2P.
sSource can be BJA, TULSA
 SetVertUserCorrelation (sSource As
T T
Set a vertical user correlation
String, sCorrelation As String)

CIFlowCorrelation object - Properties

 SwapAngle As Double
T T
Vertical-Horizontal Correlation Swap Angle
 HorizontalFrictionFactor As Double
T T
Horizontal Friction Factor
 VerticalFrictionFactor As Double
T T
Vertical Friction Factor
 VerticalHoldup As Double
T T
Vertical Holdup
 HorizontalHoldup As Double
T T
Horizontal Holdup
 SinglePhaseCorrelation As String
T T
Any of: Moody, AGA, Pan-A, Pan-B, HazWill, Weymouth,

77
PIPESIM 2012.3 Open Link Reference Manual

CULSMITH
 SinglePhaseFactor As Double
T T
Single flow correlation coefficient (if applicable)

Note: See the PIPESIM help for the complete list of available vertical and horizontal flow correlations and
sources.

CIFlowCorrelation object - Operations

 DisplayDialog ()
T T
Displays PIPESIM dialog for flow correlation (this method is
obsolete, use DisplayDialog2 instead).
 DisplayDialog2 () As Boolean
T T
Displays PIPESIM dialog for flow correlation ().
Return value is True if data is changed and False otherwise

ICFlowCorrelations2 Interface

ICIFlowCorrelation2 object - Set Methods

 SetHorizontalCorrelation2
T T
Set method name (sCorrelation), friction factor (friction) and
(sCorrelation As String, friction as holdup factor (holdup) for the horizontal flow correlation
double, [in] holdup as double)
 TSetVerticalCorrelation2 T
Set method name (sCorrelation), friction factor (friction) and
(sCorrelation As String, friction as holdup factor (holdup) for the vertical flow correlation
double, [in] holdup as double)

Single Branch Operations


Single Branch operations in PIPESIM are defined as ActiveX interfaces that can be accessed from any model.
Systems Analysis, Pressure and Temperature Profiles and Flow Correlation Comprarison are housed in
PSOpSystems.DLL and its ActiveX interfaces are: ISystemsAnalysis, IIPTProfile and IICorrMatching
respectively. A Nodal Analysis operation interface resides in NodalOp.DLL and can be created by defining an
object of the type IINodalAnal. A Data Matching operation interface resides in DataMatching.DLL and can be
created by defining an object of the type IIDataMatching.

The operation’s ActiveX interface already defined in a single branch PIPESIM model is accessed by calling
the GetOperationInterface function for an ISingleBranchModel object. The argument returned after a call to
T T

this function will be a COM interface of the type corresponding to the selected operation in the PIPESIM
model. A call to GetOperationType () will returned the selected operation. See (Single Branch Operations)
T T X X

for a list of operation IDs. Similarly, any operation interface can be set to the model by
calling SetOperationInterface (…) and SetOperationType (…).
T T T T

78
PIPESIM 2012.3 Open Link Reference Manual

Systems Analysis

ISystemsAnalysis Object - Properties

 BoundaryConds As IBoundaryProps
T T
Get/set property to access boundary conditions. See the
definition of IBoundaryProps Interface for its methods and
TX X T

properties
 Engine As IEngineOptions
T T
Gets the IEngineOptions object to set simulation parameters
and run the operation. See IEngineOptions Interface for its
TX X T

methods and properties


 FixedInjectionDepths As Boolean
T T
Applicable to gas lifted systems, this property sets/gets
whether gas lift valves are installed in the tubing
 PermuteStepMode As Long Sets/gets whether the sensitivity values for the different
variables are
0: Permuted against each other or
1: Changed in step with Sens Var 1 or
2: Changed in step with X-axis.
 PermuteSensVars As Boolean
T T
Sets/gets whether the sensitivity values for the different
variables are permuted against each other or changed in step.
This is an obsolete property and may be hidden in the future.
The new property “PermuteStepMode” must be used instead
of this (see above). For the compatibility PermuteSensVars =
true/false means that PermuteStepMode = 0/1.
 MaxSensitivityVars As Long
T T
Gets the max available number of the sensitivity variables
allowed for the operation
 SensitivityObject (indx As Long) As
T T
indx: the sensitivity box indx. Pass –1 for the X-axis variable,
String 0,1,2,…, (MaxSensitivityVars -1) for the corresponding
T T

sensitivity.
Returns the sensitivity object name for the specified index.
 SensitivityVariable (indx As Long) As
T T
indx: the sensitivity box indx. Pass –1 for the X-axis variable,
String 0,1,2,…, (MaxSensitivityVars -1) for the corresponding
T T

sensitivity.
Returns the sensitivity variable name for the specified index

ISystemsAnalysis Object - Get Methods

 GetIsUnset () As Boolean
T T
Returns True if the operation’s data is all blank (unset)
 GetLastError () As String
T T
Returns an error description after function call failure. Must
be called immediately after the call to the failed function.

79
PIPESIM 2012.3 Open Link Reference Manual

 GetSensitivityData_SI (indx As Long,


T T
Returns the sensitivity data specified for the operation.
ObjectStr As String, VarStr As String, Indx: the sensitivity box indx. Pass –1 for the X-axis variable,
Values_SI, QuantClass As String) 0,1,2, … , (MaxSensitivityVars -1) for the corresponding
T T

sensitivity.
ObjectStr: the object name is returned here
VarStr: the sensitivity variable name is returned here
Values_SI: an array of double values in strict SI units
containing the list of sensitivity values
QuantClass: the unit class name for the selected sensitivity
variable. See Unit System for a list of unit classes
X X

ISystemsAnalysis Object - Set Methods

 SetSensitivityData (indx As Long,


T T
Sets the sensitivity information.
ObjectStr As String, VarStr As String, Indx: the sensitivity box indx. Pass –1 for the X axis variable,
Values_DefEng, vbActive As 0,1,2, … , (MaxSensitivityVars -1) for the corresponding
T T

Boolean) sensitivity.
ObjectStr: the object name
VarStr: the sensitivity variable name
Values_DefEng: an array of double values in default
engineering units containing the list of sensitivity values
vbActive: sets the sensitivity group active (True) or inactive
(False)
 SetSensitivityData_SI (indx As Long,
T T Similar to SetSensitivityData, but uses strict SI units
T T

ObjectStr As String, VarStr As String, indx: the sensitivity box indx. Pass –1 for the X axis variable,
Values_SI, vbActive As Boolean, 0,1,2, … , (MaxSensitivityVars -1) for the corresponding
T T

QuantClass As String) sensitivity.


ObjectStr: the object name
VarStr: the sensitivity variable name
Values_DefEng: an array of double values in default
engineering units containing the list of sensitivity values
vbActive: sets the sensitivity group active (True) or inactive
(False)
QuantClass: measurement string (for example temperature,
pressure etc.)

80
PIPESIM 2012.3 Open Link Reference Manual

 SetLanguage (nlLanguageID As Long)


T T
Sets the user interface language
As Boolean Available values for nlLanguageID are:
0x0809 English (UK)
0x0419 Russian
0x080A Spanish (Mexican)
0x0416 Portuguese (Brazilian)
0x0804 Chinese (PRC)
Function returns True if language was changed successfully
and False otherwise

ISystemsAnalysis Object - Operations

 WriteOperationFile () As Boolean
T T
Writes an ASCII file (modelname.inc) containing the
instructions to the simulation engine to run the operation.
 DisplayDialog (p_VarUnitManager,
T T
Displays the operations graphical interface. Pass a Null
CloseOK As Boolean) variant as the first argument. Returns True if dialog box was
closed OK, otherwise False.

Pressure and Temperature Profiles

IPTProfile Object - Properties

 BoundaryConds As IBoundaryProps
T T
Get/set property to access boundary conditions. See the
definition of ‘IBoundaryProps’ for its methods and properties
 Engine As IEngineOptions
T T
Gets the IEngineOptions object to set simulation parameters
and run the operation. See ‘IEngineOptions’ for its methods
and properties
 FixedInjectionDepths As Boolean
T T
Applicable to gas lifted systems, this property sets/gets
whether gas lift valves are installed in the tubing
 EnableSurveyOpts As Boolean
T T
Gets/sets whether survey data is used for profile plotting
 ProfileType As Long
T T
The default profile to be plotted initially with PSPlot:
0: Elevation vs. Pressure
1: Elevation vs. Temperature
2: Pressure vs. Total Distance
3: Temperature vs. Total Distance
 SensitivityObject (indx As Long) As
T T
indx: the sensitivity box indx. Pass –1 for the X-axis variable,
String 0,1,2, … , (MaxSensitivityVars -1) for the corresponding
T T

sensitivity.
Returns the sensitivity object name for the specified index.

81
PIPESIM 2012.3 Open Link Reference Manual

 SensitivityVariable (indx As Long) As


T T
indx: the sensitivity box indx. Pass –1 for the X-axis variable,
String 0,1,2, … , (MaxSensitivityVars -1) for the corresponding
T T

sensitivity.
Returns the sensitivity object name for the specified index.

IPTProfile Object - Get Methods

 GetIsUnset () As Boolean
T T
Returns true if the operation’s data is all blank (unset)
 GetLastError () As String
T T
Returns an error description after function call failure. Must
be called immediately after the call to the failed function.
 GetSensitivityData_SI (ObjectStr As
T T
Returns the sensitivity data specified for the operation.
String, VarStr As String, Values_SI, ObjectStr: the object name is returned here
QuantClass As String)
VarStr: the sensitivity variable name is returned here
Values_SI: an array of double values in strict SI units
containing the list of sensitivity values
QuantClass: the unit class name for the selected sensitivity
variable. See Units Library for a list of unit classes.
X X

IPTProfile Object - Set Methods

 SetSensitivityData (ObjectStr As
T T
Sets the sensitivity information.
String, VarStr As String, ObjectStr: the object name
Values_DefEng)
VarStr: the sensitivity variable name
Values_DefEng: an array of double values in default
engineering units containing the list of sensitivity values
 SetSensitivityData_SI (ObjectStr As
T T
Same as SetSensitivityData method, but for strict SI units
T T

String, VarStr As String, Values_SI, ObjectStr: the object name


QuantClass As String)
VarStr: the sensitivity variable name
Values_SI: an array of double values in strict SI units
containing the list of sensitivity values
QuantClass: the unit class name for the selected sensitivity
variable. See Units Library for a list of unit classes.
X X

 SetSurveyData_SI (SurveyName As
T T Associates field data to the operation. This data – pressure
String, SurveyDate As Date, and/or temperature profiles is then plotted along with the
Var_MD_Pres_Temp) calculated data.
SurveyName: an arbitrary given name (such as the well name)
SurveyDate: the survey date
Var_MD_Pres_Temp: a three-column matrix containing
measured depths, pressure and temperature values, in that
order. Units in strict SI.

82
PIPESIM 2012.3 Open Link Reference Manual

 SetLanguage (nlLanguageID As Long)


T T
Sets the user interface language
As Boolean Available values for nlLanguageID are:
0x0809 English (UK)
0x0419 Russian
0x080A Spanish (Mexican)
0x0416 Portuguese (Brazilian)
0x0804 Chinese (PRC)
Function returns True if language was changed successfully
and False otherwise

IPTProfile Object - Operations

 WriteOperationFile () As Boolean
T T
Writes an ASCII file (modelname.inc) containing the
instructions to the simulation engine to run the operation.
 DisplayDialog (p_VarUnitManager,
T T
Displays the operations graphical interface. Pass a Null
CloseOK As Boolean) variant as the first argument. Returns True if dialog box was
closed OK, otherwise False.

Flow Correlation Comparison

ICorrMatching object - Properties

 BoundaryConds As IBoundaryProps
T T
Get/set property to access boundary conditions.
See IBoundaryProps Interface for its methods and properties
X X

 Engine As IEngineOptions
T T
Gets the IEngineOptions object to set simulation parameters
and run the operation. See IEngineOptions Interface for its
X XT T

methods and properties


 EnableSurveyOpts As Boolean
T T
Gets/sets whether survey data is used for profile plotting
 ProfileType As Long
T T
The default profile to be plotted initially with PSPlot:
0: Elevation vs. Pressure
1: Elevation vs. Temperature
2: Pressure vs. Total Distance
3: Temperature vs. Total Distance

ICorrMatching object - Get Methods

 GetIsUnset () As Boolean
T T
Returns true if the operation’s data is all blank (unset)
 GetLastError () As String
T T
Returns an error description after function call failure. Must
be called immediately after the call to the failed function.
 GetSelectedCorrelation
T
Function returns in EngineCodes the array of string for chosen

83
PIPESIM 2012.3 Open Link Reference Manual

(IsVertical As Boolean, EngineCodes)


T vertical flow correlations if IsVertical is True and for
horizontal correlations if IsVertical is False

ICorrMatching object - Set Methods

 SetSurveyData_SI (SurveyName As
T T
Associates field data to the operation. This data, pressure
String, SurveyDate As Date, and/or temperature profiles is then plotted along with the
Var_MD_Pres_Temp) calculated data.
SurveyName: an arbitrary given name (such as the well name)
SurveyDate: the survey date
Var_MD_Pres_Temp: a three-column matrix containing
measured depths, pressure and temperature values, in that
order. Units in strict SI
 SetSelectedCorrelation (helpStr As
T T
Set or removes selection for the correlation specified by
String, engineCode As String, engineCode depending on IsSelected value
mainCode As String, IsVertical As IsVertical = True for vertical correlations, False for horizontal.
Boolean, IsSelected As Boolean)
 SetLanguage (nlLanguageID As Long)
T T
Sets the user interface language
As Boolean Available values for nlLanguageID are:
0x0809 English (UK)
0x0419 Russian
0x080A Spanish (Mexican)
0x0416 Portuguese (Brazilian)
0x0804 Chinese (PRC)
Function returns True if language was changed successfully
and False otherwise

ICorrMatching object - Operations

 WriteOperationFile () As Boolean
T T
Writes an ASCII file (modelname.inc) containing the
instructions to the simulation engine to run the operation.
 DisplayDialog (p_VarUnitManager,
T T
Displays the operations graphical interface. Pass a Null
CloseOK As Boolean) variant as the first argument. Returns True if dialog box was
closed OK, otherwise False.

Data Matching

IDataMatchingOp object - Properties

 BoundaryConds As IBoundaryProps
T T
Get/set property to access boundary conditions.

84
PIPESIM 2012.3 Open Link Reference Manual

See IBoundaryProps Interface for their methods and


X X

properties
 Engine As IEngineOptions
T T
Gets the IEngineOptions object to set simulation parameters
and run the operation. See IEngineOptions Interface for their
X XT T

methods and properties


 EnableSurveyOpts As Boolean
T T
Gets/sets whether survey data is used for profile plotting
 ProfileType As Long
T T
The default profile to be plotted initially with PSPlot:
0: Elevation vs. Pressure
1: Elevation vs. Temperature
2: Pressure vs. Total Distance
3: Temperature vs. Total Distance
 ModelIsInjectionWell As Boolean
T T
Gets/sets whether model is an injection well. You have to set
this property to true if you create a new IIDataMatchingOp
object and analyze an injection well
 UValueFactorRange As
T T
Gets/sets u-value multiplier range object. See IFactorRange
X

IFactorRange Interface for its methods and properties


X

 HorFlowFrictFactorRange As
T T
Gets/sets horizontal flow friction factor range object.
IFactorRange See IFactorRange Interface for its methods and properties
X X

 HorFlowHoldupFactorRange As
T T
Gets/sets horizontal flow holdup factor range object.
IFactorRange See IFactorRange Interface for its methods and properties
X X

 VerFlowFrictFactorRange As
T T
Gets/sets vertical flow friction factor range object.
IFactorRange See IFactorRange Interface for its methods and properties
X X

 VerFlowHoldupFactorRange As
T T
Gets/sets vertical flow holdup factor range object.
IFactorRange See IFactorRange Interface for its methods and properties
X X

 WeightingFactorPres As Double
T T
Gets/sets pressure RMS weight factor
 WeightingFactorTemp As Double
T T
Gets/sets temperature RMS weight factor
 EngineOutputListCount As Long
T T
Gets/sets count of resulting records of the Data Matching
operation
 ModelHasMeasuredTempInFlowli
T
Gets/sets whether model has measured temperature data
ne As Boolean
T
(Survey data) in any flowlines, risers or tubings. You have to
set this property to true if model has the measured
temperature data
 ModelHasMeasuredPresInFlowline
T
Gets/sets whether model has measured pressure data (Survey
s As Boolean
T
data) in any flowlines, risers or tubings. You have to set this
property to true if model has the measured pressure data

IDataMatchingOp object - Get Methods

 GetIsUnset () As Boolean
T T
Returns true if the operation’s data is all blank (unset)
 GetLastError () As String
T T
Returns an error description after function call failure. Must be
called immediately after the call to the failed function.

85
PIPESIM 2012.3 Open Link Reference Manual

 GetSelectedCorrelation
T
Function returns in EngineCodes the array of string for chosen
(IsVertical As Boolean,
T
vertical flow correlations if IsVertical is True and for horizontal
EngineCodes) correlations if IsVertical is False
 EngineOutputListCountAs Long
T T
Function returns count of records that could be read by
GetEngineOutputItem function.
 GetEngineOutputItem
T
Function returns correlation start values and results: used
(index as Long, HorFlowFrictFactor
T
methods (names of the horizontal and vertical correlation
as Double, HorFlowHoldupFactor as methods), calculated friction and holdup factors, u-value
Double, VerFlowFrictFactor as multiplier, pressure, temperature and RMS.
Double, VerFlowHoldupFactor as The results are optimized if optimized = true. If function set
double, UValueFactor as Double, optimized = false then function returns start values.
alphaname as string, betaname as
You should pass to index values in range 0..
String, optimized as Boolean,
EngineOutputListCount-1 otherwise you get an error “Invalid
pmatch as Double, tmatch as
argument” (VBA generate an exception “Invalid argument”,
Double) As Double
that could be catched by ON ERROR GOTO operator)
HorFlowFrictFactor = horizontal flow friction factor value.
HorFlowHoldupFactor = horizontal flow holdup factor value.
VerFlowFrictFactor = vertical flow friction factor value.
VerFlowHoldupFactor = vertical flow holdup factor value.
UValueFactor = u-value multiplier.
alphaname = short name of used vertical correlation method.
betaname= short name of used horizontal correlation method.
pmatch= pressure value (measured in psia).
tmatch= temperature value (measured in Fahrenheit’s).
Function returns Double value. This is RMS value.

IDataMatchingOp object - Set Methods

 SetSelectedCorrelation (helpStr As
T T
Set or removes selection for the correlation specified by
String, engineCode As String, engineCode depending on IsSelected value
mainCode As String, IsVertical As IsVertical = True for vertical correlations, False for horizontal.
Boolean, IsSelected As Boolean)

86
PIPESIM 2012.3 Open Link Reference Manual

 SetLanguage (nlLanguageID As Long)


T T
Sets the user interface language
As Boolean Available values for nlLanguageID are:
0x0809 English (UK)
0x0419 Russian
0x080A Spanish (Mexican)
0x0416 Portuguese (Brazilian)
0x0804 Chinese (PRC)
Function returns True if language was changed successfully
and False otherwise

IIDataMatchingOp object - Operations

 WriteOperationFile () As Boolean
T T
Writes an ASCII file (modelname.inc) containing the
instructions to the simulation engine to run the operation.
 DisplayDialog (p_VarUnitManager,
T T
Displays the operations graphical interface. Pass a Null
CloseOK As Boolean) variant as the first argument. Returns True if dialog box was
closed OK, otherwise False.

Nodal Analysis

INodalAnal Object - Properties

 CFactor As Double
T T
Sets a Constant C value
 EngineSwitch As String
T T
Sets/gets extra command line arguments for the PIPESIM
engine
 FetkovichExp As Double
T T
Sets a Fetkovich n exponent value
 FixedInjectionDepths As Boolean
T T
Applicable to gas lifted systems, this property sets/gets
whether gas lift valves are installed in the tubing
 FutureAOFP As Double
T T
Sets a future AOFP value
 FutureIPR As Boolean
T T
Sets a flag whether to use Future IPR option (True by
default)
 IncludeFilePath As String
T T
The full path name to the engine’s operation file
 InflowCurveRangeLimit As Boolean
T T
Allow the inflow curves to extend to the AOFP (true)
 InflowObject As String
T T
Returns/sets the inflow object name
 InflowVariable As String
T T
Returns/sets the inflow variable name
 MaxPressureForOutflow_SI As
T T
Maximum pressure for the outflow curves
Double
 MaxRate_SI As Double
T T
The maximum fluid rate in strict SI units

87
PIPESIM 2012.3 Open Link Reference Manual

 MaxRateFluidType As Long
T T
The maximum fluid rate type: 0: liquid, 1: gas, 2 mass
 NumberInflowPoints As Long
T T
The number of points on each inflow curve
 NumberOutflowPoints As Long
T T
The number of points on each outflow curve
 OutflowCurveRangeLimit As Boolean
T T
Allow the outflow curves to extend to the supplied
maximum flowrate
 OutflowObject As String
T T
Returns/sets the outflow object name
 OutflowVariable As String
T T
Returns/sets the outflow variable name
 OutletPressure_SI As Double
T T
Gets/sets the outlet pressure in strict SI units
 PipesimEnginePath As String
T T
The full path to the PIPESIM engine
 PlotToolPath As String
T T
The full path to the plotting tool (PSPlot)
 PsmFilePath As String
T T
The full path to the model file (.psm file)
 ReservoirPressure As Double
T T
Set a reservoir pressure. Used for future AOFP calculations
 RunEngineMinimised As Long
T T
Runs the engine in a minimised window
 RunPlotToolWithEngine As Long
T T
If True (1) shows the plotting tool (PSPlot) as the simulation
runs

INodalAnal Object - Get Methods

 GetIsEngineActive (p_bActive As
T T
Returns True (1) if the PIPESIM engine is running, otherwise
Long) False (0)
 GetIsUnset GetIsUnset (pVar As
T T
Returns True (1) if the operation’s data is all blank (unset)
Long)
 GetLastError (errorStr As String)
T T
Returns an error description after function call failure. Must
be called immediately after the call to the failed function.
 GetSensitivityData_SI (InflowOutflow
T T Returns the sensitivity data specified for the operation.
As Long, ObjectStr As String, VarStr InflowOutflow: 0: inflow data, 1 outflow data
As String, Values_SI, QuantClass As ObjectStr: the object name is returned here
String) VarStr: the sensitivity variable name is returned here
Values_SI: an array of double values in strict SI units
containing the list of sensitivity values
QuantClass: the unit class name for the selected sensitivity
variable. See Unit System.
X X

88
PIPESIM 2012.3 Open Link Reference Manual

INodalAnal Object - Set Methods

 SetSensitivityData_SI (InflowOutflo
T T
Sets the sensitivity data specified for the operation.
w As Long, ObjectStr As String, VarStr InflowOutflow: 0: inflow data, 1 outflow data
As String, Values_SI, QuantClass As ObjectStr: the object name
String) VarStr: the sensitivity variable name

Values_SI: an array of double values in strict SI units


containing the list of sensitivity values
QuantClass: the unit class name for the selected sensitivity
variable. See Unit System.
X X

 SetLanguage (nlLanguageID As Long)


T T
Sets the user interface language
As Boolean Available values for nlLanguageID are:
0x0809 English (UK)
0x0419 Russian
0x080A Spanish (Mexican)
0x0416 Portuguese (Brazilian)
0x0804 Chinese (PRC)
Function returns True if language was changed successfully
and False otherwise

INodalAnal Object - Operations

 KillOperation ()
T T
Terminates the engine run
 RunOperation ()
T T
Runs the simulation
 WriteOperationFile (bOK As Boolean)
T T
Writes an ASCII file containing the instructions to the
simulation engine to run the operation.
 DisplayDialog (p_VarUnitManager)
T T
Displays the operations graphical interface. Pass a NULL
variant as the first argument.
This method is obsolete. Use DisplayDialog2 method instead
T T

 DisplayDialog2 (p_VarUnitManager,
T T
Displays the operations graphical interface. Pass a Null
bCloseOK As Boolean) variant as the first argument. Returns true if dialog box was
closed OK, otherwise false.

Wax Deposition

IWaxOp Object - Properties

 RunEngineMinimised As Boolean Runs the engine in a minimised window


 RunPlotToolWithEngine As Boolean If True (1) shows the plotting tool (PSPlot) as the simulation
runs
 PsmFilePath As String The full path to the model file (.psm file)

89
PIPESIM 2012.3 Open Link Reference Manual

 PlotToolPath As String The full path to the plotting tool (PSPlot)


 IncludeFilePath As String The full path name to the engine’s operation file
 PipesimEnginePath As String The full path to the PIPESIM engine
 EngineSwitch As String Sets/gets extra command line arguments for the PIPESIM
engine
 WaxProperties As Variant

IWaxOp Object - Get Methods

 GetLastError() As String Returns an error description after function call failure. Must
be called immediately after the call to the failed function.
 GetIsUnset() As Boolean Returns True (1) if the operation’s data is all blank (unset)
 GetIsEngineActive() As Boolean Returns True (1) if the PIPESIM engine is running, otherwise
False (0)

IWaxOp Object - Set Methods

 SetLanguage(nlLanguageID As Long) Sets the user interface language


As Boolean Available values for nlLanguageID are:
0x0809 English (UK)
0x0419 Russian
0x080A Spanish (Mexican)
0x0416 Portuguese (Brazilian)
0x0804 Chinese (PRC)
Function returns True if language was changed successfully
and False otherwise

90
PIPESIM 2012.3 Open Link Reference Manual

IWaxOp Object - Operations

 DisplayDialog(p_VarUnitManager As Displays the operations graphical interface. Pass a NULL


Variant) variant as the first argument.
This method is obsolete. Use DisplayDialog2 method instead
T T

 DisplayDialog2(p_VarUnitManager Displays the operations graphical interface. Pass a Null


As Variant) As Boolean variant as the first argument. Returns true if dialog box was
closed OK, otherwise false.
 RunOperation(); Runs the simulation
 KillOperation(); Terminates the engine run
 WriteOperationFile() As Boolean Writes an ASCII file containing the instructions to the
simulation engine to run the operation.

IWaxOp2 Object - Properties

 WaxMethod As Integer WaxMethod can be one of the following values:


0: Shell;
1: BP;
2: Schlumberger DBR;
3: None

IWaxOp3 Object - Properties

 ModelIsInjectionWell As Boolean True if the model is an injection well, Flase otherwise

Gas Lift Rate vs Casing Head Pressure

IPlotQgiVsChp Object - Properties

 RunEngineMinimised As Boolean Runs the engine in a minimised window


 RunPlotToolWithEngine As Boolean If True (1) shows the plotting tool (PSPlot) as the simulation
runs
 Filename As String The model file name (.psm file)
 Pathname As String The path to a model file
 Description As String A description string
 PlotToolPath As String The full path to the plotting tool (PSPlot)
 PipesimEnginePath As String The full path to the PIPESIM engine

91
PIPESIM 2012.3 Open Link Reference Manual

 EngineSwitch As String Sets/gets extra command line arguments for the PIPESIM
engine
 GasSG As Double Sets/gets gas specific gravity value

IPlotQgiVsChp Object - Get Methods

 GetLastError() As String Returns an error description after function call failure. Must
be called immediately after the call to the failed function.
 GetIsUnset() As Boolean Returns True (1) if the operation’s data is all blank (unset)
 GetIsEngineActive() As Boolean Returns True (1) if the PIPESIM engine is running, otherwise
False (0)

IPlotQgiVsChp Object - Set Methods

 SetMinCHP(value as Double, unitStr Method sets a minimum casing head pressure


as String)
 SetMaxCHP(value as Double, unitStr Method sets a maximum casing head pressure
as String)
 SetStepCHP(value as Double, unitStr Method sets an increment value for casing head pressure
as String)
 SetPortDiameter(value as Double, Method sets an orifice diameter
unitStr as String)
 SetCv(value as Double) Method sets a Cv value of the gas lift valve
 SetGLMaxRate(value as Double, Method sets a maximum available gas rate
unitStr as String)
 SetGLTemperature(value as Double, Method sets a lift gas temperature at the casing head
unitStr as String)
 SetLanguage(nlLanguageID As Long) Sets the user interface language
As Boolean Available values for nlLanguageID are:
0x0809 English (UK)
0x0419 Russian
0x080A Spanish (Mexican)
0x0416 Portuguese (Brazilian)
0x0804 Chinese (PRC)
Function returns True if language was changed successfully
and False otherwise

92
PIPESIM 2012.3 Open Link Reference Manual

IPlotQgiVsChp Object - Operations

 DisplayDialog() Displays the operations graphical interface.


This method is obsolete. Use DisplayDialog3 method instead
T T

 DisplayDialog2(p_VarUnitManager Displays the operations graphical interface. Pass a Null


As Variant) variant as the first argument.
This method is obsolete. Use DisplayDialog3 method instead
T T

 DisplayDialog3(p_VarUnitManager Displays the operations graphical interface. Pass a Null


As Variant, bCloseOK As Boolean) variant as the first argument. Return value is true if dialog box
was closed OK, otherwise false.
 GenerateQgiVsChpPlot(bOk as Runs the simulation
Long); This method is obsolete. Use GenerateQgiVsChpPlot2
method instead
 GenerateQgiVsChpPlot2(p_VarUnit Runs the simulation. Pass a Null variant as the first argument.
Manager As Variant, bOk as Long);
 KillOperation(); Terminates the engine run
 WriteOperationFile(p_VarUnitMana Writes an ASCII file containing the instructions to the
ger As Variant, bOK As Boolean) simulation engine to run the operation. Pass a Null variant as
the first argument.

Single Branch Operations: Supporting Interfaces

IBoundaryProps Interface

IBoundaryProps - Properties

 OutletPressure_SI As Double
T T
Gets/sets the outlet pressure in strict SI units
 InletPressure_SI As Double
T T
Gets/sets the inlet pressure in strict SI units
 FluidRate_SI As Double
T T
Gets/sets the fluid rate in strict SI units
 CalculatedVariable As Long
T T
Gets/sets the calculated variable:
0: Outlet Pressure
1: Inlet Pressure,
2: FluidRate
 FluidType As Long
T T
Gets/sets the fluidrate type:
0: liquid
1: gas
2: mass

93
PIPESIM 2012.3 Open Link Reference Manual

IEngineOptions Interface

IEngineOptions - Properties

 EngineSwitch As String
T T
Sets/gets extra command line arguments for the PIPESIM
engine
 IncludeFilePath As String
T T
The full path name to the engine’s operation file
 PipesimEnginePath As String
T T
The full path to the PIPESIM engine
 PlotToolPath As String
T T
The full path to the plotting tool (PSPlot)
 PsmFilePath As String
T T
The full path to the model file (.psm file)
 RunEngineMinimised As Boolean
T T
Runs the engine in a minimised window
 RunPlotToolWithEngine As Boolean
T T
If True shows the plotting tool (PSPlot) as the simulation
runs

IEngineOptions - Get Methods

 GetIsEngineActive () As Boolean
T T
Returns True if the PIPESIM engine is running, otherwise
False

IEngineOptions - Operations

 KillOperation ()
T T
Terminates the engine run
 RunOperation ()
T T
Runs the simulation

IFactorRange Interface

IFactorRange - Properties

 Min As Double
T T
Sets/gets minimal value for range object
 Max As Double
T T
Sets/gets maximum value for range object
 Enabled As Boolean
T T
Enable/disable range object
 LowerEgge As String
T T
Lower edge for minimum and maximum values
 UpperEgge As String
T T
Upper edge for maximum and minimum values

94
PIPESIM 2012.3 Open Link Reference Manual

Gas Lift Diagnostics COM Object

Name

The name of the COM is GLDIAGN.DLL

Supported Interfaces

GLWell interface: to model and perform diagnostics on a gas lift injected well

Dependency MAP

List of Dependencies: WELLCURVE.DLL, MFC42.DLL

GLWell Interface and Object


The GetArrayXXX functions return a one-dimensional array. The number of components in the array is
equal to the number of valves defined in the well (see the 'AddGasLiftValve5' method). The first component
in the array (index = 0) corresponds to the top valve.

GLWell Object - Get Methods

 GetArrayEqCurvePressure(pVar)
T T
Returns in pVar an array of Doubles with the equilibrium
curve pressure at each valve depth
 GetArrayGasRate(pVar)
T T
Returns in pVar an array of Doubles with the actual
throughputs for each valve. Uses Thornhill & Craver
equation
 GetArrayInjectionPressure(pVar)
T T
Returns in pVar an array of Doubles with the injection
pressure at each valve depth
 GetArrayInjectionTemperature(pVar)
T T
Returns in pVar an array of Doubles with the injection
temperature at each valve depth
 GetArrayMaxGasRate(pVar)
T T
Returns in pVar an array of Doubles with the maximum
throughputs for each valve. Uses Thornhill & Craver
equation
 GetArrayProductionPressure(pVar)
T T
Returns in pVar an array of Doubles with the production
pressure at each valve depth
 GetArrayProductionTemperature(pVar)
T T
Returns in pVar an array of Doubles with the production
temperature at each valve depth
 GetArrayValveClosePressure(pVar)
T T
Returns in pVar an array of Doubles with closing
pressures for each valve
 GetArrayValveOpenPressure(pVar)
T T
Returns in pVar an array of Doubles with opening
pressures for each valve

95
PIPESIM 2012.3 Open Link Reference Manual

 GetArrayValveStatus(pVar)
T T
Returns in pVar an array of Strings with the valve status:
such as “Throttling”, “Fully Open”.
 GetEquilibriumCurve(pVar)
T T
Returns in pVar a 2-dimensional array of Doubles with
{injection TVD, equilibrium pressure} pairs in [ft, psia].
The number of data points is variable and match the
results from the plot file.
 GetLastError(sLastError As String)
T T
Returns the last error message produced by GLD.
 GetProductionPressureCurve(pVar, type
T T
Returns in pVar a 2-dimensional array of Doubles with
As Long) {pressure, depth} pairs in [psia, ft]. The number of data
points is variable and match the results from the plot
file.
Type: if 0 depth values are MD, if 1 depth values are TVD
 GetProductionTemperatureCurve (pVar,
T
Returns in pVar a 2-dimensional array of doubles with
type As Long) T
{temperature, depth} pairs in [F, ft]. The number of data
points is variable and match the results from the plot
file.
Type: if 0 depth values are MD, if 1 depth values are TVD

GLWell Object - Set Methods

 AddCalculatedPressureProfile (type As
T T
Type: 0 = MD; 1 = TVD
Long, pVar, pressUnits As String, lenUnits pVar: a two dimensional array containing Doubles
As String) {depth, pressure}
pressUnits: pressure units for the values in the arrays
lenUnits: units for the depth values in the array. Any of
ft miles, m, km
This method can be used when the profile type is
'Simulate' to enter an existing simulated profile. Use in
conjunction with the
property CalculatePressureProfileOnDisplay to control
T T

the execution of PIPESIM.


 AddCalculateTempProfile (type As Long,
T T Type: 0 = MD; 1 = TVD
pVar, tempUnits As String, lenUnits As pVar: a two dimensional array containing Doubles
String) {depth, temperature} tempUnits: temperature units for
the values in the arrays lenUnits: units for the depth
values in the array. Any of ft miles, m, km. This
method can be to enter an existing simulated
temperature profile. If not supplied the temperature
profile will be calculated internally by the Diagnostics
module.

96
PIPESIM 2012.3 Open Link Reference Manual

 AddDeviationSurvey (pVar, TVDUnits As


T T
Required if ProfileMode property is set to User Survey
T T

String, MDUnits As String) AND Pressure Survey type is MD


pVar: a two dimensional array containing Doubles {TVD,
MD}
TVDUnits: units for the TVD values in the array. Any of ft,
miles, m, km
MDUnits: units for the MD values in the array. Any of ft,
miles, m, km
 AddEquilibriumCurve (pVar, pressUnits
T T
pVar: a two dimensional array containing Doubles
As String, lenUnits As String) {depth, pressure}
pressUnits: pressure units for the values in the arrays
lenUnits: units for the depth values in the array. Any of
ft, miles, m, km
This method can be used to enter an existing equilibrium
curve. Use in conjunction with the
property CalculateEqCurveOnDisplay to control the
T T

execution of PIPESIM.
 AddGasLiftValve5 (type As Long, depth
T T Type: valve type Any of:
As Double, Ptro As Double, ptroUnits As 0 = IPO, 1 = PPO, 2 = IPS, 3 = PPS, 4 = Orifice, 5 = Dummy
String, Ap As Double, ApAb As Double,
depth [ft]: valve depth
PortSize As Double, NomOD As Double,
desc As String, Cd As Double, dpfo As ptro: test rack pressure
Double) ptrUnits: test rack pressure units
Ap[in2]: port area
ApAb: port area/bellows area
PortSize [in]: port size
NomOD [in]: nominal OD
Desc: valve name/model
Cd: Cd value if Cd = 0 GLD will calculate it
Dpfo [psi]: default = -7777. If default the Venezuelan
method will be used for gas throughput calculations, if
given value not equal default value, NZ method will be
used
 AddPressureSurvey (type As Long, pVar,
T T Required if ProfileMode property is set to User Survey
pressUnits As String, lenUnits As String) Type: 0 = MD; 1 = TVD
pVar: a two dimensional array containing Doubles
{depth, pressure}
pressUnits: pressure units for the values in the arrays
lenUnits: units for the depth values in the array. Any of
ft, miles, m, km

97
PIPESIM 2012.3 Open Link Reference Manual

 AddTemperatureSurvey (type As Long,


T T
Type: 0 = MD; 1 = TVD
pVar, tempUnits As String, lenUnits As pVar: a two dimensional array containing Doubles
String) {depth, temperature}
tempUnits: temperature units for the values in the
arrays
lenUnits: units for the depth values in the array. Any of
ft, miles, m, km
 SetApi
T T
Optional, this parameters are written to the u2p file
(api As Double)
 SetGLWellProperties2 (gsg As Double,
T T
gsg: gas specific gravity
resDepth As Double, chp As Double, resDepth: reservoir depth [ft]
chpUnits As String, cht As Double, tht As
chp: injection head pressure
Double, rest As Double, surft As Double,
Qgi As Double) chpUnits: pressure units for the value entered as chp.
Any of: psia psig, bara, barg, atma, atmg, kPa a, kPa g,
kg/cm2 a, kg/cm2 g
cht: injection head temperature [F]
tht: production head temperature [F]
rest: reservoir temperature [F]
surf: surface ambient temperature [F]
Qgi: measured injection gas rate [mmscf/d]
 SetHorizontalCorrelation (bsName As
T T
Optional, this parameters are written to the u2p file
String, HoldupFactor As Double,
FrictionFactor As Double)
 SetIprTypeAndValue (IprType As Long,
T T
Optional, these parameters are written to the u2p file.
IprValue As Double) IprType = 0 for WELLPI, IprType = 1 for VOGEL
 SetPressureUnits (unitStr As String)
T T
Call this function to specify pressure units to display in
GLD output. Any of: psia psig, bara, barg, atma, atmg,
kPa a, kPa g, kg/cm2 a,
kg/cm2 g
 SetProductionPressureGradient (value
T T
Required if ProfileMode property is set to Constant
T T

As Double, unitStr As String) Gradient


 SetSinglePhaseCorrelation (bsName As
T T
Optional, this parameters are written to the u2p file
String, Efficiency As Double)

98
PIPESIM 2012.3 Open Link Reference Manual

 SetTransferLinesParams3
T T
kickOffInjPressure: casing head pressure to start
(kickOffInjPressure As Double, unloading
kickOffPres_Units As String, kickOffPres_Units: the pressure units for the above
unloadingGrad As Double, parameter
unloadingGrad_Units As String,
unloadingGrad: the unloading gradient
injPresDrop As Double, injPresDrop_Units
As String, locatingDPAtValve As Double, unloadingGrad_Units: Any of psi/ft, bar/m, atm/m,
locatingDP_Units As String, kPa/m
TransferFactor As Double) injPresDrop: pressure drop between valves
injPresDrop_Units: Any of: psi, bar ,atm, kPa, kg/cm2
locatingDPAtValve: Safety factor normally used for both
injection pressure operated and production pressure
operated valves. This is an offset from the injection
pressure line to the start of the transfer (unloading) line
at each valve location. Default value for injection
pressure operated valves is 50 psi. and default for
production pressure operated valves is 100 psi
Call this function to display transfer line plots
 SetTransferLinesParams4 (kickOffInjPress
T T
The same as SetTransferLinesParams (…) with the added
T T

ure As Double, kickOffPres_Units As design mode parameters:


String, unloadingGrad As Double, SurfaceOffset: percentage of the difference between the
unloadingGrad_Units As String, operating production (wellhead) pressure and the
injPresDrop As Double, injPresDrop_Units injection pressure. The pseudo wellhead pressure is then
As String, locatingDPAtValve As Double, the operating wellhead pressure plus this surface offset
locatingDP_Units As String, SurfaceOffset value. Used in Variable Gradient method in design
As Double, BottomOffset As Double, mode.
BottomOffset_Units As String)
BottomOffset: The bottom hole offset is a pressure
difference value. The pseudo flowing bottom pressure is
then the bottom hole injection pressure minus the
bottom hole offset value. The pseudo production
pressure used for design is then a straight line drawn
between the pseudo wellhead pressure and the pseudo
bottom hole pressure. Used in Variable Gradient method
in design mode.
SetValveTemperatureFrom (long ValveTempFrom)
T T

This function sets the valve temperature to be equal to


:0: Production Temperature, 1: Ambient Temperature, 2:
Injection Temperature. Only applicable in design mode

99
PIPESIM 2012.3 Open Link Reference Manual

 SetTransferLinesParams5 (kickOffInjPress
T T

ure As Double, kickOffPres_Units As


String, unloadingGrad As Double,
unloadingGrad_Units As String,
injPresDrop As Double, injPresDrop_Units
As String, locatingDPAtValve As Double,
locatingDP_Units As String,
TransferFactor As Double,
vbIsTransferPinjPprod As Boolean)
 SetTubingHeadPressure (value As
T T
Required if ProfileMode property is set to Constant
T T

Double, unitStr As String) Gradient or Variable Gradients


 SetVerticalCorrelation (bsName As
T T
Optional, this parameters are written to the u2p file
String, HoldupFactor As Double,
FrictionFactor As Double, SwapAngle As
Double)

GLWell Object - Operations

 DisplayGasLiftDialog
T T
Pops up the GLD GUI
 DisplayGasLiftDialog2 (JpgFilename As
T
Same as DisplayGasLiftDialog but it allows to pass Jpeg
T

String, p_VarUnitManager, bCloseOK As file name where plot will be stored T

Boolean)T

 DisplayGasLiftDialog3 (JpgFilename As
T
Same as DisplayGasLiftDialog but it allows to pass file
T

String, p_VarUnitManager, filetype As name where plot will be stored change file type (filetype
Long, cx As Long, cy As Long, bCloseOK can take values 0 – jpeg, 1 – wmf, 2 - emf) and change
As Boolean) T
size of the plot (cx, cy) only for Jpeg file.
 CreateJpgFile3 (JpgFilename As String,
T
Function runs the simulation and writes plot file. It
p_VarUnitManager, filetype As Long, cx allows to pass file name where plot will be stored
As Long, cy As Long, bOK As Boolean) T
change file type (filetype can take values 0 – jpeg, 1 –
wmf, 2 - emf) and change size of the plot (cx, cy) only for
Jpeg file.

GLWell Object - Properties

 PressureProfileMode As Long
T T
Mode = 0 Constant Gradient
Mode = 1 User Survey
Mode = 2 PIPESIM Calculated
Mode = 3 Variable Gradients
Use this property to set/get the pressure profile mode.

100
PIPESIM 2012.3 Open Link Reference Manual

 CalculateEqCurveOnDisplay As Boolean
T T
If True the GLD module will calculate the equilibrium
curve just before displaying the GUI (when
calling DisplayGasLiftDialog ()). If an existing curve has
T T

been entered with the method AddEquilibriumCurve


T T

this property should be set to false to avoid


recalculation.
 CalculatePressureProfileOnDisplay As
T T
If True (AND the profile type is 'Simulate') the GLD
Boolean module will calculate the pressure profile just before
displaying the GUI (when calling DisplayGasLiftDialog ()).
T T

If an existing profile has been entered with the


method AddCalculatedPressureProfile this property
T T

should be set to false to avoid recalculation.


 DesignMode As Boolean
T T
Sets the module in design mode (True) otherwise
diagnostics mode (False). Default is False
 Gor As Double
T T
The gor in scf/bbl. Required if PressureProfileMode = 3
T T

 IterationMode As Long
T T
Mode = 0 calculate flowrate {DEFAULT}
Mode = 1 calculate inlet pressure
This is applicable when PressureProfileMode = 2
T T

 LiquidRate As Double
T T
The production liquid rate in bbl/d. Required
if PressureProfileMode = 3
T T

 PipesimEnginePath As String
T T
bstrPath is the full path to a valid PIPESIM engine
This data is required if PressureProfileMode = 2
T T

 PipesimIterationTolerance As Double
T T
Sets/gets the tolerance in % for the convergence of
PIPESIM iterations (default = 1 %)
 ProductionPressureGradient As Double
T T
The pressure gradient in psi/ft. Required
if PressureProfileMode = 0
T T

 PsmFilePath As String
T T
The full path to a valid psm file
This data is required if PressureProfileMode = 2
T T

 ReservoirPressure As Double
T T
Gets/sets the static reservoir pressure
 SetDisplayUnitSystem As Long
T T
System = 0 Engineering (DEFAULT), System = 1 SI

 ShowAmbientTemperature As Long
T T
(default = 1)
 ShowEquilibriumCurvePlot As Long
T T
(default = 1)
 ShowEquilibriumCurvePlot As Long
T T
(default = 1)
 ShowInjectionPressure As Long
T T
(default = 1)
 ShowProductionPressurePlot As Long
T T
(default = 1)
 ShowProductionTemperature As Long
T T
(default = 1)
 ShowTransferLinesPlot As Long
T T
(default = 1)
 ShowValveClosePressure As Long
T T
(default = 1)
 ShowValveOpenPressure As Long
T T
(default = 1)

101
PIPESIM 2012.3 Open Link Reference Manual

 ValveTemperature (ValveIndx As Long)


T T
Sets to valve at 0-based index ValveIndx (top valve is
As Double indx = 0) the temperature given in val [F]. See also the
function SetValveTemperatureFrom (…)
T T

 Watercut As Double
T T
The watercut in %. Required if PressureProfileMode = 3
T T

 WellName As String
T T
An optional well description

GLWell Object Example

VBA Sample Code


'Create an instance of the GLWell interface

Dim obj As GLDIAGNOSTICSLib.GLWell


Set obj = New GLWell

'Display all variables using SI default units


obj.SetDisplayUnitSystem = 1

'Set the pressure units to be 'barg'


obj.SetPressureUnits barg

'Assign a name to the well


obj.WellName = Well_123

'Set the well properties


gsg = 0.64 'gas specific gravity
res_depth = 8000 'reservoir depth = 8000 ft
ch_p = 1400 'injection pressure 1400 psia
ch_t = 70 'injection temperature 200 F
tub_t = 120 'tubing head temperature 120 F
res_t = 220 'reservoir temperature 220 F
amb_t = 70 'surface ambient temp 70 F
tub_head_pres = 180 'tubing head pressure 180 psia
mqgi = 2 'measured injection gas rate 2 mmscf/d

obj.SetGLWellProperties2 gsg, res_depth, ch_p, psia,ch_t, tub_t, res_t, amb_t,


mqgi
obj.SetTubingHeadPressure tub_head_pres, psia

'Set the pressure profile type to Variable Gradients


obj.PressureProfileMode = 3

'Add 4 valves valves:


'type : IPO, PPO, IPS, PPS, ORIF, DUM
'depth in ft
'test rack pressure
'test rack pressure units
'port area
'port area over bellows area
'nominal port size
'nominal external diameter
'description
'Cd value (default 0.865)

102
PIPESIM 2012.3 Open Link Reference Manual

'Delta P fully open

obj.AddGasLiftValve5 IPO, 3000, 1950 , psig, 0.013, 0.0169, 0.1250, 1.5, Camco
R20 1/8 Port, 0.865, 800

obj.AddGasLiftValve5 IPO, 4000, 1960 , psig, 0.013, 0.0169, 0.1250, 1.5, Camco
R20 1/8 Port, 0.865, 800

obj.AddGasLiftValve5 IPO, 5000, 1980 , psig, 0.013, 0.0169, 0.1250, 1.5, Camco
R20 1/8 Port, 0.865, 800

obj.AddGasLiftValve5 IPO, 6000, 1990 , psig, 0.013, 0.0169, 0.1250, 1.5, Camco
R20 1/8 Port, 0.865, 800

obj.AddGasLiftValve5 IPO, 7000, 1995 , psig, 0.013, 0.0169, 0.1250, 1.5, Camco
R20 1/8 Port, 0.865, 800

'Display the graphical interface


obj.DisplayGasLiftDialog

'Get the status of each of the valves


Dim vtest As Variant
obj.GetArrayValveStatus vtest

IGLDesign Object

IGLDesign Object - Get Methods

 GetCurrentGLValve (indx As Long,


T
Returns the recently calculated valve parameters at the
manuf As String, series As String, specified index
portname As String, portsize As manuf: manufacturer name
T

Double, choke As Double, mode As


series: series name
String, ptro As Double, Ap As Double,
T

Ab As Double, nomOD As Double, Cd portname:


T

As Double, tvd As Double, gasrate As portsize:


T

Double)
choke: valve choke
T

mode: valve type (IPO, PPO, IPS, PPS, Orifice or Dummy)


T T T T

md [ft]: valve depth


T T

ptro: test rack pressure


T T

Ap [in2]: port area


T T

Ab: port area/bellows area


T T

portsize [in]: port size


T T

nomOD [in]: nominal OD


T T

Cd: Cd value
T T

103
PIPESIM 2012.3 Open Link Reference Manual

 GetCurrentSystem(pIValveSystem As
T Returns the recently calculated IGLValveSystem object
Object)T

 GetCurrentValveSystemCount(Valve
T
Returns the count of recently calculated GL valves
Count As Long T

 GetDesignBias() As IDesignBias
T T
Returns the IDesignBias object T T

 GetDesignParams () As
T
Returns the IDesignParams object T T

IDesignParams T

 GetGLValve (indx As Long, manuf As


T
Returns the installed valve parameters at the specified index
String, series As String, portname As manuf: manufacturer name
T

String, portsize As Double, choke As


series: series name
Double, mode As String, ptro As
T

Double, Ap As Double, Ab As Double, portname:


T

nomOD As Double, Cd As Double, md portsize:


T

As Double, gasrate As Double)


choke: valve choke
T

mode: valve type (IPO, PPO, IPS, PPS, Orifice or Dummy)


T T T T

md [ft]: valve depth


T T

ptro: test rack pressure


T T

Ap [in2]: port area


T T

Ab: port area/bellows area


T T

portsize [in]: port size


T T

nomOD [in]: nominal OD


T T

Cd: Cd value
T T

 GetIsUnset(bUnset As Boolean)
T T
Returns True is data is not set and False otherwise
 GetProductionPressure(depth As
T
Returns the production pressure
Double) As Double T

 GetProductionTemperature(depth
T
Returns the production temperature
As Double) As Double T

 GetProjectData(ProjData)
T T
Returns the array of strings containing project data
 GetValveSystemCount(ValveCount
T
Returns the count of installed GL valves
As Long) T

 GetLastError(errorStr As String)
T T
Returns the last error message

IGLDesign Object - Set Methods

 SetCompletionParams(Params)
T T
Sets the completion type as String for report purposes.
String must be passed as Variant type
 SetCurrentSystem(pIValveSystem As
T
Sets the IGLValveSystem object
Object)T

104
PIPESIM 2012.3 Open Link Reference Manual

 SetFlowCorrsParams(Params)
T T
Sets the flow correlation as String for report purposes. String
must be passed as Variant type
 SetFluidParameters(Params)
T T
Sets the flow correlation as String for report purposes. String
must be passed as arrays of 3 String elements. First one is
GOR/OGR value, the second is WCut value and the last one
is Api value.
 SetLanguage(nlLanguageID As Long)
T
Sets the user interface language
As Boolean T

Available values for nlLanguageID are:


0x0809 English (UK)
0x0419 Russian
0x080A Spanish (Mexican)
0x0416 Portuguese (Brazilian)
0x0804 Chinese (PRC)
Function returns True if language was changed successfully
and False otherwise
 SetProjectData(ProjData)
T T
Sets the Project data. The data must be passed as array of
8 Strings. These strings are:
Project name,
Project User,
Job name,
Work Order,
Client Name,
Manager Name,
Company Name,
Model Specification

IGLDesign Object - Operations

 AddDeviationSurvey(pVar_MDvsTVD
T
Sets user-defined deviation survey
_Points)T

pVar: a two dimensional array containing Doubles { MD ,


TVD} in Strict_SI units
 CheckInput(Description As String) As
T
Validates the design data and returns True if data is ok.
Boolean T
Otherwise the return value is False and Description contains
T

the error message T

 DisplayGasLiftDesign(p_VarUnitMan
T
Pops up the GLDesign GUI.
ager, bCloseOK As Boolean) T

 DisplayResults(p_VarUnitManager)
T
Pops up the results of the GL design calculations
As Boolean T

 PerformDesign() As Boolean
T T
Runs the engine to perform design

105
PIPESIM 2012.3 Open Link Reference Manual

IGLDesign Object - Properties

 AmbientTemperature As Double
T T

 BottomHoleOffset As Double
T T

 DesignInjectionPressure As Double
T T

 DesignMethod As String
T T
Can be one of the following: API, IPO-Surface Close, Variable
Gradient, PPO Design
 DesignMethod_ As Long
T T
0 for API or IPO-Surface Close,
1 for IPO-Pt Mai/Max,
2 for PPO Design
 DesignSpacing As Long
T T
0 for new spacing,
1 for current spacing
 EngineFilePath As String
T T

 InjGasSpecificGravity As Double
T T

 InjGasSurfaceTemperature As
T

Double T

 InjPresDropBetweenValves As
T

Double T

 InstallCurrentSystem As Boolean
T T

 KickoffInjectionPressure As Double
T T

 LocatingDPAtValveLocation As
T

Double T

 MinimumValveInjDP As Double
T T

 MinimumValveSpacing As Double
T T

 OperatingProdPressure As Double
T T

 PackerDepth As Double
T T

 PlotToolPath As String
T T

 ProductionPressureCurve As Integer
T T
Production Pressure Curve
0 for Production Pressure Model
1 for Equilibrium Curve
 PsmFilePath As String
T T

 Recommendations As String
T T

 ReservoirDepth As Double
T T

 ReservoirPressure As Double
T T

 ReservoirTemperature As Double
T T

 SurfaceOffset As Double
T T

 SurfaceOffsetDP As Double
T T

106
PIPESIM 2012.3 Open Link Reference Manual

 SurfaceOffsetType As Boolean
T T

 TargetInjGasRate As Double
T T

 TransferFactor As Double
T T

 TubingName As String
T T

 UnloadingGradient As Double
T T

 UnloadingProdPressure As Double
T T

 ValveLocation As Long
T T
Top Valve location
0 for liquid to surface,
1 for liquid not to surface
 ValveManufacturer As String
T T
Valve manufacturer filter value
 ValveMinPortSize As Double
T T
Valve min port size filter value
 ValveSeries As String
T T
Valve series filter value
 ValveType As String
T T
Valve type filter value
 ValveNominalOD As Double
T T
Valve size filter value
 ValveTemperature As String
T T
Can be one of the following: Production, Ambient, Injection
or Unloading
 ValveTemperature_NonTop As Long
T T
Unloading temperature for non-top valve:
0 for Production
1 for Ambient
2 for Injection
3 for Unloading
 ValveTemperature_Top As Long
T T
Unloading temperature for top valve:
0 for Production
1 for Ambient
2 for Injection
3 for Unloading
 WellAbsorbs As Boolean
T T

IDesignParams Object

IDesignParams Object - Properties

 BracketingSpacing As Double
T T

 BracketingTVD As Double
T T

 DesignInjectionPressure As Double
T T

 InjGasSpecificGravity As Double
T T

 InjGasSurfaceTemperature As
T

107
PIPESIM 2012.3 Open Link Reference Manual

DoubleT

 InletPressure As Double
T T

 IsBracketingEnabled As Boolean
T T

 IsPressureCondition As Boolean
T T

 KickoffInjectionPressure As Double
T T

 LiquidRate As Double
T T

 MinimumValveInjDP As Double
T T

 MinimumValveSpacing As Double
T T

 MinUnloadingLiqRate As Double
T T

 OperatingProdPressure As Double
T T

 ReservoirPressure As Double
T T

 TargetInjGasRate As Double
T T

 UnloadingGradient As Double
T T

 UnloadingProdPressure As Double
T T

 UseAnnulusGasGradient As Boolean
T T
Specifies usage of static gradient if True and rigorous friction
and elevation DP otherwise

IDesignBias Object

IDesignBias - Properties

 BottomOrifCD As Double
T T
Discharge coefficient for orifice
 DeltaPtroBottomValve As Double
T T

 InjPresDropBetweenValves As
T

DoubleT

 IsCalculateInjPresDrop As Boolean
T T

 IsPlaceIPOatBottom As Boolean
T T

 IsPlaceOrificeatBottom As Boolean
T T

 IsTransferFactorBetweenIPandPP As
T

Boolean T

 LocatingDPAtValveLocation As
T

DoubleT

 TransferFactor As Double
T T

108
PIPESIM 2012.3 Open Link Reference Manual

IGLValveSystem Object

IGLValveSystem Object - Get Methods

 GetGasLiftProps(InjPressure As
T
Returns the GL properties:
Double, MaxAvailableRate As Double, InjPressure – injection pressure
T

InjTemp As Double, GasSG As Double,


MaxAvailableRate – gas rate
bstrPvtFile As String, bIsBlackOil As
T

Boolean) T
InjTemp – surface injection temperature
T

GasSG – gas specific gravity


T

bstrPvtFile – PVT file name (for compositional model)


T

bIsBlackOil – True if black oil model deifned, False otherwise


T T

 GetIsUnset(bUnset As Boolean)
T T
Returns True is data is not set and False otherwise
 GetLastError(errorStr As String)
T T
Returns the last error message
 GetValveCount(lValveCnt As Long)
T T
Returns the count of installed GL valves

IGLValveSystem Object - Set Methods

 SetGasLiftProps(InjPressure As
T T Sets the GL properties:
Double, MaxAvailableRate As Double, InjPressure – injection pressure
T

InjTemp As Double, GasSG As Double,


MaxAvailableRate – gas rate
bstrPvtFile As String, bIsBlackOil As
T

Boolean) InjTemp – surface injection temperature


T

GasSG – gas specific gravity


T

bstrPvtFile – PVT file name (for compositional model)


T

bIsBlackOil – True if black oil model deifned, False otherwise


T T

 SetLanguage(nlLanguageID As Long)
T
Sets the user interface language
As Boolean T

Available values for nlLanguageID are:


0x0809 English (UK)
0x0419 Russian
0x080A Spanish (Mexican)
0x0416 Portuguese (Brazilian)
0x0804 Chinese (PRC)
Function returns True if language was changed successfully
and False otherwise

109
PIPESIM 2012.3 Open Link Reference Manual

IGLValveSystem Object - Operations

 AddGLValve(manuf As String, series


T
manuf: manufacturer name
T

As String, portname As String, series: series name


T

portsize As Double, choke As Double,


portname:
mode As String, ptro As Double, Ap
T

As Double, Ab As Double, nomOD As portsize:


T

Double, Cd As Double, tvd As Double, choke: valve choke


T

gasrate As Double)
mode: valve type (IPO, PPO, IPS, PPS, Orifice or Dummy)
T

T T T T

ptro: test rack pressure


T T

Ap: port area


T T

Ab: port area/bellows area


T T

nomOD : nominal OD
T T

Cd: Cd value
T T

tvd : valve depth


T T

gasrate
T T

 ClearValveSystem()
T T
Removes all installed valves
T T

 DisplayGLValveSystem(p_VarUnitMa
T Pops up the GL Valve System GUI
nager, bCloseOK As Boolean) T

IGLValveSystem Object - Properties

 BellowsArea(iValveIndx As Long) As
T
Gets bellows area for the valve specified by iValveIndx
T T

Double T

(Read only property)


 ChokeSize(iValveIndx As Long) As
T
(Read only property)
Double T

 DPFO(iValveIndx As Long) As Double


T T

 Manufacturer(iValveIndx As Long) As
T
(Read only property)
String
T

 MeasuredDepth(iValveIndx As Long)
T
(Read only property)
As Double T

 nomOD(iValveIndx As Long) As
T
(Read only property)
Double T

 PortArea(iValveIndx As Long) As
T
(Read only property)
Double T

 portname(iValveIndx As Long) As
T
(Read only property)
String
T

 portsize(iValveIndx As Long) As
T
(Read only property)
Double T

 ptro(iValveIndx As Long) As Double


T T
(Read only property)

110
PIPESIM 2012.3 Open Link Reference Manual

 series(iValveIndx As Long) As String


T T
(Read only property)
 UseAnnulusGasGradient As Boolean
T T

 UseValveDetails As Boolean
T T

 ValveCv(iValveIndx As Long) As
T
(Read only property)
Double T

 ValveMode(iValveIndx As Long) As
T
(Read only property)
String
T

 ValveModeType(iValveIndx As Long)
T (Read only property)
As Long T

Single Branch Output Reader COM


An ATL COM DLL has been developed to read data from a performance curves file.

Name

The name of the COM is WELLCURVE.DLL.

Interfaces supported & Registering

The COM is support on C++ and Visual basic

Register the COM by using REGSVR32.EXE.

For C++ usage:

Include the following paragraph in the stdafx.h header file:

#import wellcurve.dll no_namespace


For Visual basic usage:

Include the COM object in your project, select Projects -> References, then WELLCURVELib 1.0 type library.

1. COM diagram
2. Dependency map
3. COM methods

ReadData Object - Get methods

 GetFileCreatorName() As String
T T
Returns the name of the simulator that has been used to
create the performance curves.
Parameters - None
Return Value - A string.

111
PIPESIM 2012.3 Open Link Reference Manual

 GetNumberofVariables() As Long
T T
Returns the number of variables (data columns) in the
performance curve.
Parameters - None
Return Value - An integer.
 GetUnitofVariable(VariableName As
T
Returns the unit of given the column variable name.
String) As String
T

Parameters - VariableNme - Name of the column variable


Return Value -A string.
 GetDataofVariable(VariableName As
T
Returns the array of data at the given column variable name
String) T
in the performance curves file.
Parameters - VariableNme -Name of the column variable
Return Value - A variant (as an array of variants). The
number of elements in a sub variant is equal to the number
of data points between two NEWLINE keywords in the
VarName column plus one (for legends).
 GetVariableName(Index As Long) As
T
Returns the name of column variable given the position of
StringT
the variable.
Parameters - Index - The position of the variable name in the
column variable list.
Return Value - A string.
 GetMultipleVariablesData(Indexes)
T T
Returns the array of data at the given number of variables in
the performance curves file
Parameters - Indexes - Indexes is a variant that contains an
array of integers (indexes of the column variables)
Return Value - A variant (as an array of variants). The
number of variants in the main array is equal to the number
of elements in the Indexes array.
 GetTitle() As String
T T
Returns the title of the well performance curves file.
Parameters - None
Return Value - A string.
 GetNumberofDataSets() As Long
T T
Returns the number of data sets (= number of NEWLINE
cards) in the performance curves file.
Parameters - None
Return Value - An integer.
 GetVariableNamesList()
T T
Returns the list of names of column variables in the
performance curves file.
Parameters - None
Return Value - A Variant. The number of elements in the
Variant is equal to the number of columns in the
performance curves file.

112
PIPESIM 2012.3 Open Link Reference Manual

 GetAllData()
T T
Returns the entire column variables data in the performance
curves file.
Parameters - None
Return Value - A Variant (as an array of variants). The
number of Variants in the array is equal to the number of
column variables and the number of elements (number of
double type values) in a sub Variant is equal to the number
of data points per column variable in the performance
curves file.
 GetLastError() As String
T T
Returns the last error message

ReadData Object - Operations

 OpenFile(FilePath As String) As
T
Opens the given performance curves file, and returns a
Boolean T
Boolean type. This function must be called before any other
functions (methods) in the DLL are called.
Parameters - FileName -the full path (including the name)
of the performance curves file.
Return Value - True for successful open or False for failure
to open.
 CloseFile() As Boolean
T T
Closes the performance curves file that has been previously
opened, and returns a Boolean type. This function must be
called after finish reading the data and before open
another file.
Parameters - None
Return Value - True for successful closure, or False for
failure to close.

113
PIPESIM 2012.3 Open Link Reference Manual

ReadData Object Examples

Visual C++ Sample Code


void CPerformCurve::OnRun()
{
_bstr_t CreatorName; // File creator's name
_bstr_t VarName; // Column name
int NoVars; // Number of data columns in the file
int NoSets; // Number of data sets per column
_variant_t vaData; // Data in a column
_variant_t vaVarList; // Column names list
int ist, ied; // lower and upper bound of a variant
int jst, jed; // lower and upper bound of a variant
int i, j; // Counters
SAFEARRAY *sa1, *sa2; // Supporting variables
_variant_t va1, va2; // Supporting variables
long index; // Supporting variable

// Initialize the COM library


CoInitialize(NULL);

// Define a pointer to ReadData COM object


IReadDataPtr pPerCur;

// Create an instance of ReadData


if (pPerCur.CreateInstance(_uuidof(ReadData)) != S_OK)
{
AfxMessageBox(Performance curve ReadData component not found);
return;
}

// Open the performance curve file


BOOL success = pPerCur->OpenFile(D:\\SOURCE\\CASE1\\WELL_11.PLT);

if (success)
{
// Get the file creator's name
CreatorName = pPerCur->GetFileCreatorName();

// Get number of variables (columns) in the file


NoVars = pPerCur->GetNumberofVariables();

// Get number of data sets in a column


NoSets = pPerCur->GetNumberofDataSets();

// Get name of the first column (= Column number 1 NOT 0)


VarName = pPerCur->GetVariableName(1);

// Get data for the above variable (column)


vaData = pPerCur->GetDataofVariable(VarName);

// How to get data out of vaData


if (vaData.vt != VT_EMPTY)
{
sa1 = vaData.parray;
// Get lower bound of vaData, should be zero

114
PIPESIM 2012.3 Open Link Reference Manual

ist = sa1->rgsabound[0].lLbound;
// Get upper bound of vaData, should be equal to NoSets
ied = sa1->rgsabound[0].cElements;
for (i=ist; i<=ied; i++)
{
index = i;
SafeArrayGetElement(sa1, &index, &va1);
if (va1.vt != VT_EMPTY)
{
sa2 = va1.parray;
// Get lower bound of vatmp, should be zero
jst = sa2->rgsabound[0].lLbound;
// Get upper bound of vatmp, should be equal
// to number of data points per data set plus one (legend)
jed = sa2->rgsabound[0].cElements;
for (j=jst; j<=jed; j++)
{
index = j;
SafeArrayGetElement(sa2, &index, &va2);
}
}
}
}

// Get variable list


vaVarList = pPerCur->GetVariableNamesList();

// Close the file


pPerCur->CloseFile();
}

// Destroy the pPerCur


pPerCur.Release();

// Close COM library


CoUninitialize();
}

Visual basic Sample Code


Option Explicit
Private wtst As New WELLCURVELib.ReadData ' create an object of the performance
curve reader
Private Sub Command1_Click()
Dim vtmp As Variant
Dim vData As Variant
Dim NoCol As Integer
Dim NoDataSets As Integer
Dim str As String
Dim ist As Integer
Dim ied As Integer
Dim i As Integer
' Open the file
If (wtst.OpenFile(d:\source\case1\well_11.plt)) Then
' Get the file creator's (simulator's) name
str = wtst.GetFileCreatorName()

115
PIPESIM 2012.3 Open Link Reference Manual

' Get number of variables listed in the file


NoCol = wtst.GetNumberofVariables()
' Get the variable list
vtmp = wtst.GetVariableNamesList()
If (Not IsEmpty(vtmp)) Then
ist = LBound(vtmp)
ied = UBound(vtmp)
For i = ist To ied
' Get individual variable names (method 1)
str = vtmp(i)
' Get individual variable names (method 2)
str = wtst.GetVariableName(i + 1)
' Get the data for above variable (str)
vData = wtst.GetDataofVariable(str)
Next i
End If
' Get number of data sets in the file (= number of NEWLINE keywords)
NoDataSets = wtst.GetNumberofDataSets()
' Get the title of performance curve
str = wtst.GetTitle()
' Get all variable data
vData = wtst.GetAllData()
' Get multiple variable data
' Create indexes array
ReDim vtmp(2)
vtmp(0) = 1
vtmp(1) = 4
vtmp(2) = 6
vData = wtst.GetMultipleVariablesData(vtmp)
' Close the file
wtst.CloseFile
End If
Set wtst = Nothing
End Sub

PerformCurve Object

PerformCurve Object - Get methods

 GetAllVariables()
T T
Returns a Variant type containing multidimensional array of
all values from the curve file. First dimension is a number of
the variables, second dimension is a number of cases and
the third dimension contains all values for the each case
plus the case name. All returned values are wrapped into
Variants
 GetAttributeDetailsAt(VariableName
T
Returns a String (as Variant) containing plotting attributes
As String)
T
for the specified variable
 GetAxisBoundaries()
T T
Returns a Variant type containing two-dimensional array of
the low/upper boundaries for the plot variables.

116
PIPESIM 2012.3 Open Link Reference Manual

 GetBubblePointData()
T T
Returns (as Variant type) the array of three doubles values
for saturation pressure, saturation temperature and
saturation GOR. (Black oil models only.)
 GetColumnVariableDataAt(VarName
T
Returns a Variant type containing two-dimensional array of
As String)T
all values for specified variable. First dimension is a number
of cases and the second dimension contains all values for
the each case plus two extra strings at the end; the first of
these is the case name and the second contains formatting
details of the variable data. All returned values are wrapped
into Variants
 GetConcatenationData()
T T

 GetConeGasSG() As Double
T T
Returns a Double value (wrapped into Variant type) of cone
gas specific gravity
 GetCreationDate()
T T
Returns a String value (wrapped into Variant type) of curve
file date/time stamp
 GetCurrentModelUnitSettings()
T T
Returns (as Variant type) the two-column array of strings
for all plotted variables. First column contains variable’s
measurement and a second column contains variable’s
units
 GetDefaultXAxis() As Long
T T
Returns an index for X axis variable
 GetDefaultYAxis() As Long
T T
Returns an index for Y axis variable
 GetDynamicPlotFileName() As String
T T
Returns a curve file name (short form)
 GetDynamicPlotLongFileName() As
T
Returns a curve file name (long form)
StringT

 GetFileFormatStatus() As String
T T
Return a String New if curve file has new format, otherwise
return value is Old
 GetLastError() As String
T T
Returns the last error message produced by the interface.
 GetMultipleColumnsDataAt(Index)
T T
Returns data similar to GetAllVariables function but for
T

variables passed in Index array T

 GetNoOfDataColumn() As Long
T T
Returns the total number of variables in curve file
 GetNumberOfCases() As Long
T T
Returns the number of cases in curve file
 GetPhysicalPropertyData()
T T
Returns (as Variant type) the array of 6 doubles values for
API, production gas specific gravity, injection gas specific
gravity, water specific gravity, watercut and GOR. (Black
oil models only.)
 GetProductionData() ()
T T
Returns (as Variant type) the array of 2 doubles values for
Well PI and static reservoir pressure
 GetSimulatorName() As String
T T
Returns String with the simulator name
 GetTitle() As String
T T
Returns String with the project description

117
PIPESIM 2012.3 Open Link Reference Manual

 GetUnitDetailsAt(VariableName As
T
Returns (as Variant type) the array of 5 Variants containing
String) T
units information for the specified variable. First element is
a String with measurement name, second element is a
String with current units, third and forth elements are
Doubles with multiplier and adder for conversion from
strict SI units and last fifth element is a String with strict SI
units
 GetUnitsOfVariableName(sVarName
T
Returns String with the current units for the specified
As String) As String
T
variable
 GetUnitType() As String
T T
Returns String ENG or S depending on unit system user
selected for the output files
 GetUserName() As String
T T
Returns String with the user name form project properties
 GetVarableNamesList()
T T
Returns (as Variant type) the array of Strings containing all
variables names from curve file
 GetVariableDataAt(ColName As
T
Returns (as Variant type) the array of Doubles containing all
String) T
values for the specified variable
 GetVariableDataAtCase(VarName As
T
Similar to GetVariableDataAt but returned values are for
T

String, CaseNo As Long) T


the specified case only (case index is 1-based) T

 GetVariableNameAt(Index As Long) As Returns String with the variable name at specified index
T

String
T
(1-based)
 GetViscosityData()
T T
Returns (as Variant type) the array of 4 doubles values for
temperatures and viscosities

PerformCurve Object - Operations

 OpenFile(FilePath As String) As
T
Opens the given performance curves file, and returns a
Boolean T
Boolean type. This function must be called before any
other functions (methods) in the DLL are called.
Parameters - FileName -the full path (including the name)
of the performance curves file.
Return Value - True for successful open or False for failure
to open.
 CloseFile() As Boolean
T T
Closes the performance curves file that has been
previously opened, and returns a Boolean type. This
function must be called after finish reading the data and
before open another file.
Parameters - None
Return Value - True for successful closure, or False for
failure to close.
 IsWellFileOpened() As Boolean
T T
Returns True if the curve file is open and False otherwise

118
PIPESIM 2012.3 Open Link Reference Manual

PNSReaderCOM
PNSREADER.DLL includes COM compatible interfaces that can be used to read output from the output file
T T

(PNS) generated by the PIPESIM and PIPESIM-NET engines.

Supported Interfaces

IPNSCom, IPNSCom2, IPNSCom3: for network models and single branch operations.

Dependency MAP

PNSREADER.DLL has no PIPESIM dependencies. It can be found in the Schlumberger\ COMMON\ACTIVEX


folder.

IPNSCom Interface – Operational methods

 ReadPnsFile
T T
Read a Net engine (.PNS) output file
Params BSTR FileName - Full path of net engine file (.PNS)

IPNSComPtr Interface - Get Methods

 GetNodeCount
T T
Get total number of nodes; that is number of junctions + wells
+ source + sinks + internal + equipment
params (#) int *iNodeCount
 GetBranchCount
T T
Get total number of branches (that is excluding wells which
engine treats as branch + source/sink)
params (#) int - *BranchCount
 GetWellCount
T T
Get total number of wells; that is injection wells + production
wells
 GetNodeData
T T
Fill a supplied SAFEARRAY (blob) with node data for i'th node,
data format fixed as - name, type, g rate, l rate, m rate, press,
temp , press resid, rate resid, glr, lgr, wcut
params int iNode - index of node in array (#) VARIANT
*vNodeData SAFEARRAY to hold data
 GetBranchOutData,
T
Fill a supplied SAFEARRAY (blob) with node data for i'th
 GetBranchInData
T T
branch, data
format fixed as - name, type, g retell rate, m rate, press, temp ,
press resid,
rate resid, glr, lgr, wcut
params int iNode - index of node in array
(#) VARIANT *vNodeData SAFEARRAY to hold data

119
PIPESIM 2012.3 Open Link Reference Manual

 GetNodeName
T T
name of the i'th node in the array
params int iNode - index in array
(#) BSTR *sName - name of iNode'th element
 GetNodeIndex
T T
index of the node in the array
params BSTR *sName - name of the node
(#) int iNode - index in array
 GetNodeType
T T
Get Network node type
params int iNode - index in array
(#) BSTR* sName - Source, Sink, Well, Junction
 GetBranchName
T T
name of the i'th branch in the array
params int iBranch - index in array
(#) BSTR *sName - name of iBranch'th element
 GetBranchIndex
T T
index of the branch in the array
params BSTR *sName - name of the branch
(#) int iBranch - index in array
 GetWellName
T T
name of the i'th well in the array
params int iWell - index in array
(#) BSTR *sName - name of iWell'th element
 GetWellIndex
T T
index of the well in the array
params BSTR *sName - name of the well
(#) int iWell - index in array

120
PIPESIM 2012.3 Open Link Reference Manual

 GetNodeVariableValue,
T T
Gets value of variable type for i'th element of array
 GetBranchOutVariableValue,
T T
params int iNode/iBranch/iWell - index of element in the array
 GetBranchInVariableValue
T T
(#) double *dValue - value requested. 6 - Baker Jardine COM
documentation
 GetWellOutVariableValue
T T

PIPESIM
 GetWellInVariableValue
T T

BSTR sType: Options for non-equipment nodes, branch


inlet/outlet, and well inlet/outlet:
Pressure
Temperature
StockTankMassFlowRate
StockTankLiquidVolumeFlowRate
StockTankGasVolumeFlowRate
FlowingLiquidVolumeFlowRate
FlowingGasVolumeFlowRate
StockTankGLR
StockTankWatercut
FlowingWatercut
Additional options for branch/well inlets:
NumberOfEquipment
MeanVelocity
LiquidVelocity
GasVelocity
ErosionVelocity
ErosionRatio
MaxMeanVelocity
MaxLiquidVelocity
MaxGasVelocity
MaxErosionVelocity
MaxErosionRatio
Options for equipment nodes:
EquipmentPressureDrop
EquipmentPower (if applicable)
EquipmentTemperatureDrop

121
PIPESIM 2012.3 Open Link Reference Manual

  GetNodeStrVariableValue,
T T
Gets value of variable type Gas Rate, glr etc. for named
  GetBranchInStrVariableValue,
T T
element of array
Params BSTR sName - Object identifier (name) for example,
  GetBranchOutStrVariableValue,
T

Well_1
 GetWellInStrVariableValue,
(#) double *dValue - value requested
 GetWellOutStrVariableValue
BSTR sType - GasRate, LiquidRate, MassRate, pressure,
Temperature, PressureResidual, RateResidual, GLR, LGR,
Water Cut, Max Pres, Comp Power, Choke DP
 GetModelStatus
T T
Gets convergence error information from the .PNS file
Params (#) BSTR sName - Convergence status string of the
form 'Model failed to converge Convergence error = %4.3f
Material balance error = %4.3f '

IPNSCom2 Interface - Get Methods

 GetBranchOutVariableValue2(iNode
T
This function works the way similar to
as Long, sType as String)
T
GetBranchOutVariableValue function and gets requested
value of variable type.
sType parameter can have following values:
LiquidRate, MassRate, Pressure, Temperature,
PressureResidual, RateResidual, GLR, LGR, Water Cut, Gas
Density, Oil Density, Water Density, Max Pres, Comp Power,
Choke DP, Mean Velocity, Liquid Velocity, Gas Velocity,
Erosion Velocity, Erosion Ratio, Max Mean Velocity, Max
Liquid Velocity, Max Gas Velocity, Max Erosion Velocity, Max
Erosion Ratio, Gas Volume Rate Standard, Oil Volume Rate
Standard, Water Volume Rate Standard, Gas Mass Rate
Standard, Oil Mass Rate Standard, Water Mass Rate
Standard, Gas Holdup Standard, Gas Holdup Flowing, Liquid
Holdup, Oil Holdup, Water Holdup, Total Pipeline Volume,
Max Hydrate Sub-Cooling, Max Wax Sub-Cooling, Max
Asphaltene Sub-Cooling, Variable_opt01, Variable_opt02,
Variable_opt03, Variable_opt04, Variable_opt05,
Variable_alpha, Variable_beta, Optimize_title,
Optimize_title_type, Optimize_pmatch, Optimize_tmatch,
Optimize_rms.
All the returned variables have double type exclude
Optimize_title (it has Boolean type) and Optimize_title_type,
Variable_alpha, Variable_beta (they have String type).

122
PIPESIM 2012.3 Open Link Reference Manual

IPNSCom3 Interface - Get Methods

 GetCaseVariableValue(iCase as int,
T

sPropName as String) T

 GetBranchGlobalVariableValue(iBranch
T
These functions work the way similar to
as int, sPropName as string) GetBranchInVariableValue function and gets requested
 GetSBranchGlobalVariableValue(iBranch value of variable type.
T

as int, sType as string) sType parameter can have following values:


 GetWellGlobalVariableValue(iWell as
T
BranchPressureDrop
int, sPropName as string) T

MaxPressure
BranchTemperatureDrop
 GetBranchGlobalStrVariableValue
T
These functions work the way similar to
(sBranch as string, sType as string) GetBranchGlobalVariableValue function and gets
 GetWellGlobalStrVariableValue (sWell
T
requested value of variable type.
as string, sType as string) sBranch or sWell is the object name.
sType parameter can have following values:
BranchPressureDrop
MaxPressure
BranchTemperatureDrop
 GetBranchGlobalVariableStrValue
T
These functions work the way similar to
(iBranch as int, sType as string) as string GetBranchGlobalVariableValue function and gets
 GetBranchGlobalStrVariableStrValue
T
requested value of string variable type.
(sBranch as string, sType as string) as iBranch is the branch index;
string sBranch is the branch name;
sType parameter can have following value(s):
FlowDirection

IPNSComPtr Interface Examples

C++ Sample Code


CMyObj::ReadPnsFunc()
{
CString sNodeType;
CoInitialize(NULL);
IPNSComPtr pPNS;
if (pPNS.CreateInstance(_uuidof(PNSCom)) != S_OK)
{
AfxMessageBox(PNS reader component not found);
return;
}
pPNS->ReadPnsFile((LPCTSTR)case1.pns );
iNumNodes = pPNS->GetNodeCount();
iNumBranches = pPNS->GetBranchCount();
iNumWells = pPNS->GetWellCount();

123
PIPESIM 2012.3 Open Link Reference Manual

BSTR ss = pPNS->GetModelStatus();
for ( int i = 0 ; i < iNumNodes; i++)
{
BSTR Name = pPNS->GetNodeName(i);
BSTR sNodeType= pPNS->GetNodeType( i );
dVal = pPNS->GetNodeVariableValue( i, Pressure);
if( dVal != Unset() ) // = -7777
{
dVal = pPNS->GetNodeVariableValue( i, Temperature);
dVal = pPNS->GetNodeVariableValue( i, MassRate);
dVal = pPNS->GetNodeVariableValue( i, LiquidRate);
dVal = pPNS->GetNodeVariableValue( i, GasRate);
dVal = pPNS->GetNodeVariableValue( i, GLR);
dVal = pPNS->GetNodeVariableValue( i, Water Cut);
}
int start = iNumNodes + 2;
// Branches
for ( int j = 0; j <= 1; j ++ )
{
for ( i = 0; i < iNumBranches; i++ )
{
BSTR sName = pPNS->GetBranchName( i );
if ( j != 1 )
{
dVal = pPNS->GetBranchInVariableValue( i, Pressure);
dVal2 = pPNS->GetBranchOutVariableValue( i, Pressure);
dVal = pPNS->GetBranchInVariableValue( i, Temperature);
dVal = pPNS->GetBranchInVariableValue( i, MassRate);
dVal = pPNS->GetBranchInVariableValue( i, LiquidRate);
dVal = pPNS->GetBranchInVariableValue( i, GasRate);
dVal = pPNS->GetBranchInVariableValue( i, GLR);
dVal = pPNS->GetBranchInVariableValue( i, Water Cut);
dVal = pPNS->GetBranchInVariableValue( i, Max Pres);
dVal = pPNS->GetBranchInVariableValue( i, Comp Power);
dVal = pPNS->GetBranchInVariableValue( i, Choke DP);
}
else
{
dVal = pPNS->GetBranchOutVariableValue( i, Pressure);
dVal2 = pPNS->GetBranchInVariableValue( i, Pressure);
dVal = pPNS->GetBranchOutVariableValue( i, Temperature);
dVal = pPNS->GetBranchOutVariableValue( i, MassRate);
dVal = pPNS->GetBranchOutVariableValue( i, LiquidRate);
dVal = pPNS->GetBranchOutVariableValue( i, GasRate);
dVal = pPNS->GetBranchOutVariableValue( i, GLR);
dVal = pPNS->GetBranchOutVariableValue( i, Water Cut);.

dVal = pPNS->GetBranchOutVariableValue( i, Max Pres);


dVal = pPNS->GetBranchOutVariableValue( i, Comp Power);
dVal = pPNS->GetBranchOutVariableValue( i, Choke DP);
}
start ++;
}
}
// Wells
for ( j = 0; j <= 1; j ++ )
{

124
PIPESIM 2012.3 Open Link Reference Manual

for ( i = 0; i < iNumWells; i++ )


{
BSTR sName = pPNS->GetWellName( i );
if ( j != 1 )
{
dVal = pPNS->GetWellInVariableValue( i, Pressure);
dVal = pPNS->GetWellInVariableValue( i, Temperature);
dVal = pPNS->GetWellInVariableValue( i, MassRate);
dVal = pPNS->GetWellInVariableValue( i, LiquidRate);
dVal = pPNS->GetWellInVariableValue( i, GasRate);
dVal = pPNS->GetWellInVariableValue( i, GLR);
dVal = pPNS->GetWellInVariableValue( i, Water Cut);
dVal = pPNS->GetWellInVariableValue( i, Max Pres);
dVal = pPNS->GetWellInVariableValue( i, Comp Power);
dVal = pPNS->GetWellInVariableValue( i, Choke DP);
}
else
{
dVal = pPNS->GetWellOutVariableValue( i, Pressure);
dVal = pPNS->GetWellOutVariableValue( i, Temperature);
dVal = pPNS->GetWellOutVariableValue( i, MassRate);
dVal = pPNS->GetWellOutVariableValue( i, LiquidRate);
dVal = pPNS->GetWellOutVariableValue( i, GasRate);
dVal = pPNS->GetWellOutVariableValue( i, GLR);
dVal = pPNS->GetWellOutVariableValue( i, Water Cut);
dVal = pPNS->GetWellOutVariableValue( i, Max Pres);
dVal = pPNS->GetWellOutVariableValue( i, Comp Power);
dVal = pPNS->GetWellOutVariableValue( i, Choke DP);
}
start ++;
}
}
pPNS.Release();
CoUninitialize();
}

VBA Sample Code


Taken from EXPORT.XLS Open Link Case study
Private Sub ShowResults()

Dim PnsReader As New PNSREADERLib.PNSCom


Dim filename

'clear output range


Set rv = Range(OUTVAL_RANGE)
rv.ClearContents

filename = Range(MODELFILE)
pos = InStr(1, filename, .bpn, 1)
If (pos > 0) Then
filename = Left(filename, pos)
filename = filename + pns
End If

Dim nodeindex As Long

125
PIPESIM 2012.3 Open Link Reference Manual

Dim sourcename As Variant


Dim value As Double
Dim bOK

If (PnsReader.ReadPnsFile(filename)) Then

Set r = Range(SOURCE_RANGE)
Dim col
col = 1

Set r1 = Range(OUTINJGAS_RANGE2)
r1.ClearContents

Set r2 = Range(OUTFLOWRATE_RANGE2)
r2.ClearContents

For Each sourcename In r.Columns


nodeindex = PnsReader.GetNodeIndex(sourcename)

If (nodeindex <> -1) Then

value = PnsReader.GetNodeVariableValue(nodeindex, Pressure)


If (value <> -7777) Then
rv.Cells(1, col) = value
End If

If (value <> -7777) Then


value = PnsReader.GetNodeVariableValue(nodeindex, Temperature)
rv.Cells(2, col) = value
End If

If (value <> -7777) Then


value = PnsReader.GetNodeVariableValue(nodeindex, LiquidRate)
rv.Cells(3, col) = value
End If

If (value <> -7777) Then


value = PnsReader.GetNodeVariableValue(nodeindex, GasRate)
rv.Cells(4, col) = value
End If

If (value <> -7777) Then


value = PnsReader.GetNodeVariableValue(nodeindex, MassRate)
rv.Cells(5, col) = value
End If

If (value <> -7777) Then


value = PnsReader.GetNodeVariableValue(nodeindex, GLR)
rv.Cells(6, col) = value
End If

If (value <> -7777) Then


value = PnsReader.GetNodeVariableValue(nodeindex, Water Cut)
rv.Cells(7, col) = value
End If

End If

126
PIPESIM 2012.3 Open Link Reference Manual

'--------------------------------------------------------
'Get the pressure profiles ------------------------------

Dim PltReaderObj As New WELLCURVELib.PerformCurve


Dim plcfile, tempfile
Dim distance
Dim pressure

plcfile = Range(MODELFILE)
tempfile = plcfile

Do
pos = InStr(1, tempfile, \, 1)
tempfile = Right(tempfile, Len(tempfile) - pos)
Loop While pos > 0

If (Len(tempfile) > 0) Then

plcfile = Left(plcfile, Len(plcfile) - Len(tempfile))


plcfile = plcfile + sourcename + .plc

If (PltReaderObj.OpenWellFile(plcfile)) Then

distance = PltReaderObj.GetColumnVariableDataAt(Total Distance


(ft))

Dim Lower, Upper, i

Lower = LBound(distance(0), 1)
Upper = UBound(distance(0), 1)

For i = Lower To Upper - 2

r1.Cells(i + 1) = distance(0)(i)

Next

pressure = PltReaderObj.GetColumnVariableDataAt(Pressure (psia))

Dim LowerO, UpperO


Dim outter

LowerO = LBound(distance(0), 1)
UpperO = UBound(distance(0), 1)

For outter = LowerO To UpperO - 2

r2.Cells(outter + 1, col) = pressure(0)(outter)

Next

Set rtitle = Range(CASE1TITLE_RANGE)


rtitle.Cells(1, col) = pressure(0)(outter)

PltReaderObj.CloseWellFile

127
PIPESIM 2012.3 Open Link Reference Manual

End If
End If

col = col + 1
Next

End If
End Sub

Inflow Performance Calculator COM T

Name

The name of the COM module is WellModelCOM.DLL.

Interfaces supported & Registration

Support provided for any COM compliant application

Supported COM Interfaces

Jones: To fit and visualise the IPR curve for a given number of data points according to the Jones' equation:

Pws - Pwf = BQ + AQ^2 (Liquid)

Pws^2 - Pwf^2 = BQ + AQ^2 (Gas)

Dependency MAP

List of Dependencies: Spr32x30.ocx, TeeChart.ocx, MFC42.DLL

COM Interface: Jones - Get Methods

 GetJonesAandBConstants ([out]
T T
a: the value of the A parameter in the Jones equation
double * a, [out] BSTR * a_unit, a_unit: the unit string for the A parameter
[out] double * b, [out] BSTR *
b: the value of the B parameter in the Jones equation
b_unit)
b_unit: the unit string for the B parameter

128
PIPESIM 2012.3 Open Link Reference Manual

COM Interface: Jones - Set Methods

 AddFlowrateAndPwfPoint ([in]
T T
frate: flowrate value (double)
double frate, [in] BSTR frate_unit, frate_unit: unit string for the flowrate value. Any of:
[in] double pwf, [in] BSTR
STB/d, sm3/d for Liquid Rates OR: mmscf/d mscf/d, scf/d,
pwf_unit)
mmsm3/d, msm3/d, sm3/d for gas rates
pwf: tubing flowing pressure (double)
pwf_unit: unit string for the pwf value: Any of: psia psig, bara,
barg, atma, atmg, kPa a, kPa g, kg/cm2 a, kg/cm2 g
Call this function once for each survey point.
 AddFlowrateAndPwfData ([in]
T T
ftype: fluid type, type_liquid = 0, type_gas = 1
short ftype, [in] BSTR frate_unit, frate_unit: unit string for the flowrate value. Any of: STB/d,
[in] BSTR pwf_unit, [in] BSTR sm3/d for Liquid Rates OR: mmscf/d mscf/d, scf/d, mmsm3/d,
Legend, [in] VARIANT * vData, [in] msm3/d, sm3/d for gas rates
const unsigned long pType)
pwf_unit: unit string for the pwf value: Any of: psia psig,
bara, barg, atma, atmg, kPa a, kPa g, kg/cm2 a, kg/cm2 g
Legend: Legend to show on plot
vData: variant whose SAFEARRAY contains a 2D array (col[0] =
FlowRate data, col[1] = Pwf data) Line = 0; Bar = 1; HorizBar = 2;
Area = 3; Point = 4
Use this function to compare an observed set of points with the
fitted curve.
 SetFluidType (/*[in]*/ short ftype)
T T
ftype: fluid type, type_liquid = 0, type_gas = 1
 SetStaticPressure ([in] double
T T Pres: static pressure value
pres, [in] BSTR unitStr) UnitStr: units for the pressure value. Any of: psia psig, bara,
barg, atma, atmg, kPa a, kPa g, kg/cm2 a, kg/cm2 g
 SetJonesAConstant ([in] double
T T
val: the A parameter in the Jones equation
val, [in] short unitSystem) unitSystem: 0: val is in default Eng : psi/(STB/d)^2 (liq) or
(psi/mmscf/d)^2 (gas)
1: val is default SI: bar/(sm3/d)^2 (liq) or (bar/mmsm3/d)^2
(gas)
Set this value to calculate the B parameter given A and one
survey point
 SetJonesBConstant ([in] double
T T val: the B parameter in the Jones equation
val, [in] short unitSystem) unitSystem: 0: val is in default Eng: psi/STB/d (liq) or
psi2/mmscf/d (gas) 1: val is default SI: bar/sm3/d (liq) or
bar2/mmsm3/d (gas). Set this value to calculate the A
parameter given B and one survey point

129
PIPESIM 2012.3 Open Link Reference Manual

 SetJonesMeasuredAConstant ([in] val: the A parameter in the Jones equation


double val, [in] short unitSystem) unitSystem: 0: val is in default Eng: psi/(STB/d)^2 (liq) or
(psi/mmscf/d)^2 (gas) 1: val is default SI: bar/(sm3/d)^2 (liq) or
(bar/mmsm3/d)^2 (gas) For display purposes only. Set this
value to compare a measured pair of A and B values with the
calculated ones
 SetJonesMeasuredBConstant ([in]
T T
val: the B parameter in the Jones equation
double val, [in] short unitSystem) unitSystem: 0: val is in default Eng: psi/STB/d (liq) or
psi2/mmscf/d (gas) 1: val is default SI: bar/sm3/d (liq) or
bar2/mmsm3/d (gas)
For display purposes only. Set this value to compare a
measured pair of A and B values with the calculated ones
 SetUnitSystem ([in] long
T T
unitSystem: 0: values will be displayed in default Engineering
unitSystem) units; 1: SI units

COM Interface: Jones - Operations

 DoCalculateConstants ()
T T
Calculates the A and B parameters based on the given data:
static reservoir pressure and {pwf, flowrate} points
 ShowInflowPerformanceDlg ()
T T
Displays the IPR COM graphical interface

COM Interface: Jones Example

VBA Sample Code


'Create an instance of the Jones COM interface
Dim JonesObj As WELLMODELCOMLib.Jones
Set JonesObj = New Jones

'Set static pressure as 4000 psia


'legal pressure units: psia psig bara barg atma atmg kPa a kPa g kg/cm2 kg/cm2 g

pws = 4000.0
pws_unit = 'psia'
JonesObj.SetStaticPressure pws, pws_unit

'Set the fluid type: 0 for liquid 1 for Gas


JonesObj.SetFluidType 1 'Gas

'legal liquidRate units : STB/d sm3/d


'legal gasRate units mmscf/d mscf/d, scf/d, mmsm3/d msm3/d, sm3/d,

'Add 4 data points


JonesObj.AddFlowrateAndPwfPoint 10.0, 'mmscf/d', 3600, 'psia'
JonesObj.AddFlowrateAndPwfPoint 28.0, 'mmscf/d', 2400, 'psia'
JonesObj.AddFlowrateAndPwfPoint 30.0, 'mmscf/d', 2100, 'psia'
JonesObj.AddFlowrateAndPwfPoint 25.0, 'mmscf/d', 1600, 'psia'

' Display graphical interface to show the fitted curve and calculated constants

130
PIPESIM 2012.3 Open Link Reference Manual

JonesObj.ShowInflowPerformanceDlg

Units Library

IUnitSystem Interface

Note: See Unit System for the available quantity names and unit strings.
X X

 Convert
T T
Converts in_value to [out_value, out_unit] given the
[in] BSTR quantity_name, [in] in_value’s conversion factor and adder to convert it to its
double in_value, [in] double strict SI unit. Returns out_value in the given out_unit
factor_to_SI, [in] double
adder_to_SI, [in] BSTR out_unit,
[out, retval] double * out_value
 Convert_SI
T T
Converts a given quantity in strict SI units to the given
[in] BSTR quantity name, [in] out_unit
double si_value, [in] BSTR out_unit,
[out, retval] double * out_value
 ConvertAny
T T
Converts a quantity given as [in_value, in_units] to an
[in] BSTR quantity_name, [in] out_unit
double in_value, [in] BSTR in_unit,
[in] BSTR out_unit, [out, retval]
double * out_value
 ConvertStrictSIToCurrentUnits
T T Converts a quantity given as [value] in strict SI to an out_unit
[in] BSTR quantity_name, [in] defined according to the units file imported
double value, [in] BSTR out_unit, using ImportUnitFile. By default it will be Eng units if no unit
T T

[out, retval] double * out_value file has been imported


 ConvertToDefEng
T T
Converts a quantity given as [in_value, in_units] to the
[in] BSTR quantity_name, [in] PIPESIM’s default engineering unit for that quantity.
double value, [in] BSTR value_unit,
[out] BSTR *eng_unit, [out, retval]
double *eng_value
 ConvertToDefSI
T T
Converts a quantity given as [in_value, in_units] to the
[in] BSTR quantity_name, [in] double PIPESIM’s default SI unit for that quantity. Please note that
value, [in] BSTR value_unit, [out] default SI is not necessarily equal to strict SI.
BSTR *si_unit, [out, retval] double *
si_value
 ConvertToStrictSI
T T
Converts a quantity given as [in value, in units] to the strict SI
[in] BSTR quantity_name, [in] double unit for that quantity. Please note that default SI is not
value, [in] BSTR value_unit, [out] necessarily equal to strict SI
BSTR *si_unit, [out, retval] double
*si_value
 DisplayUnitDialog
T T Displays the graphical user interface for unit system selection.
[in] VARIANT_BOOL

131
PIPESIM 2012.3 Open Link Reference Manual

bShowFileOptions, [in]
VARIANT_BOOL
bShowDeaultOptions, [out]
VARIANT * pVar
 GetDefEngUnitString
T T
Returns the default engineering unit string for a given
[in] BSTR quantity name, [out, quantity.
retval] BSTR * unit string
 GetDefSIUnitString
T T
Returns the default SI unit string for a given quantity.
[in] BSTR quantity_name, [out,
retval] BSTR * unit_string
 GetLastError
T T
Returns an error description. This method should be called
[out, retval] BSTR * ErrorStr immediately after a function has returned an error code.
 GetStrictSIUnitString
T T
Returns the strict SI unit string for a given quantity.
[in] BSTR quantity name, [out,
retval] BSTR * unit_string
 GetUnitStrings
T T
Returns an array of unit strings defined for the given quantity.
[in] BSTR quantity name, [out]
VARIANT * pVar
 GetUnknownValue
T T
Returns PIPESIM’s definition of ‘unset’ or ‘unknown’ value.
[out, retval] double *pVal
 ImportUnitFile [in] BSTR filename
T T
Imports a saved units file (saved by default with a .unf
extension)

IReal Interface

 UnitClass
T T
Gets/sets unit class name
string
 SetRealValue
T T
Sets a Value in the specified unit string
[in] double Value, [in] BSTR Unit
 GetRealVal
T T Returns a value in the units corresponding to pUnit
[out] double * pValue, [out] BSTR
* pUnit
 SetSelectedUnit
T T
Selects the given unit string
[in] BSTR UnitStr, [out, retval]
VARIANT_BOOL
 GetSelectedUnit
T T
Returns the selected unit string
[out, retval] BSTR * UnitStr
 GetDefEngValue
T T
Returns the value in default engineering units
[out, retval] double * Val
 GetStrictSIValue
T T
Returns the value in strict SI units
 GetUserValue
T T
Returns the value in user selected units
 SetStrictSIValue
T T
Sets a Value in strict SI units

132
PIPESIM 2012.3 Open Link Reference Manual

Reservoir Table

Name

The name of the COM module is ResTable.DLL.

Interfaces supported & Registration

Support provided for any COM compliant application

Supported COM Interfaces

RESTABLELib.IResTableOp: To output VFP tables for external reservoir simulators. The output files are

<filename>.VFP<PROD|INJ>.<BHP|TEMP>.<tabnum>.txt ,

where <filename> is the base model name,


<PROD|INJ> indicates Production or Injection well,
<BHP|TEMP> indicates BHP or Temperature VFP table, and
<tabnum> is the table number to be included in ECLIPSE file.

Note: The Injection well or Temerature VFP table options are only available for ELICPSE simulator.

IResTableOp Object - Properties

 RunEngineMinimised As Boolean Runs the engine in a minimised window


 RunPlotToolWithEngine As Boolean If True (1) shows the plotting tool (PSPlot) as the simulation
runs
 PsmFilePath As String The full path to the model file (.psm file)
 PlotToolPath As String The full path to the plotting tool (PSPlot)
 IncludeFilePath As String The full path name to the engine’s operation file
 PipesimEnginePath As String The full path to the PIPESIM engine
 EngineSwitch As String Sets/gets extra command line arguments for the PIPESIM
engine
 HasGasLiftInjection As Boolean True for a well with gas injection artificial lift
 HasESP As Boolean True for a well with ESP
 HasGasLiftInjection As Boolean True for a well with gas injection artificial lift
 IsProducerModel As Boolean True for a production well, False for an injection well
 IsFluidModelCompositional As True for a well with gas injection artificial lift
Boolean
 FixedInjectionDepths As Boolean True for a well with fixed gas injection depth
 ModelIsInjectionWell As Boolean True for an injection well

133
PIPESIM 2012.3 Open Link Reference Manual

 HasInjector As Boolean
 IsBHPTableOnly As Boolean If True, only generate pressure VFP table. Otherwise, an
additional temperature VFP table will be generated. Default
is True.
 UserElev As Double User specified elevation in VFP table. If unspecified, a
default value, which is the total elevational change from inlet
to outlet, will be written to the VFP table.

IResTableOp Object - Get Methods

 GetLastError() As String Returns an error description after function call failure. Must
be called immediately after the call to the failed function.
 GetIsUnset() As Boolean Returns True (1) if the operation’s data is all blank (unset)
 GetIsEngineActive() As Boolean Returns True (1) if the PIPESIM engine is running, otherwise
False (0)
 GetRawDataSize() As Long Returns the size of raw data

IResTableOp Object - Set Methods

 SetLanguage(nlLanguageID As Long) Sets the user interface language


As Boolean Available values for nlLanguageID are:
0x0809 English (UK)
0x0419 Russian
0x080A Spanish (Mexican)
0x0416 Portuguese (Brazilian)
0x0804 Chinese (PRC)
Function returns True if language was changed successfully
and False otherwise

IResTableOp Object - Operations

 DisplayDialog(p_VarUnitManager As Displays the operations graphical interface. Pass a NULL


Variant) variant as the first argument.
This method is obsolete. Use DisplayDialog2 method instead
T T

 DisplayDialog2(p_VarUnitManager Displays the operations graphical interface. Pass a Null


As Variant) As Boolean variant as the first argument. Returns true if dialog box was
closed OK, otherwise false.
 RunOperation(); Runs the simulation
 KillOperation(); Terminates the engine run
 WriteOperationFile() As Boolean Writes an ASCII file containing the instructions to the

134
PIPESIM 2012.3 Open Link Reference Manual

simulation engine to run the operation.


 ReadRawData(pVar As Varient) As Serialize the Reservoir Table data structure into a binary file
Boolean and then reads it into a memory block pointed by pVar.
 WriteRawData(var as Variant) As Writes a binary file containing the raw data pointed by var
Boolean and then deserialize the data into the Reservoir Table data
structure.

VBA Sample Code


Taken from “Open Link VFP Batch Runs.XLS” Open Link Case study

Sub RunVFPBatch()

'Dimension all variables


Dim NoOfWells As Integer, WellList() As Variant, WorkingDirectory As String, FirstWell
As Integer
Dim VfpSaveExists As String, MsgBoxYesNo As Long, n As Long, retval, TextEditor As
String
Dim PsimModObj As New NET32COMLib.ISingleBranchModel
Dim VfpModObj As New NET32COMLib.ISingleBranchModel
Dim ResTabObj As New RESTABLELib.IResTableOp
Dim ModelIsRunning As Boolean, NewHour As Integer, NewMinute As Integer, NewSecond
As Integer
Dim WaitTime As Date, VfpFileName As String

'Unprotect the sheet


ActiveSheet.Unprotect

'Get the well and sensitivity set names


Range("MessageBox") = "Checking input data"
Call ReadWellAndSenSetData(NoOfWells, WellList(), WorkingDirectory, FirstWell)

'Set the operation interface to each model and run it


For n = 1 To NoOfWells
'get the reservoir table object
Range("MessageBox") = "Opening sensitivity set " & WellList(n, 2)
VfpModObj.OpenModel (WorkingDirectory & "\" & WellList(n, 2) & ".bps")
VfpModObj.SetOperationType 5
VfpModObj.GetOperationInterface ResTabObj
'Set the operation interface
Range("MessageBox") = "Opening PIPESIM model " & WellList(n, 1)
PsimModObj.OpenModel (WorkingDirectory & "\" & WellList(n, 1))
PsimModObj.SetOperationType 5
PsimModObj.SetOperationInterface ResTabObj
'Kick off the model
Range("MessageBox") = "Generating VFP table for " & WellList(n, 1)
PsimModObj.RunSingleBranchModel2 False, "-B -v0", False
'Wait for it to finish
ModelIsRunning = PsimModObj.GetIsModelRunning
While ModelIsRunning = True
ModelIsRunning = PsimModObj.GetIsModelRunning
NewHour = Hour(Now())
NewMinute = Minute(Now())
NewSecond = Second(Now()) + 1

135
PIPESIM 2012.3 Open Link Reference Manual

WaitTime = TimeSerial(NewHour, NewMinute, NewSecond)


Application.Wait WaitTime
Wend
'Save the model
Range("MessageBox") = "Saving " & WellList(n, 1)
PsimModObj.SaveModel (WorkingDirectory & "\" & WellList(n, 1))
Next n

'delete all the rubbish


Call ClearRubbish(WorkingDirectory)
'Merge vfp files
Range("MessageBox") = "Merging vfp files"
Call MergeVfpTables(WellList(), NoOfWells, FirstWell, WorkingDirectory,
VfpFileName)
Range("MessageBox") = ""
MsgBoxYesNo = MsgBox("VFP Batch run completed successfully. Do you want to view '"
& VfpFileName & "' now ?", vbYesNo, "Batch VFP")
If MsgBoxYesNo = 6 Then
TextEditor = Range("TextEditor")
retval = Shell(TextEditor & " " & WorkingDirectory & "\" & VfpFileName,
vbMaximizedFocus)
End If

'Protect the sheet


ActiveSheet.Protect
End Sub

136
PIPESIM 2012.3 Open Link Reference Manual

Defined constants and strings


Object Type Identifiers

1 n_FOLD (network folder)


2 n_SOURCE (network source)
3 n_SINK (network sink)
4 n_JUNC (network junction)
5 n_BRANCH (network branch)
6 n_TEXT (text object)
7 n_PRODWELL (network production well)
8 n_INJWELL (network injection well)
30 n_REINJECTOR (network reinjector)
31 n_WELLCONNECTOR (network well connector)

10 n_PINTSOURCE (single branch source)


11 n_PINTVERTCOMP (Vertical Comp.)
12 n_PINTHORCOMP (Horizontal Comp.)
13 n_FLOWLINE (Flowline)
14 n_RISER (Riser)
15 n_CONNECTOR (Zero length connector)
16 n_TUBING (Tubing)
17 n_NODE (generic node)
18 n_CHOKE (choke)
19 n_COMPRESSOR (compressor)
20 n_EXPANDER (expander)
21 n_HEATX (heat exchanger)
22 n_PUMP (centrifugal pump)
23 n_BOOSTER (multiphase booster)
24 n_INJECTOR (injection point)
25 n_SEPARATOR (separator)
26 n_REPORT (report tool)
27 n_ADDMULT (adder/multiplier)
28 n_NAPOINT (nodal analysis point)

137
PIPESIM 2012.3 Open Link Reference Manual

29 n_EKT (engine keyword tool)


32 n_SSSV (SSSV, tubing sub-component)
33 n_GLValve (Gas Lift valve, subcomponent)
34 n_BLACKBOX (Generic equipment type)
35 n_COILTUB (Coil tubing)
36 n_PCP (PCP)
37 n_RodPump (Rod Pump)

Object Properties

Network object’s properties

BRANCH BLOCK TYPE Branch block type: 0 for none, 1 for forward, 2 for
reverse
WELL BLOCK TYPE Well block type: 0 for none, 1 for forward, 2 for reverse

Vertical Completion object’s properties

PRESSURE Static reservoir pressure


TEMPERATURE Reservoir temperature
IPRTYPE Completion model type (see IPR Types (Vertical))

Well PI specif i c properties

WELLPI FLUIDTYPE Fluid type for the model (see Fluid Types)
WELLPI GASPI Gas PI
WELLPI LIQPI Liquid PI
WELLPI NONLINEARCORRECTION Use Vogel below bubble point (for liquid)

Vogel’s Equation specific properties

VOGEL AOFP Absolute Open Flow Potential

138
PIPESIM 2012.3 Open Link Reference Manual

VOGEL N Vogel coefficient

Fetkovitch’s Equation specific properties

FETKOVITCH AOFP Open Flow Potential


FETKOVITCH N n exponent

Jones’s Equation specific properties

JONES FLUIDTYPE (see Fluid Types) Fluid type for the model (see Fluid Types)
JONES GASA A (turb) coefficient for Gas
JONES GASB B (lam) coefficient for Gas
JONES LIQA A (turb) coefficient for Liquid
JONES LIQB B (lam) coefficient for Liquid

BackPressure Equation specific properties

BACKPRESSURE C Constant C
BACKPRESSURE N Slope n

Pseudo Steady State specific properties

PSEUDOSS IPRBASIS Fluid type for the model (see Fluid Types)
PSEUDOSS USEPSEUDOPRES Use pseudo pressure method (for gas)
PSEUDOSS VOGEL Use Vogel below bubble point (for liquid)
PSEUDOSS THICKNESS Reservoir thickness
PSEUDOSS WELLBOREID Wellbore diameter
PSEUDOSS PERMEABILITY Reservoir permeability
Enter only reservoir permeability or detailed user
PSEUDOSS ENTERPERM defined table (0 for user defined table, 1 for only
reservoir permeability)
PSEUDOSS DEFRADIUS Use Drainage radius (if set)
PSEUDOSS DRAINRADIUS Drainage radius

139
PIPESIM 2012.3 Open Link Reference Manual

PSEUDOSS RESAREA Reservoir area


PSEUDOSS SHAPEFACTOR Shape factor
PSEUDOSS SKIN Mechanical skin
PSEUDOSS RATESKIN GAS Rate dependent skin for gas
PSEUDOSS RATESKIN LIQ Rate dependent skin for liquid
PSEUDOSS CALCSKIN Calculate Mechanical skin (if set)
PSEUDOSS CALCRATESKIN Calculate Rate dependent skin (if set)
PSEUDOSS COMPOPTIONS Completion options type
PSEUDOSS DAMAGEDID Damaged zone diameter
PSEUDOSS DAMAGEDPERM Damaged zone permeability
PSEUDOSS COMPACTEDID Compacted zone diameter
PSEUDOSS COMPACTEDPERM Compacted zone permeability
PSEUDOSS GRAVELPERM Gravel pack permeability
PSEUDOSS GRAVELTUNNEL Gravel pack tunnel length
PSEUDOSS GRAVELCASINGID Gravel pack casing ID
PSEUDOSS GRAVELSCREENSZ Gravel pack screen diameter
PSEUDOSS COMPVERTPERM Completion vertical permeability
PSEUDOSS COMPINTERVAL Completion open interval
PSEUDOSS COMPDEVIATION Completion deviation
PSEUDOSS PERFSKINMETHOD Perforation skin method (0 for McLeod, 1 for
Karakas/Tariq)
PSEUDOSS PERFID Perforation diameter
PSEUDOSS PERFLENGTH Depth of penetration
PSEUDOSS PERFSHOTDENSITY Perforation density
PSEUDOSS PERFPHASEANG Phase angle
PSEUDOSS FPSKINMETHOD FracPack skin method (0 for Fracture properties, 1 for
conductivity)
PSEUDOSS FPFRACHALFLEN Fracture half length
PSEUDOSS FPFRACWIDTH Fracture width
PSEUDOSS FPPROPPERM Fracture proppant permeability
PSEUDOSS FPCOND FracPack conductivity
PSEUDOSS FPFACESKINCALC Include Frac Face skin (if set)
PSEUDOSS FPDAMAGEDEPTH Frac Face Depth of damage
PSEUDOSS FPDAMPERM Frac Face Damage permeability
PSEUDOSS FPCHOKESKINCALC Include Choke Fracture skin (if set)

140
PIPESIM 2012.3 Open Link Reference Manual

PSEUDOSS FPCHOKELENGTH Choke length


PSEUDOSS FPCHOKEPERM Frac choke permeability
PSEUDOSS DZSKINCALC Include damaged zone skin (if set)
PSEUDOSS GPSKINCALC Include gravel pack skin (if set)
PSEUDOSS PFSKINCALC Include perforation skin (if set)
PSEUDOSS PPDSKINCALC Include partial penetration/deviation skin (if set)
PSEUDOSS FPSKINCALC Include FracPack skin (if set)

Forchheimer’s Equation specific properties

FORCH A A (lam) coefficient


FORCH F F (turb) coefficient

Hydraulic Fracture specific properties

HYDFRACT IPRBASIS Fluid type for the model (see Fluid Types)
HYDFRACT VOGEL Use Vogel below bubble point (for liquid)
HYDFRACT PERMEABILITY Reservoir permeability
HYDFRACT THICKNESS Reservoir thickness
HYDFRACT DRAINRADIUS Drainage radius
HYDFRACT WELLBOREID Wellbore diameter
HYDFRACT FRACTLENGTH Fracture half length
HYDFRACT FRACTPERM Fracture permeability
HYDFRACT FRACTWIDTH Fracture width
HYDFRACT TRANSIENT Use transient parameters (if set)
HYDFRACT TIME Time
HYDFRACT POROSITY Porosity
HYDFRACT COMPRESS Total compressibility

Transient specific properties

TRANSIENTIPR IPRBASIS Fluid type for the model (see Fluid Types)
TRANSIENTIPR USEPSEUDOPRES Use pseudo pressure method (for gas)

141
PIPESIM 2012.3 Open Link Reference Manual

TRANSIENTIPR VOGEL Use Vogel below bubble point (for liquid)


TRANSIENTIPR PERMEABILITY Reservoir permeability
TRANSIENTIPR THICKNESS Reservoir thickness
TRANSIENTIPR DRAINRADIUS Drainage radius
TRANSIENTIPR WELLBOREID Wellbore diameter
TRANSIENTIPR TIME Time
TRANSIENTIPR POROSITY Porosity
TRANSIENTIPR COMPRESS Total compressibility
TRANSIENTIPR SKIN Mechanical skin
TRANSIENTIPR RATESKIN GAS Rate dependent skin for gas
TRANSIENTIPR RATESKIN LIQ Rate dependent skin for liquid
TRANSIENTIPR CALCSKIN Calculate Mechanical skin (if set)
TRANSIENTIPR CALCRATESKIN Calculate Rate dependent skin (if set)
TRANSIENTIPR COMPOPTIONS Completion options type
TRANSIENTIPR DAMAGEDID Damaged zone diameter
TRANSIENTIPR DAMAGEDPERM Damaged zone permeability
TRANSIENTIPR COMPACTEDID Compacted zone diameter
TRANSIENTIPR COMPACTEDPERM Compacted zone permeability
TRANSIENTIPR GRAVELPERM Gravel pack permeability
TRANSIENTIPR GRAVELTUNNEL Gravel pack tunnel length
TRANSIENTIPR GRAVELCASINGID Gravel pack casing ID
TRANSIENTIPR GRAVELSCREENSZ Gravel pack screen diameter
TRANSIENTIPR COMPDEVIATION Completion deviation
TRANSIENTIPR PERFSKINMETHOD Perforation skin method (0 for McLeod, 1 for
Karakas/Tariq)
TRANSIENTIPR COMPINTERVAL Completion open interval
TRANSIENTIPR COMPVERTPERM Completion vertical permeability
TRANSIENTIPR PERFID Perforation diameter
TRANSIENTIPR PERFLENGTH Depth of penetration
TRANSIENTIPR PERFSHOTDENSITY Perforation density
TRANSIENTIPR PERFPHASEANG Phase angle
TRANSIENTIPR DZSKINCALC Include damaged zone skin (if set)
TRANSIENTIPR GPSKINCALC Include gravel pack skin (if set)
TRANSIENTIPR PFSKINCALC Include perforation skin (if set)
TRANSIENTIPR PPDSKINCALC Include partial penetration/deviation skin (if set)

142
PIPESIM 2012.3 Open Link Reference Manual

FCV properties

FCV VALVETYPE FCV type: 0 –generic, 1-specific (manufactured)


FCV GENERICVALVETYPE Generic FCV type: 0 – equivalent choke area, 1 –
maximum rate through valve
FCV CHOKEEQUATION Gas choke equation: 0 – mechanistic
FCV EQCHOKEARIA Equivalent choke area
FCV MAXLIQRATE Maximum liquid rate through valve
FCV MAXGASRATE Maximum gas rate through valve
FCV LIQCOEFF Liquid flow coefficient
FCV GASCOEFF Gas flow coefficient
FCV PRESSDROP Pressure drop ratio factor
FCV MANUFACTURER FCV manufacturer
FCV TYPE FCV type (munufacturer’s specific)
FCV PARTNUMBER FCV partnumber
FCV VALVEPOSITION Valve postion
FCV VALVEPERSENTOPEN Valve percent open

Horizontal Completion object’s properties

PRESSURE Static reservoir pressure


TEMPERATURE Reservoir temperature
Completion model type (0 – Joshi Oil, 1 – Joshi Gas, 2 –
IPRTYPE
Babu & Odeh Oil, 3 – Babu & Odeh, 4 – Distributed PI)
IPROPTION IPR Model: 0 – distributed PI, 1 – single point PI
DAMAGED DIAMETER Damaged zone diameter
DAMAGED PERMEABILITY Damaged zone permeability
COMPACTED DIAMETER Compacted zone diameter
COMPACTED PERMEABILITY Compacted zone permeability
GRAVEL PACK PERMEABILITY Gravel pack permeability
GRAVEL PACK TUNNEL Gravel pack tunnel
PERFORATION DIAMETER Perforation diameter
PERFORATION LENGTH Perforation length
PERFORATION SHOT DENSITY Perforation shot density

143
PIPESIM 2012.3 Open Link Reference Manual

Distributed PI specific properties

DIST FLUIDTYPE Fluid type


DIST LIQPI Liquid PI
DIST GASPI Gas PI

SS Oil/Gas (Joshi) specific properties

JOSHI REXTN External boundary radius of the drainage area


JOSHI THICKNESS Reservoir thickness
JOSHI PERMEABILITYX Permeability in the x-direction
JOSHI PERMEABILITYY Permeability in the y-direction
JOSHI PERMEABILITYZ Permeability in the z-direction
Well bore eccentricity (the offset of the well from the
JOSHI ECCENT
center of the pay zone)
JOSHI LENGTH Length of the horizontal well (completion)
JOSHI WELLBORERADIUS Wellbore radius
JOSHI SKIN Mechanical skin factor
JOSHI VISCOSITY Fluid viscosity
JOSHI OFVF Oil Formation Volume Factor (oil well)
JOSHI GASZ Gas compressibility factor (gas well)
JOSHI CALCULATE SKIN Calculate skin: 1 for true, 0 for false

PSS Oil (Babu & Odeh) specific properties

BABU XDIM Drainage width perpendicular to the well


BABU YDIM Drainage width parallel to the well
BABU THICKNESS Reservoir thickness
BABU PERMEABILITYX Permeability in the x-direction
BABU PERMEABILITYY Permeability in the y-direction
BABU PERMEABILITYZ Permeability in the z-direction
BABU XWELL x-coordinates of the horizontal well trajectory
BABU YWELL y-coordinates of the horizontal well trajectory
BABU ZWELL z-coordinates of the horizontal well trajectory

144
PIPESIM 2012.3 Open Link Reference Manual

BABU LENGTH Length of the perforation into the formation


BABU WELLBORERADIUS Wellbore radius
BABU SKIN Mechanical skin factor
BABU VISCOSITY Fluid viscosity
BABU OFVF Oil Formation Volume Factor (oil well)
BABU GASZ Gas compressibility factor (gas well)
BABU CALCULATE SKIN Calculate skin: 1 for true, 0 for false

Tubing object’s properties

Common properties

ACTIVATE Make tubing active


TUBING MODEL Tubing model (0: simple, 1 detailed)
LIFT TYPE Artificial Lift type (0: ESP, 1: Gas Lift, 2: PCP, 3: NONE)
KICKOFF ANGLE Kick Off angle
KICKOFF TVD Kick Off TVD
PERFS MD Perforation MD
PERFS TEMPERATURE Reservoir Temperature
PERFS TVD Perforation TVD
SURFACE TEMPERATURE Surface temperature
SURFACE TVD Surface TVD
COILED TUB MD Coiled tubing bottom MD
COILED TUB RATE OPTION Coiled tubing rate option (0 for gas rate, 1 for GLR)
COILED TUB RATE Coiled tubing gas rate
COILED TUB GLR Coiled tubing GLR
COILED TUB SPECIFIC GRAVITY Coiled tubing specific gravity
COILED TUB ID Coiled tubing ID
COILED TUB SURFACE PRESSURE Coiled tubing gas rate surface pressure
COILED TUB OD Coiled tubing OD

145
PIPESIM 2012.3 Open Link Reference Manual

Tubing sub-object properties

(accessed by GetPropertyValAtObjectIndex& SetPropertyValAtObjectIndex methods)


T T T

Choke properties

CHOKE MD Choke MD
BEAN SIZE Bean size
CRITICAL PRESSURE RATIO Critical pressure ratio
CRITICAL CORRELATION Critical correlation (0 - mechanistic, 1 - Gilbert, 2 – Ros,
3 – Achong, 4 – Baxendell, 5 – Ashford, 6 – Poetbeck, 7
– Omana, 8 - Pilehvari)
SUBCRITICAL CORRELATION Sub-critical correlation (0 - mechanistic, 1 - API14b, 2 -
Ashford)
CHOKE TOLERANCE Tolerance
CALC CRITICAL PRESSURE RATIO Option to calculate critical pressure ratio (1 to calculate,
0 to use user-defined value)
UPSTREAM PIPE ID Upstream pipe ID
CP/CV Fluid heat capacity ratio (Cp/Cv)
DISCHARGE COEFFICIENT Discharge coefficient
Y AT CRITICAL FLOW Gas expansion factor at critical flow
BOTH PHASES Flow coefficient for both phases
GAS PHASE Flow coefficient for gas phase
LIQ PHASE Flow coefficient for liquid phase
FLOW RATE Option to use flowrate to identify critical flow (when set
to 1)
PRESSURE RATIO Option to use flowrate to identify critical flow (when set
to 1)
UPSTREAM VELOCITY Option to use sonic upstream velocity to identify critical
flow (when set to 1)
DOWNSTREAM VELOCITY Option to use sonic downstream velocity to identify
critical flow (when set to 1)
ADJUST SUB-CRITICAL CORR Option to adjust sub-critical correlation to match
flowrate prediction (when set to 1)
PRINT DETAILED CALCULATIONS Option to print detailed calculation for choke (0=not
cheched, 1=checked)

146
PIPESIM 2012.3 Open Link Reference Manual

ESP properties

ESP MD ESP MD (simple profile)


ESP STAGES Number of stages (simple profile)
ESP SPEED ESP speed (simple profile)
ESP MANUFACTURER Manufacturer name (simple profile)
ESP MODEL Model name (simple profile)
ESP HEAD FACTOR or ESP EFFICIENCY ESP head factor (simple profile)
ESP VISCOSITY CORRECTION ESP viscosity correction: 0 or 1 (simple profile)
ESP GASSEPARATOR Gas separator present (if set) (simple profile)
ESP SEPEFFICIENCY Separator efficiency (simple profile)
ESP POWER ESP Power (simple profile)
ESP USE POWER Use ESP Power: 0 or 1 (simple profile)
ESP MD NODE Same as ESP MD but for detailed profile
ESP STAGES NODE Same as ESP STAGES but for detailed profile
ESP SPEED NODE Same as ESP SPEED but for detailed profile
ESP MANUFACTURER NODE Same as ESP MANUFACTURER but for detailed profile
ESP MODEL NODE Same as ESP MODEL but for detailed profile
ESP HEAD FACTOR NODE or Same as ESP HEAD FACTOR but for detailed profile
ESP EFFICIENCY NODE
ESP GASSEPARATOR NODE Same as ESP GASSEPARATOR but for detailed profile
ESP SEPEFFICIENCY NODE Same as ESP SEPEFFICIENCY but for detailed profile
ESP VISCOSITY CORRECTION NODE Same as ESP VISCOSITY CORRECTION but for detailed
profile
ESP POWER NODE Same as ESP POWER but for detailed profile
ESP USE POWER NODE Same as ESP USE POWER but for detailed profile

147
PIPESIM 2012.3 Open Link Reference Manual

PCP properties

PCP MD PCP MD (simple profile)


PCP MANUFACTURER Manufacturer name (simple profile)
PCP MODEL Model name (simple profile)
PCP USER DEFINED User defined (1 for true, 0 for false) (simple profile)
PCP DIAMETER PCP diameter (simple profile)
PCP TOP DRIVE PCP top drive (simple profile)
PCP ROD DIAMETER PCP rod diameter (simple profile)
PCP HEAD FACTOR PCP hear factor (simple profile)
PCP SPEED PCP design speed (simple profile)
PCP BASE SPEED PCP base speed (simple profile)
PCP GASSEPARATOR Use PCP gas separator (1 for true, 0 for false) (simple
profile)
PCP VISCOSITY CORRECTION Use PCP viscosity correction (1 for true, 0 for false)
(simple profile)
PCP NOMINAL RATE PCP nominal flowrate (simple profile)
PCP MD NODE Same as PCP MD but for detailed profile
PCP MANUFACTURER NODE Same as PCP MANUFACTURER but for detailed profile
PCP MODEL NODE Same as PCP MODEL but for detailed profile
PCP USER DEFINE NODE Same as PCP USER DEFINE but for detailed profile
PCP DIAMETER NODE Same as PCP DIAMETER but for detailed profile
PCP TOP DRIVE NODE Same as PCP TOP DRIVE but for detailed profile
PCP ROD DIAMETER NODE Same as PCP ROD DIAMETER but for detailed profile
PCP HEAD FACTOR NODE Same as PCP HEAD FACTOR but for detailed profile
PCP SPEED NODE Same as PCP SPEED but for detailed profile
PCP BASE SPEED NODE Same as PCP BASE SPEED but for detailed profile
PCP GASSEPARATOR NODE Same as PCP GASSEPARATOR but for detailed profile
PCP VISCOSITY CORRECTION NODE Same as PCP VISCOSITY CORRECTION but for detailed
profile
PCP NOMINAL RATE NODE Same as PCP NOMINAL RATE but for detailed profile

148
PIPESIM 2012.3 Open Link Reference Manual

Rod pump (RP) properties

RP MD NODE Rod pump MD (detailed profile)


RP NOMRATEBASIS NODE Use nominal flowrate as basis (1 for true, 0 for false)
(detailed profile)
RP NOMINAL FLOWRATE NODE Rod pump nominal flowrate (detailed profile)
RP STROKELENGTH NODE Rod pump stroke length (detailed profile)
RP STROKESPERMIN NODE Rod pump strokes per minute (detailed profile)
RP PLUNGERDIAM NODE Rod pump plunger diameter (detailed profile)
RP SLIPCOEF NODE Rod pump slip coefficient (detailed profile)
RP PUMPEFF NODE Rod pump efficiency (detailed profile)
RP MAX DP NODE Rod pump maximum DP (detailed profile)
RP MAX POWER NODE Rod pump maximum power (detailed profile)
RP ROD DIAMETER Rod pump rod diameter (detailed profile)
RP SEPEFFICIENCY NODE Rod pump separator efficiency (detailed profile).
Get/Set values always in percent and unit string is
always empty “”.
RP RECOMBINE NODE Rod pump recombine gas at wellhead (detailed profile)

149
PIPESIM 2012.3 Open Link Reference Manual

Injector properties

GAS LIFT RATE OPTION Gas lift rate option (0 for gas rate, 1 for GLR, 2 for GLR
incremental) (simple profile)
GAS LIFT RATE Gas lift gas rate (simple profile)
GAS LIFT GLR Gas lift tubing GLR (simple profile)
GAS LIFT INCREMENTAL GLR Gas lift tubing GLR incremental (simple profile)
GAS LIFT MD Gas lift MD (simple profile)
GAS LIFT PORT DIAMETER Gas lift port diameter (simple profile)
GAS LIFT PVTFILE Composition file name (simple profile)
GAS LIFT PVTTYPE Composition type (0 for local composition, 1 for local
PVT, 2 for global PVT, 3 for local MFL) (simple profile)
GAS LIFT SPECIFIC GRAVITY Gas lift specific gravity (simple profile)
GAS LIFT SURFACE PRESSURE Surface pressure (simple profile)
GAS LIFT SURFACE TEMPERATURE Surface temperature (simple profile)
GAS LIFT RATE OPTION NODE Same as GAS LIFT RATE OPTION but for detailed profile
GAS LIFT RATE NODE Same as GAS LIFT RATE but for detailed profile
GAS LIFT GLR NODE Same as GAS LIFT GLR but for detailed profile
GAS LIFT INCREMENTAL GLR NODE Same as GAS LIFT INCREMENTAL GLR but for detailed
profile
GAS LIFT MD NODE Same as GAS LIFT MD but for detailed profile
GAS LIFT PORT DIAMETER NODE Same as GAS LIFT PORT DIAMETER but for detailed
profile
GAS LIFT PVTFILE NODE Same as GAS LIFT PVTFILE but for detailed profile
GAS LIFT PVTTYPE NODE Same as GAS LIFT PVTTYPE but for detailed profile
GAS LIFT SPECIFIC GRAVITY NODE Same as GAS LIFT SPECIFIC GRAVITY but for detailed
profile
GAS LIFT SURFACE PRESSURE NODE Same as GAS LIFT SURFACE PRESSURE but for detailed
profile
GAS LIFT SURFACE TEMPERATURE NODE Same as GAS LIFT SURFACE TEMPERATURE but for
detailed profile

150
PIPESIM 2012.3 Open Link Reference Manual

Multiphase booster properties

BOOSTER TYPE Type:


0 for Generic;
1 for Generic Twin Screw;
2 for Twin Screw;
3 for Vendor Twin Screw;
4 for Framo 1999
5 for Framo 2009
BOOSTER COMP EFFICIENCY Compressor efficiency (only for generic multiphase
booster)
BOOSTER HAXIAL DRIVE TYPE Haxial drive type: (only for Framo 1999)
0 for hydraulic drive
1 for electric oil cooled drive
2 for electric air cooled drive
BOOSTER HAXIAL FLOW PARAMETER Haxial flow parameter
BOOSTER HAXIAL HEAD PARAMETER Haxial head parameter
BOOSTER VENDOR FILE Vendor file name (only for vendor twin screw
multiphase booster)
BOOSTER VENDOR SPEED PCNT Vendor speed percentage (only for vendor twin screw
multiphase booster)
BOOSTER TWIN NOMINAL Nominal Booster (only for twin screw multiphase
booster)
BOOSTER TWIN SPEED Series name
BOOSTER VISCOSITY CORRECTION Speed percentage (only for twin screw multiphase
booster)

151
PIPESIM 2012.3 Open Link Reference Manual

Pump properties

PUMP DISCHARGE PRESSURE Pump discharge pressure


PUMP PRESSURE DIFFERENTIAL Pump pressure differential
PUMP PRESSURE RATIO Pump pressure ratio
PUMP POWER Pump power
PUMP EFFICIENCY Pump efficiency
PUMP VISCOSITY CORRECTION Pump viscosity correction: 1 for true, 0 for false
COMPRESSOR DISCHARGE PRESSURE Compressor discharge pressure
COMPRESSOR PRESSURE DIFFERENTIAL Compressor pressure differential
COMPRESSOR PRESSURE RATIO Compressor pressure ratio
COMPRESSOR POWER Compressor power
COMPRESSOR EFFICIENCY Compressor efficiency

152
PIPESIM 2012.3 Open Link Reference Manual

Injection point properties

INJECTOR COMPTYPE Injector point fluid property type: BlackOil = 0,


Compositional = 1, PVT = 2, MFL = 3
INJECTOR PVTFILE Injector point PVT file name
INJECTOR TEMPERATURE Injector point temperature
INJECTOR FLUIDTYPE Injector point fluid type: liquid = 0, gas = 1, mass = 2
INJECTOR FLUIDRATE Injector point fluid rate

153
PIPESIM 2012.3 Open Link Reference Manual

Heat exchanger properties

HEATER PRESSURE TYPE Pressure type: discharge pressure = 0, pressure drop = 1


HEATER DISCHARGE PRESSURE Discharge pressure
HEATER PRESSURE DIFFERENTIAL Pressure drop
HEATER TEMPERATURE TYPE Temperature type: temperature differential = 0,
discharge temperature = 1, duty = 2
HEATER DISCHARGE TEMPERATURE Discharge temperature
HEATER TEMPERATURE DIFFERENTIAL Temperature differential
HEATER DUTY Duty

Separator properties

SEPARATOR MD Separator MD
EFFICIENCY Efficiency
TYPE Type (see Separator Types)

SSSV properties

SSSV MD SSSV MD (simple profile)


SSSV ID SSSV ID (simple profile)
SSSV MD NODE Same as SSSV MD but for detailed profile
SSSV ID NODE Same as SSSV ID but for detailed profile

154
PIPESIM 2012.3 Open Link Reference Manual

GLVALVE properties

VALVE MD Valve MD
VALVE AB Valve Ab
VALVE AP Valve Ap
VALVE CHOKESIZE Choke size
VALVE CV Valve Cv
VALVE PORTSIZE Port size
VALVE PTRO Valve Ptro
VALVE MANUF Manufacturer name
VALVE SERIES Series name
VALVE PORTNAME Port name
VALVE TYPE Valve type
VALVE DPFO Valve Dpfo

Flowline (Riser) properties

DETAILED PROFILE Describes a configuration mode for a flowline/riser: 0


for simple, 1 for detailed
HORIZONTAL LENGTH the horizontal distance covered by the complete
flowline/riser
VERTICAL LENGTH the change in elevation between the start and the end
of the flowline/riser
HEIGHT UNDULATIONS An artificial factor that can be used to automatically
introduce some undulations into the flowline. The value
entered is the total change in elevation for every 1,000
units
HORIZ POS NODE Horizontal position of a node in detailed profile
VERT POS NODE Vertical position of a node in detailed profile
TEMPERATURE NODE Ambient temperature of a node in detailed profile
UVALUE NODE Heat transfer U value of a node in detailed profile
MEASURED TEMP NODE Measured temperature of a node in detailed profile
MEASURED PRES NODE Measured pressure of a node in detailed profile

155
PIPESIM 2012.3 Open Link Reference Manual

Wellbore (horizontal completion) properties

VERTICAL LENGTH the change in elevation between the start and the end
of the wellbore
HORIZONTAL LENGTH the horizontal distance covered by the complete
wellbore
HEIGHT UNDULATIONS An artificial factor that can be used to automatically
introduce some undulations into the wellbore. The
value entered is the total change in elevation for every
1,000 units
PIPE FLOWTYPE Flow type (see Pipe Flow Types)
PIPE ID Inner diameter
PIPE WT Wall thickness
PIPE ROUGHNESS Roughness
PIPE AMB TEMPERATURE Ambient temperature

Tubing (pipe section) properties

PIPE AMB TEMPERATURE Pipe ambient temperature (simple profile)


PIPE FLOWTYPE Flow type (see Pipe Flow Types) (simple profile)
PIPE ID Pipe ID (simple profile)
PIPE MD Pipe MD (simple profile)
PIPE OD Pipe OD (simple profile)
PIPE ROUGHNESS Pipe roughness (simple profile)
PIPE WT Pipe wall thickness (simple profile)
PIPE AMB TEMPERATURE NODE Same as PIPE AMB TEMPERATURE
but for detailed profile
PIPE FLOWTYPE NODE Same as PIPE FLOWTYPE but for detailed profile
PIPE ID NODE Same as PIPE ID but for detailed profile
PIPE MD NODE Same as PIPE MD but for detailed profile
PIPE OD NODE Same as PIPE OD but for detailed profile
PIPE ROUGHNESS NODE Same as PIPE ROUGHNESS but for detailed profile
PIPE WT NODE Same as PIPE WT but for detailed profile

156
PIPESIM 2012.3 Open Link Reference Manual

Generic Source

SOURCE PRESSURE Generic source pressure


SOURCE TEMPERATURE Generic source temperature

Network Separator (reinjector)

SEPARATOR PRESSURE Separator pressure


SEPARATOR EFFICIENCY Separator efficiency
SEPARATOR STREAM TYPE Separator stream type: 0 for liquid, 1 for gas, 2 for
water.
SEPARATOR FEED BRANCH Separator feed branch name
SEPARATOR REINJECT BRANCH Separator reinject branch name

Artificial Lift

0 No artificial lift
1 Gas lift injection
2 ESP

Completion Options

0 None
1 Open hole
2 Perforated
3 Gravel packed and perforated
4 Open hole gravel pack
5 Frac pack

Engine Keywords

KEYWORDS Engine Keywords

157
PIPESIM 2012.3 Open Link Reference Manual

IPR Types (Vertical)

0 Well PI
1 Vogel
2 Fetkovitch
3 Jones
4 BackPressure
5 PseudoSteadyState
6 Forchheimer
7 Hydraulic Fracture
8 Transient

IPR Types (Horizontal)

0 Joshi (Oil)
1 Joshi (Gas)
2 Babu & Odeh (Oil)
3 Babu & Odeh (Gas)
4 Distributed PI

IPR Options (Horizontal)

0 Distributed PI
1 Single Point PI

Fluid Types

0 Liquid Rate
1 Gas Rate
2 Mass Rate

158
PIPESIM 2012.3 Open Link Reference Manual

Pipe Flow Types

0 Tubing
1 Annular
2 Tubing+Annular

Rate Types

0 GLR
1 GOR
2 LGR
3 OGR

Separator Types

0 Liquid
1 Gas
2 Water

Single Branch Operations

-1 No Operation
0 System Analysis
1 Pressure and Temp Profile
2 Nodal Analysis
3 Injection Gas Vs Casing Head Pressure
4 Horizontal Well Performance
5 Reservoir Tables
6 Artificial Lift
7 Flow Correlation Profile Match
8 (Reserved)
9 Wax Deposition
10 Well Performance Curves

159
PIPESIM 2012.3 Open Link Reference Manual

11 Gas Lift - Diagnostics


12 Gas Lift - Deepest Injection Point
13 Gas Lift - Lift Gas Response
14 Gas Lift – Bracketing

Equations of State

0 Peng-Robinson (multiflash, DBR & Eclipse 300)


1 SRK (multiflas, DBR & Eclipse 300)
2 Standard Peng-Robinson (multiflash)
3 Standard SRK (multiflash)
4 BWRS (multiflash)
26 Association CPA (multiflash)
401 GERG-2008
501 NIST (REFPROP V8)

Viscosity Types

0 Pedersen
1 LBC
243 Aasberg-Petersen
541 NIST

BIP Sets

0 OilGas3
1 OilGas2
2 OilGas1
3 OilGas4
4 User BIPs
221 Eclipse 300 default
321 DBR default
421 GERG default

160
PIPESIM 2012.3 Open Link Reference Manual

521 NIST default

Emulsion Types

0 Set to oil viscosity Set to viscosity of the continuous phase


1 Volume Ratio Volume ratio of oil and waster viscosities
2 Woelflin Pipesim Original Woelflin 1942 Loose Edition
3 None N/A

Aqueous Unit Types

-1 None
0 Molarity (Moles)
1 WGR (bbl/mmscf)
2 Volume Ratio
3 Mass (lb)

ADIM UNITLESS
UNITLESS
AGASRATE ACFM *,
ft3/min, acm/s ^, m3/s!, m3/min, bbl/min, bbl/d,
m3/d ,
AREA AREA in2 *,
mm2 ^,
m2 ! , acres
AREAL AREA EARTH ft2 *. m2 ^!, acres, mi2, ha, km2
SURFACE
COMPRESS COMPRESSIBILITY 1/psia *,
COMPRESSIBILITY 1/bara ^,
1/Pa !

161
PIPESIM 2012.3 Open Link Reference Manual

CONDUCTIVITY THERMAL Btu/hr/ft/F *,


THERMALCONDUCTIVITY CONDUCTIVITY W/m/K !^
DELTAP PRESSURE (DELTA) Psi *,
PRESSUREDROP Bar ^, atm, kPa, kg/cm2,
Pa!
DELTAT TEMPERATURE F *,
(DELTA) C! ^, K, R,
DENSITY DENSITY LIQUID lb/ft3 *,
kg/m3! ^,
g/cc,
DISTGASPI SPECIFIC Mmscf/d/psi2/ft *,
DISTRIBUTEDGASPI PRODUCTIVITY mmsm3/d/bar2/m ^, msm3/d/kPa2/m,
INDEX (GAS PER
sm3/s/Pa2/m!
LENGTH)
DISTLIQPI SPECIFIC STB/d/psi/ft *,
DISTRIBUTEDLIQPI PRODUCTIVITY sm3/d/bar/m ^, sm3/d/kPa/m,
INDEX (LIQ PER
LENGTH) sm3/s/Pa/m!

ENTHALPY ENERGY PER Btu/lb *,


MASS (ENTHALPY) J/g ^,
J/kg!
ENTROPY SPECIFIC ENTROPY Btu/lb/F *,
J/g/K ^,
J/kg/K!
FLOWGLRATIO STD VOLUME PER scf/bbl *, sm3/m3 ^!
VOLUME (GLR)
FRACTION RATIO (%) % *! ^
fract.,
GASPI SPECIFIC Mmscf/d/psi2 *,
PRODUCTIVITY mmscf/d/kPa2, mmsm3/d/bar2 ^, msm3/d/kPa2,
INDEX (GAS) 1.E4sm3/d/MPa2,
m3/s/Pa2!
GASRATE STD VOLUME GAS Mmscf/d *,
RATE Mscf/d, scf/d, mmsm3/d ^, msm3/d, sm3/d,
1.E3sm3/d, 1.E4sm3/d,
sm3/s!
GASRATE(FLOWING) FLOW RATE Mmcf/d *,

162
PIPESIM 2012.3 Open Link Reference Manual

VOLUME BASIS mcf/d, cf/d, mmm3/d ^, mm3/d, m3/d, 1.E3m3/d,


(GAS) 1.E4m3/d, m3/s!
GASRATERECIP STD VOLUME GAS 1/mmscf/d *, 1/mscf/d, 1/scf/d, 1/mmsm3/d,
RATE 1/msm3/d, 1/sm3/d, 1/1.E3sm3/d, 1/1.E4sm3/d,
(RECIPROCAL) 1/sm3/s!
GOR VOLUME PER Scf/STB *,
GLR VOLUME (GLR) sm3/sm3! ^
HEAD ENERGY PER ft-lbf/lbm *,
COMPRESSORHEAD MASS (HEAD) kJ/kg ^, J/kg!
JONESGASA (JONES A GAS) (psi/mmscf/d)^2 *,
(bar/mmsm3/d)^2 ^,
(Pa/sm3/s)^2!
(bar/msm3/d)^2
JONESGASB (JONES B GAS) psi2/mmscf/d *,
bar2/mmsm3/d ^,
Pa2/sm3/s!
bar2/msm3/d
JONESLIQA (JONES A LIQ) psi/(STB/d)^2 *,
bar/(sm3/d)^2 ^,
Pa/(sm3/s)^2!
JONESLIQB (JONES B LIQ) psi/STB/d *,
bar/sm3/d ^,
Pa/sm3/s!
LENGTH LENGTH Inches *,
DIAMETER, ID, OD, WT, SHORTRANGE ft, miles, mm ^, cm, m!, km, 1/64in,
LENGTH(SHORT)
LENGTHL LENGTH Ft *,
LENGTH(LONG) MIDRANGE Miles, m! ^, km,
LIQPI SPECIFIC STB/d/psi *,
PRODUCTIVITY STB/d/kPa, sm3/d/bar ^, sm3/d/kPa, sm3/d/MPa,
INDEX (LIQ) sm3/s/Pa!
LIQRATE STD VOLUME STB/d *,
LIQUID RATE sm3/d ^,
sm3/s!
LIQRATE(FLOWING) FLOWRATE bbl/d *,
VOLUME BASIS m3/d ^, m3/s!

163
PIPESIM 2012.3 Open Link Reference Manual

(LIQ)
LIQRATERECIP STD VOLUME 1/STB/d, 1/sm3/d, 1/sm3/s
LIQUID RATE
(RECIPROCAL)
MASS MASS Lb *, Kg! ^
MASSRATE FLOWRATE MASS lb/s *,
BASIS lb/h, kg/s! ^, kg/h,
MOLARVOLUME SPECIFIC VOLUME ft3/mol *,
MOLE m3/mol! ^
OGR VOLUME PER STB/mmscf *,
LGR VOLUME (LGR) sm3/mmsm3 ^, sm3/msm3, sm3/1.E4sm3, m3/E3m3,
sm3/sm3!
PERMEABILITY PERMEABILITY Md *^,
Darcy, nm2,
M2 !
POWER POWER Hp *,
KW ^, Btu/s, kcal/s, Btu/h, kcal/h,
W!
PRESSURE PRESSURE Psia *,
Psig, bara ^, barg, atma, atmg, kPa a, kPa g, MPa a, MPa
g, kg/cm2 a, kg/cm2 g, Pa a!, Pa g,
PRESSUREGRAD PRESSURE psi/ft *,
PRESSUREGRADIENT GRADIENT bar/m ^, atm/m, kPa/m, kg/cm2,
Pa/m!
ROTVELOCITY FREQUENCY Hz *! ^
FREQUENCY Rpm,
SHOTS PER LENGTH Shots/ft *,
Shots/m! ^
SURFTENSION SURFACE TENSION Dyne/cm *,
SURFACETENSION N/m! ^
TEMPERATURE TEMPERATURE F *,
C! ^, K, R,
TIME TIME Hr *^,
Min, s!, days, years
U HEAT TRANSFER Btu/hr/ft2/F *,
HEATTRANSFERCOEFFICIE COEFFICIENT W/m2/K! ^

164
PIPESIM 2012.3 Open Link Reference Manual

NT
VELOCITY VELOCITY ft/s *,
m/s! ^
VISCOSITY VISCOSITY Cp *^
DYNAMIC Ns/m2 ! , lb/s/ft,
VOLFRAC VOLUME PER STD Bbl/mmscf *,
VOLUMEFRACTION VOLUME M3/mmsm3 ^, m3/sm3!
VOLUME VOLUME (LIQUID) ft3 *, m3! ^
VOLUME GAS VOLUME (GAS) ft3 *, m3! ^
NOTE: The keyword _STRICTSI in place of the unit name will set or get a value in the strict SI unit.

165
PIPESIM 2012.3 Open Link Reference Manual

Case Studies
Detailed explanation of routine
The Open Link functionality is distributed with the PIPESIM installation and is contained in a number of
library files. The main file is Net32COM.DLL, which normally resides in the programs directory and
provides the framework and main entry points into both network and single branch simulation models. Two
other files are FluidModelCOM.DLL and FlowCorrelationCOM.DLL, which provide access to properties
defined in the fluid and flow correlation models respectively.

Pre-Loop Steps

Step 1

Dim Bo as New FLUIDMODELCOMLib.IblackOil


Dim Obj as New NET32COMLib.IsingleBranchModel

166
PIPESIM 2012.3 Open Link Reference Manual

These statements define the variables Bo and Obj as a black oil object and a Single branch model object
respectively.

A Single Branch Model Object corresponds to the Single Branch Model Interface.

Dim x, n, TempAmb, TempSurf as Integer

This statement let the computer know that the variables x ,n, TempAmb, TempSurf used in the program
are integer. (It is good programming practice to declare all variables used in a program at the
beginning of the listing).

Step 2:
TempAmb = Cells(11,4).value
If TmpAmb = then
Exit Sub
End If

This assigns the value located in the cell cells(11,4) to the Integer variables TempAmb.

Step 3:
PathTemplate = cells(8,1)
If PathTemplate = Then
Exit Sub
End If

Assign the template path specified by the user in the spreadsheet to the variable PathTemplate.

Step 4:
T

Path = Cells(9,1).Value
If Path = Then
Exit Sub
End If

Assign the Path specified by the user in the spreadsheet to the variable Path.

This is the path where the .bps files that the routine creates are stored.

Step 5:
case1 = ActiveCell.Row
cases = Selection.Rows.Count
lastcase = case1 + cases –1

This statement allows us to loop on the selected rows by assigning the index of the top row to the
variable case1 and the index of the last row – 1 to the variable lastcase.

167
PIPESIM 2012.3 Open Link Reference Manual

Loop Steps

Step 6:
For n = case1 to lastcase

This statement initiates a loop that will be executed from the value case1 to the value last case.

Step 7:
Obj.OpenModel PathTemplate

This statement is equivalent to doing the following things: From the PIPESIM singlebranch object
interface (Reminder: Object Obj is a single branch object), go to the menu File, select Open Model and
open the model PathTemplate (which is a string defined in the spreadsheet)

Although the PIPESIM windows is not visible after the statement is executed the model is opened and
can be altered.

168
PIPESIM 2012.3 Open Link Reference Manual

Step 8:
Bo.GasSg = Cells(n,5)




Obj.BlackOil =Bo

The first statement assigns to the gas standard gravity field in the BlackOil interface Bo the value
corresponding to the cells (n,5). It is the cell (3,5) during the first loop and the cell (4,5) in the second
loop.

There are also some conditional statements. The first one states that if the water cut is above 95%
then the value in the blackoil object must be 95. The second one states that if the GOR is superior to
1000000 then assign an OGR of 0 to the blackoil object instead of the actual GOR value. The last
statement assigns to the single branch object Obj the black oil properties of the Blackoil object Bo.

169
PIPESIM 2012.3 Open Link Reference Manual

Step 9,10,11,12:
These statements fill the different GUI (Graphical User Interface) objects making up the
SingleBranchObject (that is the completion object, the tubing object, the choke object and the flow line
object).

For example the statement:

Obj.SetPropertyVal Tubing_1, Pipe WT, 0.5, inches

Assigns the value 0.5 to the wall thickness of the tubing object of Template.bps.

The more general statement could be written as:

Obj.SetPropertyVal name of the object(string), name of the field in the object(string), value to be
assigned to that field(double), Units to be used(string)

Step 13: Saving the Template with another name


The statement

Obj.SaveModel Path & Stationname & _ & Wellname & .bps

saves the model Template.bps under a new name in the folder specified in the string variable Path.

Step 14: Restart Loop


The statement Next n indicates to Visual Basic for Application to go back to the statement for n = case1
to lastcase and to redo the code for a different value of n (that is the next well).

This will happen until n = lastcase (last selected row).

170

You might also like