Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
bea1338
update load in group_data.py. Closes #39
StudioWEngineers May 20, 2026
6934dce
add get_data to group_data
StudioWEngineers May 20, 2026
61998ef
clean-up group_data
StudioWEngineers May 20, 2026
b473528
update get_id_range
StudioWEngineers May 26, 2026
b9c061b
update class docstring
StudioWEngineers May 26, 2026
1d0bbad
methods in alphabetical order
StudioWEngineers May 26, 2026
3fabf12
updat get_name and get_number
StudioWEngineers May 26, 2026
afe3bdd
simplify iterator implementation
StudioWEngineers May 26, 2026
cc6f341
update class name
StudioWEngineers May 26, 2026
020b20f
add test suite for group_data
StudioWEngineers May 26, 2026
ada852e
update class name part II
StudioWEngineers May 26, 2026
3a83901
fix sphinx build in group_data
StudioWEngineers May 27, 2026
d5217a9
update group_lc_data. Closes #38
StudioWEngineers May 27, 2026
6632ef1
shorter class names
StudioWEngineers May 27, 2026
53a1e60
add test suite for GroupsLC
StudioWEngineers May 27, 2026
d2d0207
make fila name consistent with class name
StudioWEngineers May 27, 2026
425f22a
add tests to docs
StudioWEngineers May 27, 2026
152be76
update sec_group_lc_data. closes #41
StudioWEngineers May 27, 2026
df040e5
skip secondary groups in group_lc_data
StudioWEngineers May 27, 2026
39972c8
fix active_groups in sec_group_lc_data
StudioWEngineers May 27, 2026
e6fa66b
make class name consistent with other classes
StudioWEngineers May 27, 2026
88c3b11
add test suite
StudioWEngineers May 27, 2026
16aeff9
add tests to docs
StudioWEngineers May 27, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions docs/cdb/api.rst
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,8 @@ associated public API.
CableLoad
CableResult
CrossSectionalData
_GroupData
_GroupLCData
Groups
GroupsLC
_LoadCases
_Node
_NodeData
Expand All @@ -48,7 +48,7 @@ associated public API.
_NodeResidual
Quads
QuadData
_SecondaryGroupLCData
SecondaryGroupsLC
_Spring
_SpringData
_SpringResult
Expand Down
3 changes: 3 additions & 0 deletions docs/cdb/test_setup.rst
Original file line number Diff line number Diff line change
Expand Up @@ -94,11 +94,14 @@ the temporary environment variable approach, open an MSYS2 MINGW64 shell, naviga
tests/cable_load
tests/cable_result
tests/cross_section
tests/groups
tests/groups_lc
tests/node_data
tests/node_load
tests/node_residual
tests/node_result
tests/quad_data
tests/sec_groups_lc
tests/spring_data
tests/spring_result
tests/truss_data
Expand Down
37 changes: 37 additions & 0 deletions docs/cdb/tests/groups.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
Groups
------

Related test suite: ``test_groups.py``

Expected CDB file name: ``GROUP_DATA.cdb``

Runs with: SOFiSTiK 2025

Version: 1

.. code-block:: text

+PROG AQUA
HEAD MATERIAL AND SECTIONS
NORM EN 199X-200X
STEE NO 1 TYPE YC ES 210000.0 GAM 78.5 TITL 'S355'
PROF 1 TYPE CHS 60.0 10.0 MNO 1
END

+PROG SOFIMSHA
HEAD GEOMETRY REV-1-SOF-2025
SYST 3D GDIR NEGZ GDIV 10
NODE NO 1 X 00.0 Y 0.0 Z +0.0 FIX F
NODE NO 2 X 05.0 Y 0.0 Z -0.5
NODE NO 3 X 10.0 Y 0.0 Z -1.0 FIX F

GRP 3 TITL 'GRP 3'
SPRI NO 2 NA 2 NE 3
CABL NO 6 NA 1 NE 2 NCS 1
GRP 10 TITL 'GRP 10'
BEAM NO 1 NA 1 NE 2 NCS 1
TRUS NO 1 NA 2 NE 3 NCS 1
GRP 20 TITL 'GRP 20'
BEAM NO 2 NA 2 NE 3 NCS 1
CABL NO 6 NA 1 NE 2 NCS 1
END
53 changes: 53 additions & 0 deletions docs/cdb/tests/groups_lc.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
GroupsLC
--------

Related test suite: ``test_groups_lc.py``

Expected CDB file name: ``GROUP_LC_DATA.cdb``

Runs with: SOFiSTiK 2025

Version: 1

.. code-block:: text

+PROG AQUA
HEAD MATERIAL AND SECTIONS
NORM EN 199X-200X
STEE NO 1 TYPE YC ES 210000.0 GAM 78.5 TITL 'S355'
PROF 1 TYPE CHS 60.0 10.0 MNO 1
END

+PROG SOFIMSHA
HEAD GEOMETRY REV-1-SOF-2025
SYST 3D GDIR NEGZ GDIV 10
NODE NO 1 X 00.0 Y 0.0 Z +0.0 FIX F
NODE NO 2 X 05.0 Y 0.0 Z -0.5
NODE NO 3 X 10.0 Y 0.0 Z -1.0 FIX F

