diff --git a/src/py_sofistik_utils/cdb_reader/_internals/spring_result.py b/src/py_sofistik_utils/cdb_reader/_internals/spring_result.py index 5ce8875..7be7186 100644 --- a/src/py_sofistik_utils/cdb_reader/_internals/spring_result.py +++ b/src/py_sofistik_utils/cdb_reader/_internals/spring_result.py @@ -23,12 +23,18 @@ class _SpringResult: * ``LOAD_CASE`` load case number * ``GROUP`` element group * ``ELEM_ID`` element number - * ``FORCE`` axial force - * ``TRANSVERSAL_FORCE``: transversal force - * ``MOMENT``: axial moment - * ``DISPLACEMENT``: axial displacement - * ``TRANSVERSAL_DISPLACEMENT``: transversal displacement - * ``ROTATION``: axial rotation + * ``P`` axial force + * ``PT``: transversal force + * ``PTX``: force in global X-direction + * ``PTY``: force in global Y-direction + * ``PTZ``: force in global Z-direction + * ``M``: axial moment + * ``V``: axial displacement + * ``VT``: transversal displacement + * ``VTX``: displacement in global X-direction + * ``VTY``: displacement in global Y-direction + * ``VTZ``: displacement in global Z-direction + * ``PHI``: axial rotation The ``DataFrame`` uses a MultiIndex with levels ``ELEM_ID`` and ``LOAD_CASE`` (in this specific order) to enable fast lookups via the @@ -39,9 +45,6 @@ class _SpringResult: Not all available quantities are retrieved and stored. In particular: - * the three components along the global X, Y and Z axes for: - - spring force - - spring displacement * nonlinear effects * all quantities available if a workload has beed defined @@ -54,12 +57,18 @@ def __init__(self, dll: SofDll) -> None: "LOAD_CASE", "GROUP", "ELEM_ID", - "FORCE", - "TRANSVERSAL_FORCE", - "MOMENT", - "DISPLACEMENT", - "TRANSVERSAL_DISPLACEMENT", - "ROTATION" + "P", + "PT", + "PTX", + "PTY", + "PTZ", + "M", + "V", + "VT", + "VTX", + "VTY", + "VTZ", + "PHI" ] ) self._dll = dll @@ -101,7 +110,7 @@ def get( self, element_id: int, load_case: int, - quantity: str = "FORCE", + quantity: str, default: float | None = None ) -> float: """Retrieve the requested cable result. @@ -112,15 +121,21 @@ def get( Cable element number load_case : int Load case number - quantity : str, default "FORCE" + quantity : str Quantity to retrieve. Must be one of: - - ``FORCE`` - - ``TRANSVERSAL_FORCE`` - - ``MOMENT`` - - ``DISPLACEMENT`` - - ``TRANSVERSAL_DISPLACEMENT`` - - ``ROTATION`` + - ``P`` + - ``PT`` + - ``PTX`` + - ``PTY`` + - ``PTZ`` + - ``M`` + - ``V`` + - ``VT`` + - ``VTX`` + - ``VTY`` + - ``VTZ`` + - ``PHI`` default : float or None, default None Value to return if the requested quantity is not found @@ -235,12 +250,18 @@ def _load(self, load_case: int) -> list[dict[str, float | int | str]]: "LOAD_CASE": load_case, "GROUP": 0, "ELEM_ID": spri_res.m_nr, - "FORCE": spri_res.m_p, - "TRANSVERSAL_FORCE": spri_res.m_pt, - "MOMENT": spri_res.m_m, - "DISPLACEMENT": spri_res.m_v, - "TRANSVERSAL_DISPLACEMENT": spri_res.m_vt, - "ROTATION": spri_res.m_phi + "P": spri_res.m_p, + "PT": spri_res.m_pt, + "PTX": spri_res.m_ptx, + "PTY": spri_res.m_pty, + "PTZ": spri_res.m_ptz, + "M": spri_res.m_m, + "V": spri_res.m_v, + "VT": spri_res.m_vt, + "VTX": spri_res.m_vtx, + "VTY": spri_res.m_vty, + "VTZ": spri_res.m_vtz, + "PHI": spri_res.m_phi } ) diff --git a/tests/cdb_reader/test_spring_result.py b/tests/cdb_reader/test_spring_result.py index e104dbb..5355cc4 100644 --- a/tests/cdb_reader/test_spring_result.py +++ b/tests/cdb_reader/test_spring_result.py @@ -19,17 +19,50 @@ "LOAD_CASE", "GROUP", "ELEM_ID", - "FORCE", - "TRANSVERSAL_FORCE", - "MOMENT", - "DISPLACEMENT", - "TRANSVERSAL_DISPLACEMENT", - "ROTATION", + "P", + "PT", + "PTX", + "PTY", + "PTZ", + "M", + "V", + "VT", + "VTX", + "VTY", + "VTZ", + "PHI", ] - _DATA = [ - (1000, 10, 102, 9.0, 0.0, 1.0000000031710769e-29, 0.09000000357627869, 0.07000000029802322, 0.0), - (1000, 11, 113, 1.0000000031710769e-29, 1.4142135381698608, 1.0000000031710769e-29, 0.11313708126544952, 0.01414213515818119, 0.0), + [ + 1000, 10, 102, + 9.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0000000031710769e-29, + 0.09000000357627869, + 0.07000000029802322, + -0.07000000029802322, + 0.0, + 0.0, + 0.0, + ], + [ + 1000, 11, 113, + 1.0000000031710769e-29, + 1.4142135381698608, + -1.0, + -1.0, + 0.0, + 1.0000000031710769e-29, + 0.11313708126544952, + 0.01414213515818119, + -0.009999999776482582, + -0.009999999776482582, + 0.0, + 0.0, + ], ] @@ -68,35 +101,32 @@ def test_data(self) -> None: def test_get(self) -> None: with self.subTest(msg="Axial force"): - self.assertEqual(self.cdb.spring.result.get(102, 1000, "FORCE"), 9) + self.assertEqual(self.cdb.spring.result.get(102, 1000, "P"), 9) with self.subTest(msg="Transversal force"): - self.assertEqual( - self.cdb.spring.result.get(102, 1000, "TRANSVERSAL_FORCE"), - 0 - ) + self.assertEqual(self.cdb.spring.result.get(102, 1000, "PT"), 0) with self.subTest(msg="Moment"): self.assertEqual( - self.cdb.spring.result.get(113, 1000, "MOMENT"), + self.cdb.spring.result.get(113, 1000, "M"), 1.0000000031710769e-29 ) with self.subTest(msg="Displacement"): self.assertEqual( - self.cdb.spring.result.get(102, 1000, "DISPLACEMENT"), + self.cdb.spring.result.get(102, 1000, "V"), 0.09000000357627869 ) with self.subTest(msg="Transversal displacement"): self.assertEqual( - self.cdb.spring.result.get(102, 1000, "TRANSVERSAL_DISPLACEMENT"), + self.cdb.spring.result.get(102, 1000, "VT"), 0.07000000029802322 ) with self.subTest(msg="Rotation"): self.assertEqual( - self.cdb.spring.result.get(113, 1000, "ROTATION"), + self.cdb.spring.result.get(113, 1000, "PHI"), 0 ) @@ -114,12 +144,12 @@ def test_get_after_clear(self) -> None: self.cdb.spring.result.clear(1000) with self.subTest(msg="Check clear method"): with self.assertRaises(LookupError): - self.cdb.spring.result.get(113, 1000, "MOMENT") + self.cdb.spring.result.get(113, 1000, "M") self.cdb.spring.result.load(1000) with self.subTest(msg="Check indexes management"): self.assertEqual( - self.cdb.spring.result.get(113, 1000, "MOMENT"), + self.cdb.spring.result.get(113, 1000, "M"), 1.0000000031710769e-29 ) @@ -127,12 +157,12 @@ def test_get_after_clear_all(self) -> None: self.cdb.spring.result.clear_all() with self.subTest(msg="Check clear_all method"): with self.assertRaises(LookupError): - self.cdb.spring.result.get(113, 1000, "MOMENT") + self.cdb.spring.result.get(113, 1000, "M") self.cdb.spring.result.load(1000) with self.subTest(msg="Check indexes management"): self.assertEqual( - self.cdb.spring.result.get(113, 1000, "MOMENT"), + self.cdb.spring.result.get(113, 1000, "M"), 1.0000000031710769e-29 ) @@ -140,6 +170,6 @@ def test_load_with_duplicated_load_cases(self) -> None: self.cdb.spring.result.clear_all() self.cdb.spring.result.load([1000] + [1000]) self.assertEqual( - self.cdb.spring.result.get(113, 1000, "MOMENT"), + self.cdb.spring.result.get(113, 1000, "M"), 1.0000000031710769e-29 )