diff --git a/src/ansys/dpf/core/dpf_operator.py b/src/ansys/dpf/core/dpf_operator.py index ed5f69182ad..12af7f2cdd2 100644 --- a/src/ansys/dpf/core/dpf_operator.py +++ b/src/ansys/dpf/core/dpf_operator.py @@ -26,6 +26,7 @@ import os import traceback import warnings +import numpy from enum import Enum from ansys.dpf.core.check_version import ( @@ -276,17 +277,11 @@ def connect(self, pin, inpt, pin_out=0): self._api.operator_connect_operator_output(self, pin, inpt, pin_out) elif isinstance(inpt, Output): self._api.operator_connect_operator_output(self, pin, inpt._operator, inpt._pin) - elif isinstance(inpt, list): + elif isinstance(inpt, (list, numpy.ndarray)): from ansys.dpf.core import collection - if server_meet_version("3.0", self._server): - inpt = collection.CollectionBase.integral_collection(inpt, self._server) - self._api.operator_connect_collection_as_vector(self, pin, inpt) - else: - if all(isinstance(x, int) for x in inpt): - self._api.operator_connect_vector_int(self, pin, inpt, len(inpt)) - else: - self._api.operator_connect_vector_double(self, pin, inpt, len(inpt)) + inpt = collection.CollectionBase.integral_collection(inpt, self._server) + self._api.operator_connect_collection_as_vector(self, pin, inpt) elif isinstance(inpt, dict): from ansys.dpf.core import label_space diff --git a/src/ansys/dpf/core/workflow.py b/src/ansys/dpf/core/workflow.py index 2e9b8eaa357..7faeb2958ab 100644 --- a/src/ansys/dpf/core/workflow.py +++ b/src/ansys/dpf/core/workflow.py @@ -31,6 +31,8 @@ from enum import Enum from typing import Union +import numpy + from ansys import dpf from ansys.dpf.core import dpf_operator, inputs, outputs from ansys.dpf.core.check_version import ( @@ -214,17 +216,11 @@ def connect(self, pin_name, inpt, pin_out=0): self._api.work_flow_connect_operator_output(self, pin_name, inpt, pin_out) elif isinstance(inpt, dpf_operator.Output): self._api.work_flow_connect_operator_output(self, pin_name, inpt._operator, inpt._pin) - elif isinstance(inpt, list): + elif isinstance(inpt, (list, numpy.ndarray)): from ansys.dpf.core import collection - if server_meet_version("3.0", self._server): - inpt = collection.CollectionBase.integral_collection(inpt, self._server) - self._api.work_flow_connect_collection_as_vector(self, pin_name, inpt) - else: - if all(isinstance(x, int) for x in inpt): - self._api.work_flow_connect_vector_int(self, pin_name, inpt, len(inpt)) - else: - self._api.work_flow_connect_vector_double(self, pin_name, inpt, len(inpt)) + inpt = collection.CollectionBase.integral_collection(inpt, self._server) + self._api.work_flow_connect_collection_as_vector(self, pin_name, inpt) elif isinstance(inpt, dict): from ansys.dpf.core import label_space diff --git a/tests/test_operator.py b/tests/test_operator.py index 124e988b503..381ec03a88f 100644 --- a/tests/test_operator.py +++ b/tests/test_operator.py @@ -27,6 +27,7 @@ import weakref from pathlib import Path +import numpy import numpy as np import pytest import copy @@ -93,6 +94,14 @@ def test_connect_list_operator(velocity_acceleration): assert fcOut.get_available_ids_for_label() == [1, 2] +def test_connect_array_operator(velocity_acceleration): + model = dpf.core.Model(velocity_acceleration) + op = model.operator("U") + op.connect(0, numpy.array([1, 2], numpy.int32)) + fcOut = op.get_output(0, dpf.core.types.fields_container) + assert fcOut.get_available_ids_for_label() == [1, 2] + + def test_connect_list_operator_builtin(velocity_acceleration): model = dpf.core.Model(velocity_acceleration) disp = model.results.displacement() diff --git a/tests/test_workflow.py b/tests/test_workflow.py index 505965f06ff..58c4d480a0d 100644 --- a/tests/test_workflow.py +++ b/tests/test_workflow.py @@ -22,6 +22,7 @@ from pathlib import Path +import numpy import numpy as np import pytest import platform @@ -137,6 +138,19 @@ def test_connect_list_workflow(velocity_acceleration, server_type): assert f_out.get_available_ids_for_label() == [1, 2] +def test_connect_array_workflow(velocity_acceleration, server_type): + wf = dpf.core.Workflow(server=server_type) + wf.progress_bar = False + model = dpf.core.Model(velocity_acceleration, server=server_type) + op = model.operator("U") + wf.add_operator(op) + wf.set_input_name("time_scoping", op, 0) + wf.set_output_name("field", op, 0) + wf.connect("time_scoping", numpy.array([1, 2], numpy.int32)) + f_out = wf.get_output("field", dpf.core.types.fields_container) + assert f_out.get_available_ids_for_label() == [1, 2] + + def test_connect_fieldscontainer_workflow(server_type): wf = dpf.core.Workflow(server=server_type) wf.progress_bar = False