Skip to content

Commit

Permalink
Renegerated schema and its test copy
Browse files Browse the repository at this point in the history
  • Loading branch information
ramon committed Nov 28, 2021
1 parent 04ef870 commit cebf988
Show file tree
Hide file tree
Showing 12 changed files with 126 additions and 27 deletions.
5 changes: 2 additions & 3 deletions docs/source/alfacase_definitions/AnnulusDescription.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
has_annulus_flow: bool
pvt_model: \ :class:`Optional <typing.Optional>`\[str] = None
initial_conditions: \ :class:`InitialConditionsDescription <InitialConditionsDescription>`\ = InitialConditionsDescription()
gas_lift_valve_equipment: \ :class:`Dict <typing.Dict>`\[str, \ :class:`GasLiftValveEquipmentDescription <GasLiftValveEquipmentDescription>`\] = {}
equipment: \ :class:`AnnulusEquipmentDescription <AnnulusEquipmentDescription>`\ = AnnulusEquipmentDescription()
top_node: str

.. tab:: Schema
Expand All @@ -18,6 +18,5 @@
has_annulus_flow: boolean
pvt_model: string # optional
initial_conditions: \ :class:`initial_conditions_description_schema <InitialConditionsDescription>`\ # optional
gas_lift_valve_equipment: # optional
string: \ :class:`gas_lift_valve_equipment_description_schema <GasLiftValveEquipmentDescription>`
equipment: \ :class:`annulus_equipment_description_schema <AnnulusEquipmentDescription>`\ # optional
top_node: string
18 changes: 18 additions & 0 deletions docs/source/alfacase_definitions/AnnulusEquipmentDescription.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
.. rubric:: Definitions

.. tab:: CaseDescription

.. parsed-literal::

class AnnulusEquipmentDescription
leaks: \ :class:`Dict <typing.Dict>`\[str, \ :class:`LeakEquipmentDescription <LeakEquipmentDescription>`\] = {}
gas_lift_valves: \ :class:`Dict <typing.Dict>`\[str, \ :class:`GasLiftValveEquipmentDescription <GasLiftValveEquipmentDescription>`\] = {}

.. tab:: Schema

.. parsed-literal::

