Skip to content

Commit 7d0c597

Browse files
authored
enable connection of Result instance to operator (#102)
1 parent 18df5b2 commit 7d0c597

File tree

3 files changed

+54
-7
lines changed

3 files changed

+54
-7
lines changed

ansys/dpf/core/dpf_operator.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -349,6 +349,7 @@ def eval(self, pin=None):
349349
def _find_outputs_corresponding_pins(
350350
self, type_names, inpt, pin, corresponding_pins
351351
):
352+
from ansys.dpf.core.results import Result
352353
for python_name in type_names:
353354
# appears to be an issue on Linux. This check is here
354355
# because cpp mappings are a single type mapping and
@@ -358,11 +359,12 @@ def _find_outputs_corresponding_pins(
358359

359360
if type(inpt).__name__ == python_name:
360361
corresponding_pins.append(pin)
361-
elif isinstance(inpt, _Outputs) or isinstance(inpt, Operator):
362+
elif isinstance(inpt, (_Outputs, Operator, Result)):
362363
if isinstance(inpt, Operator):
363364
output_pin_available = inpt.outputs._get_given_output([python_name])
365+
elif isinstance(inpt, Result):
366+
output_pin_available = inpt().outputs._get_given_output([python_name])
364367
else:
365-
366368
output_pin_available = inpt._get_given_output([python_name])
367369
for outputpin in output_pin_available:
368370
corresponding_pins.append((pin, outputpin))

ansys/dpf/core/inputs.py

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,8 @@ def connect(self, inpt):
9595
)
9696
raise TypeError(err_str)
9797

98+
from ansys.dpf.core.results import Result
99+
98100
if isinstance(inpt, _Outputs):
99101
self._operator.connect(self._pin, inpt._operator, corresponding_pins[0][1])
100102
self._operator.inputs._connected_inputs[self._pin] = {
@@ -103,6 +105,11 @@ def connect(self, inpt):
103105
elif isinstance(inpt, Output):
104106
self._operator.connect(self._pin, inpt._operator, inpt._pin)
105107
self._operator.inputs._connected_inputs[self._pin] = {inpt._pin: inpt}
108+
elif isinstance(inpt, Result):
109+
self._operator.connect(self._pin, inpt(), corresponding_pins[0][1])
110+
self._operator.inputs._connected_inputs[self._pin] = {
111+
corresponding_pins[0][1]: inpt()
112+
}
106113
else:
107114
self._operator.connect(self._pin, inpt)
108115
self._operator.inputs._connected_inputs[self._pin] = inpt
@@ -215,19 +222,27 @@ def connect(self, inpt):
215222
err_str += f" - {map_types_to_python[cpp_type]}\n"
216223
raise TypeError(err_str)
217224

218-
if not isinstance(inpt, _Outputs) and not isinstance(inpt, Output):
219-
self._operator.connect(corresponding_pins[0], inpt)
220-
self._connected_inputs[corresponding_pins[0]] = inpt
221-
elif input_type_name == "Output":
225+
from ansys.dpf.core.results import Result
226+
if isinstance(inpt, Output):
222227
self._operator.connect(corresponding_pins[0], inpt._operator, inpt._pin)
223228
self._connected_inputs[corresponding_pins[0]] = {inpt._pin: inpt._operator}
224-
else:
229+
elif isinstance(inpt, _Outputs):
225230
self._operator.connect(
226231
corresponding_pins[0][0], inpt._operator, corresponding_pins[0][1]
227232
)
228233
self._connected_inputs[corresponding_pins[0][0]] = {
229234
corresponding_pins[0][1]: inpt._operator
230235
}
236+
elif isinstance(inpt, Result):
237+
self._operator.connect(
238+
corresponding_pins[0][0], inpt(), corresponding_pins[0][1]
239+
)
240+
self._connected_inputs[corresponding_pins[0][0]] = {
241+
corresponding_pins[0][1]: inpt()
242+
}
243+
else:
244+
self._operator.connect(corresponding_pins[0], inpt)
245+
self._connected_inputs[corresponding_pins[0]] = inpt
231246

232247
def _add_input(self, pin, spec, count_ellipsis=-1):
233248
if spec is not None:

tests/test_operator.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -682,6 +682,36 @@ def test_connect_model(plate_msup):
682682
assert np.allclose(fc[0].data[0], [5.12304110e-14, 3.64308310e-04, 5.79805917e-06])
683683

684684

685+
def test_connect_result(plate_msup):
686+
model = dpf.core.Model(plate_msup)
687+
stress = model.results.stress
688+
eqv = ops.invariant.von_mises_eqv_fc(stress)
689+
out = eqv.outputs.fields_container()
690+
eqv = ops.invariant.von_mises_eqv_fc()
691+
eqv.inputs.fields_container.connect(stress)
692+
out2 = eqv.outputs.fields_container()
693+
assert len(out) == len(out2)
694+
eqv = ops.invariant.von_mises_eqv_fc()
695+
eqv.inputs.connect(stress)
696+
out2 = eqv.outputs.fields_container()
697+
assert len(out) == len(out2)
698+
699+
700+
def test_connect_result2(plate_msup):
701+
model = dpf.core.Model(plate_msup)
702+
disp = model.results.displacement
703+
norm = ops.math.norm_fc(disp)
704+
out = norm.outputs.fields_container()
705+
norm = ops.math.norm_fc()
706+
norm.inputs.fields_container.connect(disp)
707+
out2 = norm.outputs.fields_container()
708+
assert len(out) == len(out2)
709+
norm = ops.math.norm_fc()
710+
norm.inputs.connect(disp)
711+
out2 = norm.outputs.fields_container()
712+
assert len(out) == len(out2)
713+
714+
685715
def test_operator_several_output_types(plate_msup):
686716
inpt = dpf.core.Field(nentities=3)
687717
inpt.data = [1, 2, 3, 4, 5, 6, 7, 8, 9]

0 commit comments

Comments
 (0)