From 778a1191cae5c481d16f4704f52958b4f589ebbd Mon Sep 17 00:00:00 2001 From: German Date: Thu, 10 Mar 2022 17:51:51 +0100 Subject: [PATCH 1/4] Dynamically expanding the number format. --- src/ansys/mapdl/core/parameters.py | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/src/ansys/mapdl/core/parameters.py b/src/ansys/mapdl/core/parameters.py index 0f7409287d9..ababdfa60c6 100644 --- a/src/ansys/mapdl/core/parameters.py +++ b/src/ansys/mapdl/core/parameters.py @@ -359,12 +359,26 @@ def _get_parameter_array(self, parm_name, shape): array : np.ndarray Numpy array. """ - format_str = "(1F64.12)" - with self._mapdl.non_interactive: - self._mapdl.mwrite(parm_name.upper(), label="kji") # use C ordering - self._mapdl.run(format_str) + escaped = False + for each_format_number in [20, 30, 40, 64, 100]: + format_str = f"(1F{each_format_number}.12)" + with self._mapdl.non_interactive: + # use C ordering + self._mapdl.mwrite(parm_name.upper(), label="kji") + self._mapdl.run(format_str) + + st = self._mapdl.last_response.rfind(format_str) + len(format_str) + 1 + + if "**" not in self._mapdl.last_response[st:]: + escaped = True + break + + if not escaped: + raise Exception( + f"The array '{parm_name}' has a number format " + "that could not be read using '{format_str}'." + ) - st = self._mapdl.last_response.rfind(format_str) + len(format_str) + 1 arr_flat = np.fromstring(self._mapdl.last_response[st:], sep="\n").reshape( shape ) From 719b0f3d8b7257c4cc38347e1bac542506038a39 Mon Sep 17 00:00:00 2001 From: German Date: Thu, 10 Mar 2022 19:20:46 +0100 Subject: [PATCH 2/4] Improving unit tests --- tests/test_parameters.py | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 tests/test_parameters.py diff --git a/tests/test_parameters.py b/tests/test_parameters.py new file mode 100644 index 00000000000..fff927d5eee --- /dev/null +++ b/tests/test_parameters.py @@ -0,0 +1,36 @@ +import numpy as np +import pytest + + +@pytest.mark.parametrize( + "number", + [ + 1e11, + 1e21, + 1e31, + 1e41, + 1e51, + pytest.param(1e61, marks=pytest.mark.xfail), + ], +) +def test__get_parameter_array(mapdl, number): + name = "param_array" + + # Testing 1D arrays + shape = (100,) + array = np.ones(shape) * number + mapdl.load_array(name=name, array=array) + assert np.allclose(array, mapdl.parameters._get_parameter_array(name, shape)) + + # Testing 2D arrays + shape = (100, 5) + array = np.ones(shape) * number + mapdl.load_array(name=name, array=array) + assert np.allclose(array, mapdl.parameters._get_parameter_array(name, shape)) + + # High number + with pytest.raises(RuntimeError): + shape = (100, 100) + array = np.ones(shape) * number + mapdl.load_array(name=name, array=array) + mapdl.parameters._get_parameter_array(name, shape) From cfbbf5133d90c0d89e53391b2873cdfb6129c676 Mon Sep 17 00:00:00 2001 From: German Date: Thu, 10 Mar 2022 19:21:22 +0100 Subject: [PATCH 3/4] Adding a check for errors. --- src/ansys/mapdl/core/mapdl_grpc.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/ansys/mapdl/core/mapdl_grpc.py b/src/ansys/mapdl/core/mapdl_grpc.py index 4d7afc45e2b..d0e28264c48 100755 --- a/src/ansys/mapdl/core/mapdl_grpc.py +++ b/src/ansys/mapdl/core/mapdl_grpc.py @@ -1377,6 +1377,11 @@ def build_rand_tmp(): self._response = out[out.find("LINE= 0") + 13 :] self._log.info(self._response) + if "*** ERROR ***" in self._response: + raise RuntimeError( + self._response.split("*** ERROR ***")[1].splitlines()[1].strip() + ) + # try/except here because MAPDL might have not closed the temp file try: os.remove(tmp_filename) From 4a0674fa3ed651c319cf28cc435465fa72d2602e Mon Sep 17 00:00:00 2001 From: Alex Kaszynski Date: Fri, 11 Mar 2022 11:21:41 +0100 Subject: [PATCH 4/4] Update src/ansys/mapdl/core/parameters.py --- src/ansys/mapdl/core/parameters.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ansys/mapdl/core/parameters.py b/src/ansys/mapdl/core/parameters.py index ababdfa60c6..c8a9536ffe0 100644 --- a/src/ansys/mapdl/core/parameters.py +++ b/src/ansys/mapdl/core/parameters.py @@ -373,8 +373,8 @@ def _get_parameter_array(self, parm_name, shape): escaped = True break - if not escaped: - raise Exception( + if not escaped: # pragma: no cover + raise RuntimeError( f"The array '{parm_name}' has a number format " "that could not be read using '{format_str}'." )