GRP 3 TITL 'GRP 3'
SPRI NO 2 NA 2 NE 3
CABL NO 6 NA 1 NE 2 NCS 1
GRP 10 TITL 'GRP 10'
BEAM NO 1 NA 1 NE 2 NCS 1
TRUS NO 1 NA 2 NE 3 NCS 1
GRP 20 TITL 'GRP 20'
BEAM NO 2 NA 2 NE 3 NCS 1
CABL NO 6 NA 1 NE 2 NCS 1
END

+PROG ASE
HEAD DUMMY ANALYSES
LOOP#I 2
SYST PROB LINE
GRP - VAL YES
IF (#I==0)
GRP 10 VAL OFF
ELSE
GRP 3 VAL OFF
ENDIF
LET#LC #I+1000
LC #LC DLZ 1.0 TITL 'DUMMY'
END
ENDLOOP
END
63 changes: 63 additions & 0 deletions docs/cdb/tests/sec_groups_lc.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
GroupsLC
--------

Related test suite: ``test_secondary_groups_lc.py``

Expected CDB file name: ``SEC_GROUPS_LC.cdb``

Runs with: SOFiSTiK 2025

Version: 1

.. code-block:: text

+PROG AQUA
HEAD MATERIAL AND SECTIONS
NORM EN 199X-200X
STEE NO 1 TYPE YC ES 210000.0 GAM 78.5 TITL 'S355'
PROF 1 TYPE CHS 60.0 10.0 MNO 1
END

+PROG SOFIMSHA
HEAD GEOMETRY REV-1-SOF-2025
SYST 3D GDIR NEGZ GDIV 10
NODE NO 1 X 00.0 Y 0.0 Z +0.0 FIX F
NODE NO 2 X 05.0 Y 0.0 Z -0.5
NODE NO 3 X 10.0 Y 0.0 Z -1.0 FIX F

GRP 3 TITL 'GRP 3'
SPRI NO 2 NA 2 NE 3
CABL NO 6 NA 1 NE 2 NCS 1
GRP 10 TITL 'GRP 10'
BEAM NO 1 NA 1 NE 2 NCS 1
TRUS NO 1 NA 2 NE 3 NCS 1
GRP 20 TITL 'GRP 20'
BEAM NO 2 NA 2 NE 3 NCS 1
BEAM NO 4 NA 1 NE 2 NCS 1
CABL NO 6 NA 1 NE 2 NCS 1
END

+PROG SOFIMSHA
HEAD SECONDARY GROUPS
SYST REST
GRP 'TEST' TITL 'SECONDARY TEST GROUP'
BEAM (202,-204)
END

+PROG ASE
HEAD DUMMY ANALYSES
LOOP#I 2
SYST PROB LINE
GRP - VAL YES
IF (#I==0)
GRP 10 VAL OFF
GRP 'TEST' VAL OFF
ELSE
GRP 3 VAL OFF
GRP 'TEST' VAL YES
ENDIF
LET#LC #I+1000
LC #LC DLZ 1.0 TITL 'DUMMY'
END
ENDLOOP
END
12 changes: 6 additions & 6 deletions src/py_sofistik_utils/cdb_reader/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
from . _internals.cable_load import CableLoad
from . _internals.cable_result import CableResult
from . _internals.cross_section_data import CrossSectionalData
from . _internals.group_data import _GroupData
from . _internals.group_lc_data import _GroupLCData
from . _internals.group_data import Groups
from . _internals.group_lc_data import GroupsLC
from . _internals.load_cases import _LoadCases
from . _internals.node import _Node
from . _internals.node_data import _NodeData
Expand All @@ -17,7 +17,7 @@
from . _internals.node_result import _NodeResult
from . _internals.quad import Quads
from . _internals.quad_data import QuadData
from . _internals.sec_group_lc_data import _SecondaryGroupLCData
from . _internals.sec_group_lc_data import SecondaryGroupsLC
from . _internals.spring import _Spring
from . _internals.spring_data import _SpringData
from . _internals.spring_result import _SpringResult
Expand All @@ -39,8 +39,8 @@
"CableLoad",
"CableResult",
"CrossSectionalData",
"_GroupData",
"_GroupLCData",
"Groups",
"GroupsLC",
"_LoadCases",
"_Node",
"_NodeData",
Expand All @@ -49,7 +49,7 @@
"_NodeResult",
"Quads",
"QuadData",
"_SecondaryGroupLCData",
"SecondaryGroupsLC",
"_Spring",
"_SpringData",
"_SpringResult",
Expand Down
6 changes: 3 additions & 3 deletions src/py_sofistik_utils/cdb_reader/_internals/beam_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from pandas import DataFrame

# local library specific imports
from . group_data import _GroupData
from . group_data import Groups
from . sofistik_dll import SofDll
from . sofistik_classes import CBEAM, CBEAM_SCT
from . sofistik_utilities import decode_beam_end_release
Expand Down Expand Up @@ -261,13 +261,13 @@ def load(self) -> None:
)

# assigning groups
group_data = _GroupData(self._dll)
group_data = Groups(self._dll)
group_data.load()

df = DataFrame(conv_data).sort_values("ELEM_ID", kind="mergesort")
elem_ids = df["ELEM_ID"]

for grp, grp_range in group_data.iterator_beam():
for grp, grp_range in group_data.iterator("BEAM"):
if grp_range.stop == 0:
continue
left = elem_ids.searchsorted(grp_range.start, side="left")
Expand Down
6 changes: 3 additions & 3 deletions src/py_sofistik_utils/cdb_reader/_internals/beam_results.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

# local library specific imports
from . beam_data import _BeamData
from . group_data import _GroupData
from . group_data import Groups
from . sofistik_dll import SofDll
from . sofistik_classes import CBEAM_FOR

Expand Down Expand Up @@ -193,13 +193,13 @@ def load(self, load_cases: int | list[int]) -> None:
data.extend(self._load(load_case))

# assigning groups
group_data = _GroupData(self._dll)
group_data = Groups(self._dll)
group_data.load()

df = DataFrame(data).sort_values("ELEM_ID", kind="mergesort")
elem_ids = df["ELEM_ID"]

for grp, grp_range in group_data.iterator_beam():
for grp, grp_range in group_data.iterator("BEAM"):
if grp_range.stop == 0:
continue
left = elem_ids.searchsorted(grp_range.start, side="left")
Expand Down
6 changes: 3 additions & 3 deletions src/py_sofistik_utils/cdb_reader/_internals/beam_stresses.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

# local library specific imports
from . beam_data import _BeamData
from . group_data import _GroupData
from . group_data import Groups
from . sofistik_dll import SofDll
from . sofistik_classes import CBEAM_STR
from . sofistik_utilities import long_to_str
Expand Down Expand Up @@ -190,13 +190,13 @@ def load(self, load_cases: int | list[int]) -> None:
data.extend(self._load(load_case))

# assigning groups
group_data = _GroupData(self._dll)
group_data = Groups(self._dll)
group_data.load()

df = DataFrame(data).sort_values("ELEM_ID", kind="mergesort")
elem_ids = df["ELEM_ID"]

for grp, grp_range in group_data.iterator_beam():
for grp, grp_range in group_data.iterator("BEAM"):
if grp_range.stop == 0:
continue
left = elem_ids.searchsorted(grp_range.start, side="left")
Expand Down
6 changes: 3 additions & 3 deletions src/py_sofistik_utils/cdb_reader/_internals/cable_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from pandas import concat, DataFrame

# local library specific imports
from . group_data import _GroupData
from . group_data import Groups
from . sofistik_dll import SofDll
from . sofistik_classes import CCABL

Expand Down Expand Up @@ -163,13 +163,13 @@ def load(self) -> None:
)