leaks: # optional
string: \ :class:`leak_equipment_description_schema <LeakEquipmentDescription>`
gas_lift_valves: # optional
string: \ :class:`gas_lift_valve_equipment_description_schema <GasLiftValveEquipmentDescription>`
1 change: 1 addition & 0 deletions src/alfasim_sdk/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ def get_alfasim_sdk_api_path():
EnvironmentPropertyDescription,
)
from alfasim_sdk._internal.alfacase.case_description import EquipmentDescription
from alfasim_sdk._internal.alfacase.case_description import AnnulusEquipmentDescription
from alfasim_sdk._internal.alfacase.case_description import FluidDescription
from alfasim_sdk._internal.alfacase.case_description import FormationDescription
from alfasim_sdk._internal.alfacase.case_description import FormationLayerDescription
Expand Down
39 changes: 35 additions & 4 deletions src/alfasim_sdk/_internal/alfacase/alfacase_to_case.py
Original file line number Diff line number Diff line change
Expand Up @@ -1360,9 +1360,12 @@ def generate_trend_description(
def load_positional_pipe_trend_description(
document: DescriptionDocument,
) -> List[case_description.PositionalPipeTrendDescription]:
alfacase_to_case_description = get_case_description_attribute_loader_dict(
case_description.PositionalPipeTrendDescription
)
alfacase_to_case_description = {
"curve_names": load_value,
"location": get_enum_loader(enum_class=constants.OutputAttachmentLocation),
"element_name": load_value,
"position": get_scalar_loader(from_unit="m"),
}
return [
generate_trend_description(
alfacase_document,
Expand Down Expand Up @@ -1492,7 +1495,7 @@ def load_annulus_description(
"pvt_model": load_value,
"top_node": load_value,
"initial_conditions": load_initial_conditions_description,
"gas_lift_valve_equipment": load_gas_lift_valve_equipment_description,
"equipment": load_annulus_equipment_description,
}
case_values = to_case_values(document, alfacase_to_case_description)
item_description = case_description.AnnulusDescription(**case_values)
Expand Down Expand Up @@ -1730,6 +1733,21 @@ def load_wall_description(
for alfacase_document in document
]

def load_leak_equipment_description(
document: DescriptionDocument,
) -> List[case_description.WallDescription]:
alfacase_to_case_description = get_case_description_attribute_loader_dict(
case_description.LeakEquipmentDescription
)

return {
key.data: _generate_description(
DescriptionDocument(value, document.file_path),
alfacase_to_case_description,
case_description.LeakEquipmentDescription,
)
for key, value in document.content.items()
}

def load_equipment_description(
document: DescriptionDocument,
Expand All @@ -1749,6 +1767,19 @@ def load_equipment_description(
case_description.EquipmentDescription,
)

def load_annulus_equipment_description(
document: DescriptionDocument,
) -> case_description.EquipmentDescription:
alfacase_to_case_description = {
"gas_lift_valves": load_gas_lift_valve_equipment_description,
"leaks": load_leak_equipment_description,
}
return _generate_description(
document,
alfacase_to_case_description,
case_description.AnnulusEquipmentDescription,
)


def load_x_and_y_description(
document: DescriptionDocument,
Expand Down
14 changes: 12 additions & 2 deletions src/alfasim_sdk/_internal/alfacase/case_description.py
Original file line number Diff line number Diff line change
Expand Up @@ -1818,18 +1818,28 @@ class GasLiftValveEquipmentDescription:
discharge_coeff = attrib_scalar(category="dimensionless")


@attr.s()
class AnnulusEquipmentDescription:
"""
.. include:: /alfacase_definitions/EquipmentDescription.txt @ramon check this later
"""

leaks = attrib_dict_of(LeakEquipmentDescription)
gas_lift_valves = attrib_dict_of(GasLiftValveEquipmentDescription)


@attr.s(slots=True, kw_only=True)
class AnnulusDescription:
"""
.. include:: /alfacase_definitions/AnnulusDescription.txt
.. include:: /alfacase_definitions/AnnulusDescription.txt @ramon change this later
"""

has_annulus_flow: bool = attr.ib(validator=instance_of(bool))
pvt_model: Optional[str] = attr.ib(
default=None, validator=optional(instance_of(str))
)
initial_conditions = attrib_instance(InitialConditionsDescription)
gas_lift_valve_equipment = attrib_dict_of(GasLiftValveEquipmentDescription)
equipment = attrib_instance(AnnulusEquipmentDescription)
top_node: str = attr.ib(validator=instance_of(str))


Expand Down
10 changes: 8 additions & 2 deletions src/alfasim_sdk/_internal/alfacase/schema.py
Original file line number Diff line number Diff line change
Expand Up @@ -926,6 +926,12 @@
Optional("wall_layer_container"): Seq(wall_layer_description_schema),
}
)
annulus_equipment_description_schema = Map(
{
Optional("leaks"): MapPattern(Str(), leak_equipment_description_schema),
Optional("gas_lift_valves"): MapPattern(Str(), gas_lift_valve_equipment_description_schema),
}
)
equipment_description_schema = Map(
{
Optional("mass_sources"): MapPattern(Str(), mass_source_equipment_description_schema),
Expand Down Expand Up @@ -990,7 +996,7 @@
"has_annulus_flow": Bool(),
Optional("pvt_model"): Str(),
Optional("initial_conditions"): initial_conditions_description_schema,
Optional("gas_lift_valve_equipment"): MapPattern(Str(), gas_lift_valve_equipment_description_schema),
Optional("equipment"): annulus_equipment_description_schema,
"top_node": Str(),
}
)
Expand Down Expand Up @@ -1060,5 +1066,5 @@
Optional("walls"): Seq(wall_description_schema),
}
)
# [[[end]]] (checksum: 7831a597443e52a67a878e61ea546187)
# [[[end]]] (checksum: 23201f736ec577dad1d8948215d7cef3)
# fmt: on
4 changes: 4 additions & 0 deletions tests/alfacase/test_alfacase_to_case.py
Original file line number Diff line number Diff line change
Expand Up @@ -414,6 +414,10 @@ def ensure_description_has_all_properties(
description_expected=filled_case_descriptions.EQUIPMENT_DESCRIPTION,
schema=schema.equipment_description_schema,
),
"AnnulusEquipmentDescription": AlfacaseTestConfig(
description_expected=filled_case_descriptions.ANNULUS_EQUIPMENT_DESCRIPTION,
schema=schema.annulus_equipment_description_schema,
),
"PipeDescription": AlfacaseTestConfig(
description_expected=filled_case_descriptions.PIPE_DESCRIPTION,
schema=schema.pipe_description_schema,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
has_annulus_flow: bool
pvt_model: \ :class:`Optional <typing.Optional>`\[str] = None
initial_conditions: \ :class:`InitialConditionsDescription <InitialConditionsDescription>`\ = InitialConditionsDescription()
gas_lift_valve_equipment: \ :class:`Dict <typing.Dict>`\[str, \ :class:`GasLiftValveEquipmentDescription <GasLiftValveEquipmentDescription>`\] = {}
equipment: \ :class:`AnnulusEquipmentDescription <AnnulusEquipmentDescription>`\ = AnnulusEquipmentDescription()
top_node: str

.. tab:: Schema
Expand All @@ -18,6 +18,5 @@
has_annulus_flow: boolean
pvt_model: string # optional
initial_conditions: \ :class:`initial_conditions_description_schema <InitialConditionsDescription>`\ # optional
gas_lift_valve_equipment: # optional
string: \ :class:`gas_lift_valve_equipment_description_schema <GasLiftValveEquipmentDescription>`
equipment: \ :class:`annulus_equipment_description_schema <AnnulusEquipmentDescription>`\ # optional
top_node: string
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
.. rubric:: Definitions

.. tab:: CaseDescription

.. parsed-literal::

class AnnulusEquipmentDescription
leaks: \ :class:`Dict <typing.Dict>`\[str, \ :class:`LeakEquipmentDescription <LeakEquipmentDescription>`\] = {}
gas_lift_valves: \ :class:`Dict <typing.Dict>`\[str, \ :class:`GasLiftValveEquipmentDescription <GasLiftValveEquipmentDescription>`\] = {}

.. tab:: Schema

.. parsed-literal::

leaks: # optional
string: \ :class:`leak_equipment_description_schema <LeakEquipmentDescription>`
gas_lift_valves: # optional
string: \ :class:`gas_lift_valve_equipment_description_schema <GasLiftValveEquipmentDescription>`
1 change: 1 addition & 0 deletions tests/alfacase/test_generate_case_schema.py
Original file line number Diff line number Diff line change
Expand Up @@ -402,6 +402,7 @@ def test_get_cases_class():
obtained = {class_.__name__ for class_ in list_of_classes_that_needs_schema}
expected = {
"AnnulusDescription",
"AnnulusEquipmentDescription",
"BipDescription",
"CaseDescription",
"CaseOutputDescription",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -982,6 +982,13 @@ wall_description_schema = Map(
}
)

annulus_equipment_description_schema = Map(
{
Optional("leaks"): MapPattern(Str(), leak_equipment_description_schema),
Optional("gas_lift_valves"): MapPattern(Str(), gas_lift_valve_equipment_description_schema),
}
)

equipment_description_schema = Map(
{
Optional("mass_sources"): MapPattern(Str(), mass_source_equipment_description_schema),
Expand Down Expand Up @@ -1052,7 +1059,7 @@ annulus_description_schema = Map(
"has_annulus_flow": Bool(),
Optional("pvt_model"): Str(),
Optional("initial_conditions"): initial_conditions_description_schema,
Optional("gas_lift_valve_equipment"): MapPattern(Str(), gas_lift_valve_equipment_description_schema),
Optional("equipment"): annulus_equipment_description_schema,
"top_node": Str(),
}
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -424,7 +424,9 @@
pvt_model="gavea",
top_node="mass_source_node",
initial_conditions=INITIAL_CONDITIONS_DESCRIPTION,
gas_lift_valve_equipment={"My gas-lift valve": GAS_LIST_VALVE_DESCRIPTION},
equipment=case_description.AnnulusEquipmentDescription(
gas_lift_valves={"My gas-lift valve": GAS_LIST_VALVE_DESCRIPTION},
),
)
CASE_OUTPUT_DESCRIPTION = case_description.CaseOutputDescription(
trends=TRENDS_OUTPUT_DESCRIPTION,
Expand Down Expand Up @@ -492,6 +494,16 @@
opening_type=constants.ValveOpeningType.ConstantOpening,
opening=Scalar("dimensionless", 42, "%"),
)
LEAK_EQUIPMENT_DESCRIPTION = case_description.LeakEquipmentDescription(
position=Scalar(350.0, "m"),
diameter=Scalar(0.025, "m"),
discharge_coefficient=Scalar(0.825, "-"),
location=LeakLocation.Annulus,
target_pipe_name="other_pipe",
target_position=Scalar(20.0, "m"),
target_location=LeakLocation.Main,
backflow=True,
)
WALL_DESCRIPTION = case_description.WallDescription(
name="Flowline",
inner_roughness=Scalar(1, "mm"),
Expand All @@ -509,6 +521,10 @@
compressors={"COMPRESSOR": COMPRESSOR_DESCRIPTION},
pigs={"PIG": PIG_DESCRIPTION},
)
ANNULUS_EQUIPMENT_DESCRIPTION = case_description.AnnulusEquipmentDescription(
leaks={"LEAK": LEAK_EQUIPMENT_DESCRIPTION},
gas_lift_valves={"GAS LIFT VALVE": GAS_LIST_VALVE_DESCRIPTION},
)
ENVIRONMENT_PROPERTY_DESCRIPTION = case_description.EnvironmentPropertyDescription(
position=Scalar(1, "m"),
temperature=Scalar(1, "degC"),
Expand Down Expand Up @@ -763,17 +779,6 @@
)
)

LEAK_EQUIPMENT_DESCRIPTION = case_description.LeakEquipmentDescription(
position=Scalar(350.0, "m"),
diameter=Scalar(0.025, "m"),
discharge_coefficient=Scalar(0.825, "-"),
location=LeakLocation.Annulus,
target_pipe_name="other_pipe",
target_position=Scalar(20.0, "m"),
target_location=LeakLocation.Main,
backflow=True,
)

PIG_DESCRIPTION = case_description.PigEquipmentDescription(
position=Scalar(120.0, "m"),
launch_times=Array([0.0, 50.0], "s"),
Expand Down

0 comments on commit cebf988

Please sign in to comment.