Example#

In this section, we will walk trough the creation of a simple network, with two nodes and one pipe, to illustrate how to crete a project and how to interpret the definitions available on Full API Reference.

The root level of our ALFAcase file is always a CaseDescription which has the following attributes:

name: string    # optional
physics: physics_description_schema⠀
time_options: time_options_description_schema⠀
numerical_options: numerical_options_description_schema⠀
ipr_models: ipr_models_description_schema⠀
pvt_models: pvt_models_description_schema⠀
tracers: tracers_description_schema⠀
outputs: case_output_description_schema⠀

....

In the following section, this steps will be covered:

  • How to configure the project options.

  • How to add a PVtModel.

  • How to add Nodes.

  • How to add Pipes.

  • How to add output curves.

Note

For the full reference check the Full API Reference

Project Options#

We will start the example by configuring the project options, as discussed in the previous section, the root level of an ALFacase file is the CaseDescription and it has the following options:

  • physics

  • time_options

  • numerical_options

For this example, the application will be configured with the ALFAsim correlation package using a hydrodynamic model with two-phase and four fields, the time steps will be changed as well and the tolerance will be set to 1e-4

Note

As indicated in Syntax section, each option has its own schema definition that needs to be filled accordingly to the reference showed at Options section.

Example

name: basic_case

physics:
  correlations_package: correlation_package_alfasim
  hydrodynamic_model: hydrodynamic_model_4_fields

numerical_options:
  tolerance: 1e-4

time_options:
  minimum_timestep:
    value: 1e-4
    unit: s
  maximum_timestep:
    value: 0.5
    unit: s
  final_time:
    value: 1.0
    unit: s

PVT Model#

The second step will add a PVTModel to the project and configure it as the default PVT for the entire project.

The pvt_models field from CaseDescription needs to be configured with the definition provided from PvtModelsDescription.

The PvtModelsDescription is the root configuration of all PVTs over the application, its possible to add new PVTs and defined one of them to be used automatically on all fields that requires a PVT through the option default_model

For this example a PVT will be created from a .tab file and the path to the file is relative to the .alfacase file. And for this we need to populate the tables field with the PVT name and a file.

About the tab file path

Considering that a .alfacase file is located at C:\Users\alfasim and the table section is configured with a relative path to my_pvt_file.tab.

In this case, the application will look for the .tab file at C:\Users\alfasim\my_pvt_file.tab

tables:
   # PVT name  : file path
  'Pvt1': my_pvt_file.tab

Note

The PVT name must be unique.

Check the PVTs section for a detailed description of each PVT type option.

Example

[ ... ]

pvt_models:
  default_model: 'Pvt1'
  tables:
    'Pvt1': my_pvt_file.tab

[ ... ]

Nodes#

The third step will add two different types of nodes, a mass source node and a pressure node.

All nodes that will be used on the application need to be added over the nodes section of the CaseDescription.

The NodeDescription is responsible to configure several types of nodes through the node_type field and their respective property fields.

For example, when the node_type is mass_source_boundary, besides the fields from NodeDescription only the fields available at mass_source_properties will be considered.

And when node_type is pressure_boundary only the fields from pressure_properties will be considered.

Note

Check the Node section for a detailed description of each Node type.

Example

nodes:
- name: Inlet
  node_type: mass_source_boundary
  mass_source_properties:
    mass_flow_rates:
      gas:
        value: 0.0
        unit: kg/s
      oil:
        value: 0.0
        unit: kg/s
- name: Outlet
  node_type: pressure_boundary
  pressure_properties:
    volume_fractions:
      gas:
        value: 1.0
        unit: '-'
      oil:
        value: 0.0
        unit: '-'
    pressure:
      value: 50.0
      unit: bar

Note

The nodes field accepts a list of definitions, and each definition must begin with a dash (-).

So whenever dash (-) character appears, ALFAcase will consider that a new definition is being created.

Example

nodes:

# First Node.
-   name: Node 1
    node_type: mass_source_boundary

# Second Node, because it has a dash character.
-   node_type: pressure_boundary
    name: Node 2

Pipes#

The fourth step will add a Pipe to the application through the pipes fields.

The pipes accepts a list of PipeDescription definitions which connects two nodes.

The connection occurs with the fields source and target and to configure these fields, it is only necessary to inform the name of the NodeDescription that will be used.

Note

Check the Pipe section for a detailed description of the attributes available.

Example

pipes:
- name: pipe
  source: Inlet
  target: Outlet
  profile:
    length_and_elevation:
      length:
        values: [ 0.0, 15.0, 30.0, 30.0, 15.0 ]
        unit: m
      elevation:
        values: [ 0.0, 15.0, 30.0, 30.0, 15.0 ]
        unit: m
  segments:
    start_positions:
      values: [ 0.0 ]
      unit: m
    diameters:
      values: [ 0.1 ]
      unit: m
    roughnesses:
      values: [ 5e-05 ]
      unit: m

Output#

The final step for our example will add a trend and a profile for our project.

As indicate on CaseDescription, the outputs field must be filled with the definition of CaseOutputDescription which allows the configuration of trends and profiles.

Note

Check the Outputs section for a detailed description about each output type, that shows all the available curves that can be used.

Example

outputs:
  trends:
    - element_name: pipe
      location: main
      position:
        value: 100.0
        unit: m
      curve_names:
        - oil mass flow rate

  automatic_trend_frequency: true

  trend_frequency:
    value: 0.1
    unit: s

  profiles:
    - element_name: pipe
      location: main
      curve_names:
        - pressure

  automatic_profile_frequency: true

  profile_frequency:
    value: 0.1
    unit: s

Full Case#

This section brings together all the previous sections, showing the full example that can be now used and imported by the application.

name: basic_case

physics:
  correlations_package: correlation_package_alfasim
  hydrodynamic_model: hydrodynamic_model_4_fields

numerical_options:
  tolerance: 1e-4

time_options:
  minimum_timestep:
    value: 0.0001
    unit: s

  maximum_timestep:
    value: 0.5
    unit: s

  final_time:
    value: 1.0
    unit: s

pvt_models:
  default_model: 'Pvt1'
  tables:
    'Pvt1': my_pvt_file.tab

outputs:
  trends:
    - element_name: pipe
      location: main
      position:
        value: 100.0
        unit: m
      curve_names:
        - oil mass flow rate

  automatic_trend_frequency: true

  trend_frequency:
    value: 0.1
    unit: s

  profiles:
    - element_name: pipe
      location: main
      curve_names:
        - pressure

  automatic_profile_frequency: true

  profile_frequency:
    value: 0.1
    unit: s

pipes:
- name: pipe
  source: Inlet
  target: Outlet
  profile:
    length_and_elevation:
      length:
        values: [ 0.0, 15.0, 30.0, 30.0, 15.0 ]
        unit: m
      elevation:
        values: [ 0.0, 15.0, 30.0, 30.0, 15.0 ]
        unit: m
  segments:
    start_positions:
      values: [ 0.0 ]
      unit: m
    diameters:
      values: [ 0.1 ]
      unit: m
    roughnesses:
      values: [ 5e-05 ]
      unit: m

nodes:
- name: Inlet
  node_type: mass_source_boundary
  mass_source_properties:
    mass_flow_rates:
      gas:
        value: 0.0
        unit: kg/s
      oil:
        value: 0.0
        unit: kg/s

- name: Outlet
  node_type: pressure_boundary
  pressure_properties:
    volume_fractions:
      gas:
        value: 1.0
        unit: '-'
      oil:
        value: 0.0
        unit: '-'
    pressure:
      value: 50.0
      unit: bar