# assigning groups
group_data = _GroupData(self._dll)
group_data = Groups(self._dll)
group_data.load()

df = DataFrame(data).sort_values("ELEM_ID", kind="mergesort")
elem_ids = df["ELEM_ID"]

for grp, grp_range in group_data.iterator_cable():
for grp, grp_range in group_data.iterator("CABLE"):
if grp_range.stop == 0:
continue

Expand Down
6 changes: 3 additions & 3 deletions src/py_sofistik_utils/cdb_reader/_internals/cable_load.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from pandas import concat, DataFrame

# local library specific imports
from . group_data import _GroupData
from . group_data import Groups
from . sofistik_classes import CCABL_LOA
from . sofistik_dll import SofDll

Expand Down Expand Up @@ -208,13 +208,13 @@ def load(self, load_cases: int | list[int]) -> None:
data.extend(self._load(load_case))

# assigning groups
group_data = _GroupData(self._dll)
group_data = Groups(self._dll)
group_data.load()

df = DataFrame(data).sort_values("ELEM_ID", kind="mergesort")
elem_ids = df["ELEM_ID"]

for grp, grp_range in group_data.iterator_cable():
for grp, grp_range in group_data.iterator("CABLE"):
if grp_range.stop == 0:
continue

Expand Down
6 changes: 3 additions & 3 deletions src/py_sofistik_utils/cdb_reader/_internals/cable_result.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from pandas import concat, DataFrame

# local library specific imports
from . group_data import _GroupData
from . group_data import Groups
from . sofistik_dll import SofDll
from . sofistik_classes import CCABL_RES

Expand Down Expand Up @@ -170,13 +170,13 @@ def load(self, load_cases: int | list[int]) -> None:
data.extend(self._load(load_case))

# assigning groups
group_data = _GroupData(self._dll)
group_data = Groups(self._dll)
group_data.load()

df = DataFrame(data).sort_values("ELEM_ID", kind="mergesort")
elem_ids = df["ELEM_ID"]

for grp, grp_range in group_data.iterator_cable():
for grp, grp_range in group_data.iterator("CABLE"):
if grp_range.stop == 0:
continue

Expand Down
Loading
Loading