osis-python 0.2.2__py3-none-any.whl → 0.3.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. osis_python-0.3.0.dist-info/METADATA +294 -0
  2. osis_python-0.3.0.dist-info/RECORD +92 -0
  3. pyosis/__init__.py +1 -1
  4. pyosis/boundary/__init__.py +2 -2
  5. pyosis/boundary/interface.py +111 -46
  6. pyosis/boundary/manager.py +852 -0
  7. pyosis/control/__init__.py +4 -1
  8. pyosis/control/{interface.py → control.py} +1 -66
  9. pyosis/control/io.py +23 -0
  10. pyosis/control/manager.py +196 -0
  11. pyosis/control/nonlinear.py +71 -0
  12. pyosis/core/all_func.py +9 -4
  13. pyosis/core/client.py +29 -9
  14. pyosis/core/command.py +2 -1
  15. pyosis/core/engine.py +346 -0
  16. pyosis/dynamic/__init__.py +12 -0
  17. pyosis/dynamic/load_to_mass.py +108 -0
  18. pyosis/dynamic/manager.py +347 -0
  19. pyosis/dynamic/modal.py +28 -0
  20. pyosis/dynamic/seismic.py +195 -0
  21. pyosis/element/__init__.py +2 -1
  22. pyosis/element/interface.py +1 -17
  23. pyosis/element/manager.py +599 -0
  24. pyosis/general/interface.py +136 -1
  25. pyosis/geometry/__init__.py +2 -1
  26. pyosis/geometry/interface.py +4 -4
  27. pyosis/geometry/manager.py +321 -0
  28. pyosis/live/__init__.py +2 -1
  29. pyosis/live/analysis.py +17 -18
  30. pyosis/live/lane.py +1 -1
  31. pyosis/live/manager.py +989 -0
  32. pyosis/load/__init__.py +2 -1
  33. pyosis/load/loadcase.py +2 -2
  34. pyosis/load/manager.py +1450 -0
  35. pyosis/load/static.py +68 -19
  36. pyosis/load/tendon.py +46 -41
  37. pyosis/material/__init__.py +2 -1
  38. pyosis/material/manager.py +390 -0
  39. pyosis/node/__init__.py +2 -1
  40. pyosis/node/manager.py +239 -0
  41. pyosis/post/__init__.py +4 -3
  42. pyosis/post/combine.py +145 -0
  43. pyosis/post/design_check.py +362 -0
  44. pyosis/post/display.py +76 -0
  45. pyosis/post/manager.py +557 -0
  46. pyosis/project/__init__.py +2 -0
  47. pyosis/project/interface.py +64 -0
  48. pyosis/project/manager.py +101 -0
  49. pyosis/property/__init__.py +3 -1
  50. pyosis/property/{comp_thickness.py → component_thickness.py} +3 -3
  51. pyosis/property/coordinate.py +4 -4
  52. pyosis/property/damping.py +88 -0
  53. pyosis/property/manager.py +284 -0
  54. pyosis/result/__init__.py +4 -0
  55. pyosis/{post → result}/check.py +4 -4
  56. pyosis/{post → result}/env.py +2 -2
  57. pyosis/{post → result}/loadcase.py +1 -1
  58. pyosis/result/manager.py +272 -0
  59. pyosis/{post → result}/result.py +3 -3
  60. pyosis/section/__init__.py +2 -1
  61. pyosis/section/common.py +10 -10
  62. pyosis/section/manager.py +1288 -0
  63. pyosis/section/numeric.py +2 -2
  64. pyosis/section/param.py +44 -6
  65. pyosis/section/rebar.py +1 -1
  66. pyosis/section/rib.py +31 -0
  67. pyosis/settlement/__init__.py +8 -0
  68. pyosis/settlement/interface.py +150 -0
  69. pyosis/settlement/manager.py +368 -0
  70. pyosis/stability/__init__.py +2 -0
  71. pyosis/stability/buckling.py +112 -0
  72. pyosis/stability/manager.py +175 -0
  73. pyosis/stage/__init__.py +2 -1
  74. pyosis/stage/define.py +18 -18
  75. pyosis/stage/manager.py +360 -0
  76. pyosis/stage/overall.py +6 -6
  77. pyosis/thickness/__init__.py +2 -1
  78. pyosis/thickness/interface.py +3 -3
  79. pyosis/thickness/manager.py +76 -0
  80. osis_python-0.2.2.dist-info/METADATA +0 -111
  81. osis_python-0.2.2.dist-info/RECORD +0 -71
  82. pyosis/common/__init__.py +0 -2
  83. pyosis/common/interface.py +0 -110
  84. pyosis/common/project.py +0 -54
  85. pyosis/core/PyInterface.pyi +0 -157
  86. pyosis/io/__init__.py +0 -10
  87. pyosis/io/boundary_info.py +0 -239
  88. pyosis/io/coordinate.py +0 -98
  89. pyosis/io/element_info.py +0 -489
  90. pyosis/io/group_info.py +0 -82
  91. pyosis/io/material_info.py +0 -39
  92. pyosis/io/node_info.py +0 -192
  93. pyosis/io/prestressed_info.py +0 -170
  94. pyosis/io/response.py +0 -135
  95. pyosis/io/section_info.py +0 -162
  96. {osis_python-0.2.2.dist-info → osis_python-0.3.0.dist-info}/WHEEL +0 -0
  97. {osis_python-0.2.2.dist-info → osis_python-0.3.0.dist-info}/licenses/LICENSE +0 -0
  98. {osis_python-0.2.2.dist-info → osis_python-0.3.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,294 @@
1
+ Metadata-Version: 2.4
2
+ Name: osis-python
3
+ Version: 0.3.0
4
+ Summary: A Python client library for Osis APDL
5
+ Author-email: "CCCC Highway Consultant Co. Ltd." <support@osisbim.com>
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/osis-ai/pyosis
8
+ Project-URL: Documentation, https://github.com/osis-ai/pyosis#readme
9
+ Project-URL: Repository, https://github.com/osis-ai/pyosis.git
10
+ Project-URL: BugTracker, https://github.com/osis-ai/pyosis/issues
11
+ Classifier: Development Status :: 4 - Beta
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: Topic :: Software Development :: Libraries
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3.11
16
+ Classifier: Programming Language :: Python :: 3.12
17
+ Requires-Python: >=3.11
18
+ Description-Content-Type: text/markdown
19
+ License-File: LICENSE
20
+ Requires-Dist: matplotlib>=3.10.7
21
+ Requires-Dist: pandas>=2.3.3
22
+ Requires-Dist: requests>=2.33.1
23
+ Provides-Extra: dev
24
+ Requires-Dist: pytest>=7.0; extra == "dev"
25
+ Requires-Dist: black>=23.0; extra == "dev"
26
+ Requires-Dist: mypy>=1.0; extra == "dev"
27
+ Provides-Extra: test
28
+ Requires-Dist: pytest>=7.0; extra == "test"
29
+ Requires-Dist: pytest-cov>=4.0; extra == "test"
30
+ Dynamic: license-file
31
+
32
+ [简体中文](README.zh-CN.md) | [English](README.md)
33
+
34
+ # pyosis
35
+
36
+ Python client library for **OSIS** Bridge & Tunnel Analysis Platform (developed by CCCC Highway Consultants Co., Ltd.).
37
+
38
+ pyosis provides an object-oriented Python API for automating the creation of bridge/tunnel finite element models, executing analysis solvers, and extracting post-processing results.
39
+
40
+ ## Installation
41
+
42
+ Due to naming conflicts on PyPI, please install using:
43
+
44
+ ```bash
45
+ pip install osis-python
46
+ ```
47
+
48
+ If your mirror hasn't synced yet, use:
49
+
50
+ ```bash
51
+ pip install osis-python -i https://pypi.org/simple
52
+ ```
53
+
54
+ ## Requirements
55
+
56
+ - OSIS >= 5.0 (includes the required Python runtime environment)
57
+ - Python >= 3.8
58
+
59
+ ## Quick Start
60
+
61
+ ### 1. Using OSISEngine (Recommended)
62
+
63
+ `OSISEngine` is the core facade class of pyosis, integrating all module managers and providing a unified project-level entry point:
64
+
65
+ ```python
66
+ from pyosis.core.engine import OSISEngine
67
+
68
+ engine = OSISEngine()
69
+
70
+ # Clear project
71
+ engine.clear()
72
+
73
+ # Set global parameters
74
+ engine.control.set_gravity_acceleration(9.8066)
75
+ engine.control.set_calc_tendon(True)
76
+ engine.control.set_calc_creep(True)
77
+
78
+ # Create sections
79
+ sec = engine.section.create_circle("Circle Section", d=0.5, tw=0.02)
80
+
81
+ # Create materials
82
+ mat = engine.material.create_conc("C30 Concrete", eCode="JTG3362_2018", eGrade="C30")
83
+
84
+ # Create nodes
85
+ n1 = engine.node.create(0, 0, 0)
86
+ n2 = engine.node.create(15, 0, 0)
87
+
88
+ # Create elements
89
+ elem = engine.element.create_beam3d(
90
+ n1.no, n2.no, nMat=mat.no, nSec1=sec.no, nSec2=sec.no
91
+ )
92
+
93
+ # Create boundaries
94
+ bd = engine.boundary.create_general(bX=1, bY=1, bZ=1, bRX=1, bRY=1, bRZ=1)
95
+ bd.assign("a", [n1.no])
96
+
97
+ # Create load case and add loads
98
+ lc = engine.load.create("Self-weight", load_case_type="D")
99
+ lc.create_gravity()
100
+
101
+ # Solve
102
+ engine.solve()
103
+ ```
104
+
105
+ ### 2. Using Managers Directly
106
+
107
+ If you don't need the convenience methods of Engine, you can also import individual managers directly:
108
+
109
+ ```python
110
+ from pyosis.material import material_manager
111
+ from pyosis.node import node_manager
112
+
113
+ mat = material_manager.create_conc("C30", eCode="JTG3362_2018", eGrade="C30")
114
+ node = node_manager.create(0, 0, 0)
115
+ ```
116
+
117
+ ## Core Architecture
118
+
119
+ ### Manager System
120
+
121
+ pyosis adopts a Manager pattern to organize code. Each module corresponds to a Manager:
122
+
123
+ | Manager | Attribute | Description |
124
+ |---------|-----------|-------------|
125
+ | MaterialManager | `engine.material` | Materials (concrete, steel, prestressed, rebar, etc.) |
126
+ | SectionManager | `engine.section` | Sections (box girder, T-girder, hollow slab, steel box, etc.) |
127
+ | NodeManager | `engine.node` | Nodes |
128
+ | ElementManager | `engine.element` | Elements (beam, truss, spring, cable, shell) |
129
+ | BoundaryManager | `engine.boundary` | Boundaries (general support, master-slave, elastic support, etc.) |
130
+ | LoadCaseManager | `engine.load` | Load cases |
131
+ | StageManager | `engine.stage` | Construction stages |
132
+ | TendonManager | `engine.tendon` | Tendons (properties + shapes) |
133
+ | LiveManager | `engine.live` | Live loads (grades + lanes + cases) |
134
+ | SettlementManager | `engine.settlement` | Settlement analysis |
135
+ | StabilityManager | `engine.stability` | Stability analysis |
136
+ | DynamicManager | `engine.dynamic` | Dynamic analysis |
137
+ | PostManager | `engine.post` | Post-processing (load combinations, design checks) |
138
+ | ResultManager | `engine.result` | Result export (load case / envelope / check results) |
139
+ | ControlManager | `engine.control` | Global control parameters |
140
+ | ProjectManager | `engine.project` | Project operations |
141
+
142
+ ### Sub-Managers
143
+
144
+ Some managers contain sub-managers, accessed via attributes:
145
+
146
+ ```python
147
+ # Element groups
148
+ grp = engine.element.group.create("Main Girder Elements")
149
+ grp.add([1, 2, 3])
150
+
151
+ # Boundary groups
152
+ bg = engine.boundary.group.create("Abutment Boundaries")
153
+ bg.add([1, 2])
154
+
155
+ # Tendons
156
+ prop = engine.tendon.prop.create_in(
157
+ "15-10", mat_no=1, e_code="GBT5224_2014",
158
+ diameter=15.2, n_num=10, d_pipe=0.09
159
+ )
160
+ shape = engine.tendon.shape.create_arc3d(
161
+ "N1", n_num=2, prop="15-10",
162
+ element_group="Main Girder Elements", curve_name="curve1"
163
+ )
164
+
165
+ # Live loads
166
+ grade = engine.live.grade.create("Highway-Class I")
167
+ lane = engine.live.lane.create("Lane 1")
168
+ case = engine.live.case.create("Live Load Case 1")
169
+ ```
170
+
171
+ ### Data Class Objects
172
+
173
+ Create and query operations return data class objects (dataclass) instead of raw dictionaries:
174
+
175
+ ```python
176
+ elem = engine.element.get(1)
177
+ print(elem.no) # ID
178
+ print(elem.node_vec) # Node list
179
+ print(elem.mat) # Material ID
180
+
181
+ # Objects support operations (operations下沉 to object)
182
+ lc = engine.load.get("Self-weight")
183
+ lc.create_gravity()
184
+ lc.create_nforce(1, dFx=1000)
185
+ ```
186
+
187
+ ### Explicit Numbering
188
+
189
+ Some `create_*` functions support explicit numbering via the `no` parameter. If not specified, the number is automatically assigned:
190
+
191
+ ```python
192
+ # Auto-assigned number
193
+ sec = engine.section.create_circle("Section 1", d=0.5)
194
+
195
+ # Explicit number
196
+ sec = engine.section.create_circle("Section 1", d=0.5, no=100)
197
+ ```
198
+
199
+ ## Result Export
200
+
201
+ After solving, you can export various analysis results using `engine.result`. All export methods return pandas DataFrames:
202
+
203
+ ```python
204
+ # Export load case results (element forces)
205
+ df = engine.result.loadcase("Self-weight", "LCEF")
206
+
207
+ # Export envelope results (element forces)
208
+ df = engine.result.env("Basic Combination Envelope", "EnvEF")
209
+
210
+ # Export design check results
211
+ df = engine.result.check(
212
+ "Concrete", "Ultimate Bending Capacity Check", "Basic Combination"
213
+ )
214
+
215
+ # Batch export all check results from Check folder
216
+ results = engine.result.check_all()
217
+ for name, df in results.items():
218
+ print(f"{name}: {len(df)} rows")
219
+ ```
220
+
221
+ Supported result types:
222
+ - **Load case**: `LCEF` (element force), `LCED` (element displacement), `LCND` (node displacement), `LCBF` (boundary reaction), `LCTL` (tendon loss), `LCS` (element stress)
223
+ - **Envelope**: `EnvBF` (boundary reaction), `EnvEF` (element force), `EnvES` (element strain), `EnvS` (element stress), `EnvND` (node displacement)
224
+
225
+ Requires `pandas` to be installed: `pip install pandas`
226
+
227
+ ## Complete Example
228
+
229
+ ```python
230
+ from pyosis.core.engine import OSISEngine
231
+
232
+ engine = OSISEngine()
233
+ engine.clear()
234
+
235
+ # Control parameters
236
+ engine.control.set_gravity_acceleration(9.8066)
237
+ engine.control.set_calc_tendon(True)
238
+ engine.control.set_calc_concurrent_force(True)
239
+ engine.control.set_calc_shrink(True)
240
+ engine.control.set_calc_creep(True)
241
+ engine.control.set_calc_shear(True)
242
+ engine.control.set_calc_relaxation(True)
243
+ engine.control.set_mod_loc_coor(False)
244
+ engine.control.set_inc_tendon(True)
245
+ engine.control.set_nonlinear(geom=False, link=False)
246
+
247
+ # Sections
248
+ engine.section.create_circle("Circle Section 1", d=0.219, tw=0.012, no=1)
249
+ engine.section.create_circle("Circle Section 2", d=0.180, tw=0.008, no=2)
250
+
251
+ # Materials
252
+ engine.material.create_steel(
253
+ "Steel 1", eCode="JTGD64_2015", eGrade="Q345", dDmp=0.05, no=1
254
+ )
255
+
256
+ # Nodes
257
+ engine.node.create(0, 5, 0, no=1)
258
+ engine.node.create(15, 5, 0, no=2)
259
+ engine.node.create(7.5, 0, 0, no=3)
260
+ engine.node.create(20, 0, 0, no=4)
261
+
262
+ # Elements
263
+ engine.element.create_beam3d(1, 3, nMat=1, nSec1=1, nSec2=1, no=1)
264
+ engine.element.create_beam3d(2, 3, nMat=1, nSec1=2, nSec2=2, no=2)
265
+
266
+ # Boundaries
267
+ engine.boundary.create_general(no=1)
268
+ engine.boundary.get(1).assign("a", [1, 2])
269
+
270
+ # Loads
271
+ lc = engine.load.create(
272
+ "Custom Load Case 1",
273
+ load_case_type="USER",
274
+ prompt="Two forces applied at nodes 3 and 4"
275
+ )
276
+ lc.create_nforce(3, dFx=0, dFy=-1000000, dFz=0)
277
+ lc.create_nforce(4, dFx=200000, dFy=0, dFz=0)
278
+
279
+ # Solve
280
+ engine.solve()
281
+ ```
282
+
283
+ ## Important Notes
284
+
285
+ 1. **OSIS must be running**: Before executing code, ensure the OSIS software is launched and logged in. pyosis communicates with OSIS via HTTP.
286
+ 2. **Exception handling**: All operations throw `RuntimeError` on failure. It is recommended to add exception handling in production code.
287
+ 3. **Stateless design**: Managers do not cache data. Frequent calls to `all()` and other query methods incur network overhead. Use cautiously in loops.
288
+ 4. **Number uniqueness**: When explicitly specifying `no`, if the number already exists, the behavior depends on the OSIS underlying implementation (usually overwrites or raises an error).
289
+ 5. **Command mode**: When executing code in OSIS command mode, you can directly send Python code blocks. When executing in an IDE, ensure OSIS is running.
290
+
291
+ ## More Resources
292
+
293
+ - [tests/](tests/): Example code for each module
294
+ - [templetes/](templetes/): Complete bridge modeling template projects
@@ -0,0 +1,92 @@
1
+ osis_python-0.3.0.dist-info/licenses/LICENSE,sha256=T4mkSYliXdU9mYe-NfHkqg6GPhzoYaIQO_a630UzpS4,1088
2
+ pyosis/__init__.py,sha256=3loXq3be3iLFSdYJ6LDz5pU4-kTlOTt439vHtwpK0aE,465
3
+ pyosis/boundary/__init__.py,sha256=W5LfF-jugWa-YI8pnfELZaz0pXLa-D8TiGnBn12HGGQ,102
4
+ pyosis/boundary/interface.py,sha256=jkfyzMY15_Aw8DpVCTXVRXJk0EuTDSeNzzs1mvL7wIU,8882
5
+ pyosis/boundary/manager.py,sha256=_TgqzuyrWUSAZRvHmrGm7sRTJ1axFESa98XQP93hk-w,28730
6
+ pyosis/control/__init__.py,sha256=98UAXB9Wkf93pGUKIjoGBBrSCblVeAwc_MXeaAB-UIA,119
7
+ pyosis/control/control.py,sha256=AUNFhkWhmfvOjNG8_RZuN2Pu80q5ANDpBLeXZTFhsQ0,2279
8
+ pyosis/control/io.py,sha256=buaut3-W8kwJIe3PgjtgOU0JCSgDfOEd2cS3mxYsfuc,591
9
+ pyosis/control/manager.py,sha256=9lP2Y3Q6dM4tJqLPxS48BhYS0t-CmYgIAm3hJDVgwKs,6743
10
+ pyosis/control/nonlinear.py,sha256=26W_2GhD_0cn3YQxJjgbPR1oEopJWyuFWGlgx0q023I,1604
11
+ pyosis/core/__init__.py,sha256=ohE6BQddjdaSlM16lvphPmoNmQRaxZyjbhXqwwvN8eU,377
12
+ pyosis/core/all_func.py,sha256=iJZasXz49i7IlJ-2erNfX1s2iohNYCt0PRKrfQpgvg8,497
13
+ pyosis/core/client.py,sha256=fX3aPz89KzJ1XGN2kOoNva-qUxv-H1dJmoV_bL4Eevw,2511
14
+ pyosis/core/command.py,sha256=gADsMqqiPHWAiY6O14LUWvOUppMAaDTnJh1IfjMdwDs,9947
15
+ pyosis/core/engine.py,sha256=SybRARADwC26IXKyWNoftrduOIhbXqZ5i5HM0E9kha4,12226
16
+ pyosis/dynamic/__init__.py,sha256=0OAWw2wnjlqhIqT4bMZB_czG-5BilGM7BW5M7Ve5FiM,344
17
+ pyosis/dynamic/load_to_mass.py,sha256=zGUDADo4bo3J7KsIcSD5FmcL-I-ly81DUKAxfSZYqNs,2924
18
+ pyosis/dynamic/manager.py,sha256=3VC6rf5i3YQe6dDJOrhB6k3xaziTtAkOYDDkv0kkhjU,11765
19
+ pyosis/dynamic/modal.py,sha256=__as3Nl7Ks2ntgcZwAA9UhvsvTfBl-1zSUOTsnPVf-Y,640
20
+ pyosis/dynamic/seismic.py,sha256=_YygF_hkISsbImdNYg-OmsO36Ra_c4z53lbwvw0u340,6215
21
+ pyosis/element/__init__.py,sha256=fZgmxJiNhCe3Ki8vNEdZOhyinxwvlF6Jcu-DgD-c6YM,92
22
+ pyosis/element/interface.py,sha256=TEUxsUEAs4s6op1WPHxAQiWkBXSNR4gDZDI9N2QydF0,9902
23
+ pyosis/element/manager.py,sha256=bCtqZRAE8AejyKjcGbpsXoayIfeQbx8kNxvwW6ZklaY,20354
24
+ pyosis/general/__init__.py,sha256=dyvge-GgUpT3BeDwm_Lss1xqNlxAQdt63WJ7QcuZ_O4,24
25
+ pyosis/general/interface.py,sha256=TBoUhygzozYXyQt-U5PMxskHMn3rVJhEXMVm3X6LFGk,5608
26
+ pyosis/geometry/__init__.py,sha256=mlAXlxaohcEcm8-6anyDo1fevh_IzYz2OXBn0_DIrCY,99
27
+ pyosis/geometry/interface.py,sha256=gCLh-BmJlBtJYa0BK9AdIVIRDqEj9DPLbyEKIURxTmo,4441
28
+ pyosis/geometry/manager.py,sha256=B1E6MQKr8quttbT3xeeUEIZAbv0vPgy28XVWUMLTS94,10494
29
+ pyosis/live/__init__.py,sha256=jl0pMkfAGRnukwuCbc6fOJoWo-ufMnFm4lyBV-xQQxc,112
30
+ pyosis/live/analysis.py,sha256=OUBMUTCWgnnx2BXxUlwrl2mWJj4tNAAZahxtsM_BkTw,5451
31
+ pyosis/live/grade.py,sha256=hjxUf9RBxVFuSs9J6Y0_A2g5TqJGqozdEg0_QuFZKiA,3223
32
+ pyosis/live/lane.py,sha256=dX0NFhyhAPd5UQvbkjQnilDt-FYtUgw3vhM9vvl2mZA,5467
33
+ pyosis/live/manager.py,sha256=L74wSIs_s746nsd801c0WiyCfxRnbH-k8Fq1z9bJ3J8,34392
34
+ pyosis/load/__init__.py,sha256=RSbFhC-ybPjR5W0UKrmfHwSMgFw0BvdwAoGCb9Zizfg,120
35
+ pyosis/load/loadcase.py,sha256=sCh21loarLG8b91k-pH4kaRqS8hHRiUfACFQz79jS4o,1605
36
+ pyosis/load/manager.py,sha256=E6VwEAQDR_1HT1bsRSDCgsuy7jFn41yYpt7CputhgW4,49478
37
+ pyosis/load/static.py,sha256=nD2doBQHSS4EGo_AEmxXfm-3yhMjLIm3uX3UkDRdMEU,15238
38
+ pyosis/load/tendon.py,sha256=g6xlZfb43Zz-KaA0SyfmzTQK-svpxAKF9tc6XMiiA-4,10987
39
+ pyosis/material/__init__.py,sha256=W0oDx9SY_zngAcrMCO_0sF773-OxCfL1B-w2IeWlZ_g,79
40
+ pyosis/material/interface.py,sha256=83yFn-RoqLBEiYCYmbnXoMO0Gwd0u6MkWvicgFDmWh4,5699
41
+ pyosis/material/manager.py,sha256=B8eMW-ROtUKiV_dm4kenz1nek3NcAaMT7OiT8MERHTs,13237
42
+ pyosis/node/__init__.py,sha256=6BKMR_HhFuvf-wr_U1H4njEj95pqgiHh6ApFl2JWMQ0,71
43
+ pyosis/node/interface.py,sha256=bl4B0VlFRzx3KZibOW4OXJj2FEG3SeqIFpSR_SyLzyM,1216
44
+ pyosis/node/manager.py,sha256=oFzId04rC6J9sQOfvigdF1_3wIOsRgaNcHmtsoOjDU4,8003
45
+ pyosis/post/__init__.py,sha256=Zh8Jvy6715tCZxwlTfV86-8cyh0OqqK2vCTlG_VARYY,120
46
+ pyosis/post/combine.py,sha256=0EajaRAJK3d_rkW7t9Cmxc4wHM87TOBYroWnnBK2ldM,4587
47
+ pyosis/post/design_check.py,sha256=jwTo0yrIQ4gxmEz9Ohcb09pr2ra69HftUsk1e8OJCkU,11378
48
+ pyosis/post/display.py,sha256=BdoHetcM69Ez4s0-Zx3MreIcadxJPv2U2cx0E0PJTVw,2006
49
+ pyosis/post/manager.py,sha256=_OrELVugzgnSaQ8wFSxpWzb3ceDAKzgn8pcV19UXp_M,19383
50
+ pyosis/project/__init__.py,sha256=hYfnubp0bbHJK2tBBH12XDs3CeeO0d7whzILDxl4044,78
51
+ pyosis/project/interface.py,sha256=_pDttdXT4Kw8iXfVX3pLlr4vKY5XI27EwbvZAOr9wSg,1294
52
+ pyosis/project/manager.py,sha256=IRAZbfCrt-rTZ6PWHhvkuA8qGjIgavQXyR8bEUMo-NQ,2734
53
+ pyosis/property/__init__.py,sha256=xGdJItBRic3rd-6i5vyjGfA3KY-e9-WuOquIEnjPP_4,191
54
+ pyosis/property/component_thickness.py,sha256=V8ufM5eFyoC7Sn3_UbY4IICVZ21i0URYsguzj1bkqqc,740
55
+ pyosis/property/coordinate.py,sha256=zSnT7G6WDZthSt081TvmoB7jhf7TTsRfOz2GvspIBs8,2325
56
+ pyosis/property/creep_shrink.py,sha256=5RHSZoO7dLw-D5jYvKzBiDL9NfetEaDETtDBpnA0VpA,1475
57
+ pyosis/property/damping.py,sha256=tUWZ8wbNBstK3kKrqeh9MmLnfQORTOwZDXV_p6qYZhw,3196
58
+ pyosis/property/manager.py,sha256=RjOi-HHWcoh5vU-trhKB12VPOJhMdLg4hD_VGTTfWLI,9177
59
+ pyosis/property/pu_curve.py,sha256=qjw-84H3QAAnSuOuF9KxSVysPW1M56zSj_vZhf7DePU,1528
60
+ pyosis/quick_building/__init__.py,sha256=dyvge-GgUpT3BeDwm_Lss1xqNlxAQdt63WJ7QcuZ_O4,24
61
+ pyosis/quick_building/interface.py,sha256=xdQrORabxmnlhi537pspFokQBaXSmnZMIxA_kxSo_cE,13951
62
+ pyosis/result/__init__.py,sha256=DYZe8miR9Fj2Rnbdjyi97h1Egr_kVm2bbHyIffJ2Yk8,114
63
+ pyosis/result/check.py,sha256=lehT9CO5UbTn3Jc_3cpJRGkXLVb8NNFFUGtDd_Q1PyY,4897
64
+ pyosis/result/env.py,sha256=31OLB4RNgDpLhJ1dCdZ9OzusSduVcLLBOqKVAB3cZsQ,1414
65
+ pyosis/result/loadcase.py,sha256=fB3iKhqkyAAr4beQtFgK4Mj17rJWtoSxn8fGN8rCjtM,2340
66
+ pyosis/result/manager.py,sha256=Q4aoRX0LB8y3q5TdqV_JPYFRWTWuygzyNnhCcJpUveY,9808
67
+ pyosis/result/result.py,sha256=wUyRaHSwyijLpodWIHPFQVEOn6LP8MfYp7xLhC-RiIo,1194
68
+ pyosis/section/__init__.py,sha256=VjNbQWgWHtLO6la39oXgbQMnQPR0-b1DPIM52Cj--jg,179
69
+ pyosis/section/common.py,sha256=9cnI5JdHfC6W-OvxAr4nJ2kAZaF3aDDl1luMFHQP8Bg,26572
70
+ pyosis/section/manager.py,sha256=ELi_QHegElh5Iqtu_jg9eKBQTMibBxz3WR9o7tcJnuQ,42089
71
+ pyosis/section/numeric.py,sha256=SuemnORk3Ji-mLE5w0I4C2peD4i2ITTlaUCrMpq6W_E,1489
72
+ pyosis/section/param.py,sha256=cSjeZn8D_T7qe8u5m0tx1cwROb65k8L4DFEC6lWxJM4,4509
73
+ pyosis/section/rebar.py,sha256=Or27mN62HgZNfpwPEYM1te-uLThB1hj_IFbU6aY4uCI,7294
74
+ pyosis/section/rib.py,sha256=JeeCOI_ejDmwzBPq2EizILf1MDS4v_oQ6SbsEoAIX_g,8355
75
+ pyosis/section/steel.py,sha256=Kd0SNEsSZuG65jb7ZDTD3TMa466aT9Pd2EVIn4Ia_RQ,14939
76
+ pyosis/settlement/__init__.py,sha256=ymo2j5VPhWP9ydyXBp8yl72E0BgJwzftSUzkXeMYXR4,162
77
+ pyosis/settlement/interface.py,sha256=gZTEBJnQl5I1DTXau0ne0ejYxvp-vNBYlPb5b6Gn7j8,3818
78
+ pyosis/settlement/manager.py,sha256=CrVTVHrDkYXuS3PiwkHqAmLwI0BZUcK3XPvYvcP-tME,12836
79
+ pyosis/stability/__init__.py,sha256=CyHVHaFyAyhEQZSRjZgcTk0E7KsW_dn6SGB4BVCn01w,96
80
+ pyosis/stability/buckling.py,sha256=G7grtwyr4SYM3i0IhCks0wZ_Ar5fHAPcr9ftNtyfXEA,3345
81
+ pyosis/stability/manager.py,sha256=naB4guhkzgiIm7UdIUjeg261de1FaoTyhhsxMoCuFE0,6089
82
+ pyosis/stage/__init__.py,sha256=TrNcvwQKki2SSwFkVsVcDA6EXATXaXRUorxRocn4HX8,94
83
+ pyosis/stage/define.py,sha256=kfUbC_52ap3q48EblvH_DiwYFD5CjuT6AkC1a_Z5QEc,4023
84
+ pyosis/stage/manager.py,sha256=SFL7xrNlUHCZdcg5AkBcWcL5sxhcdrbvSdetEmZJWBo,11545
85
+ pyosis/stage/overall.py,sha256=OS0qbx8SKAN425pPTMetFaX4V-tXEZeTwK3Id5_nLuw,2170
86
+ pyosis/thickness/__init__.py,sha256=YGYmUPc9TvAlw4eFuEjxaG7HjvwLQJelU_Mx2M6RhW0,82
87
+ pyosis/thickness/interface.py,sha256=o9fwAnPtincBvNB7KZ-Cw67V4mSvoMYgcuLqD_FMLs0,1311
88
+ pyosis/thickness/manager.py,sha256=LyOvcigsg9SyUQLXTfgPhXS7_z0XIwbGREMnWFAdkbU,2098
89
+ osis_python-0.3.0.dist-info/METADATA,sha256=a-dn13F6RwibCRuOAMJmbkUooFXxwMAMr1IKjXXQZ9c,9617
90
+ osis_python-0.3.0.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
91
+ osis_python-0.3.0.dist-info/top_level.txt,sha256=6VDNySkQKwipRXcN8ayKVci4vAXi4oPyWLqFhNVcIfM,7
92
+ osis_python-0.3.0.dist-info/RECORD,,
pyosis/__init__.py CHANGED
@@ -7,7 +7,7 @@ A library for extending OSIS functionality.
7
7
  A library that allows users to use CAE with great flexibility.
8
8
  """
9
9
 
10
- __version__ = "0.2.2"
10
+ __version__ = "0.3.0"
11
11
  __author__ = "CCCC Highway Consultant Co. Ltd." # 中交公路规划设计院 - 工程技术研究中心 - lzh - wjh - myf
12
12
 
13
13
  # from .core import engine
@@ -3,5 +3,5 @@ pyosis.boundary 的 Docstring
3
3
 
4
4
  '''
5
5
 
6
-
7
- from .interface import *
6
+ from .interface import *
7
+ from .manager import boundary_manager
@@ -44,6 +44,68 @@ def osis_boundary_general(nBd: int, eBoundaryType: Literal["GENERAL"]="GENERAL",
44
44
  tuple (bool, str): 是否成功,失败原因
45
45
  '''
46
46
  pass
47
+
48
+ @REGISTRY.register("Boundary")
49
+ def osis_boundary_master_slave(nBd: int, eBoundaryType: Literal["MSTSLV"]="MSTSLV", nNode: int = 1, bX: bool = 1, bY: bool = 1, bZ: bool = 1, bRX: bool = 1, bRY: bool = 1, bRZ: bool = 1):
50
+ '''
51
+ ## 定义或修改主从约束
52
+ pyosis.boundary.osis_boundary_master_slave
53
+
54
+ Args:
55
+ nBd (int): 编号
56
+ eBoundaryType (str): 固定为 MSTSLV
57
+ nNode (int): 主节点编号
58
+ bDX (bool): 0 = 释放,1 = 约束
59
+ bDY (bool): 0 = 释放,1 = 约束
60
+ bDZ (bool): 0 = 释放,1 = 约束
61
+ bRX (bool): 0 = 释放,1 = 约束
62
+ bRY (bool): 0 = 释放,1 = 约束
63
+ bRZ (bool): 0 = 释放,1 = 约束
64
+ Returns:
65
+ tuple (bool, str): 是否成功,失败原因
66
+ '''
67
+ pass
68
+
69
+ @REGISTRY.register("Boundary")
70
+ def osis_boundary_rigid(nBd: int, eBoundaryType: Literal["RIGID"], nNodeI: int):
71
+ '''
72
+ ## 定义或修改主从约束
73
+
74
+ Args:
75
+ nBd (int): 编号
76
+ eBoundaryType (str): 固定为 RIGID
77
+ nNodeI (int): 节点1编号
78
+
79
+ Notes: 用于形成刚性区域的节点号nodeJ, nodeK, ... , nodeL由osis_assign_boundary定义
80
+
81
+ Returns:
82
+ tuple (bool, str): 是否成功,失败原因
83
+ '''
84
+ pass
85
+
86
+ @REGISTRY.register("Boundary")
87
+ def osis_boundary_release(nBd: int, eBoundaryType: Literal["RELEASE"],
88
+ Fxi_state: bool, Fyi_state: bool, Fzi_state: bool, Mxi_state: bool, Myi_state: bool, Mzi_state: bool, Mbi_state: bool,
89
+ Fxi: float, Fyi: float, Fzi: float, Mxi: float, Myi: float, Mzi: float, Mbi: float,
90
+ Fxj_state: bool, Fyj_state: bool, Fzj_state: bool, Mxj_state: bool, Myj_state: bool, Mzj_state: bool, Mbj_state: bool,
91
+ Fxj: float, Fyj: float, Fzj: float, Mxj: float, Myj: float, Mzj: float, Mbj: float):
92
+ '''
93
+ ## 定义或修改释放梁端约束
94
+ pyosis.boundary.osis_boundary_release
95
+
96
+ Args:
97
+ nBd (int): 编号
98
+ eBoundaryType (str): 固定为 MSTSLV
99
+ \\*_state (bool):
100
+ * 0 = 释放
101
+ * 1 = 约束
102
+ F\\*i and M\\*i (float): 部分约束的大小,0-1之间,表示释放后残余的约束能力的百分比
103
+ Returns:
104
+ tuple (bool, str): 是否成功,失败原因
105
+ '''
106
+ pass
107
+
108
+
47
109
  @REGISTRY.register("Boundary")
48
110
  def osis_boundary_elstcspt(nBd: int, eBoundaryType: Literal["ELSTCSPT"]="ELSTCSPT", nCoor: int = "", bX: bool = 1, DX: int = 1e13, bY: bool = 1, DY: int = 1e13, bZ: bool = 1, DZ: int = 1e13, bRX: bool = 1, RX: int = 1e16, bRY: bool = 1, RY: int = 1e16, bRZ: bool = 1, RZ: int = 1e16):
49
111
  '''
@@ -71,70 +133,73 @@ def osis_boundary_elstcspt(nBd: int, eBoundaryType: Literal["ELSTCSPT"]="ELSTCSP
71
133
  '''
72
134
  pass
73
135
 
74
-
75
136
  @REGISTRY.register("Boundary")
76
- def osis_boundary_master_slave(nBd: int, eBoundaryType: Literal["MSTSLV"]="MSTSLV", nNode: int = 1, bX: bool = 1, bY: bool = 1, bZ: bool = 1, bRX: bool = 1, bRY: bool = 1, bRZ: bool = 1):
137
+ def osis_boundary_general_elstcspt(
138
+ nBd: int,
139
+ eBoundaryType: Literal["GES"],
140
+ nCoor: int | str,
141
+ *params: float,
142
+ ):
77
143
  '''
78
- ## 定义或修改主从约束
79
- pyosis.boundary.osis_boundary_master_slave
144
+ ## 定义或修改一般弹性支承
80
145
 
81
146
  Args:
82
147
  nBd (int): 编号
83
- eBoundaryType (str): 固定为 MSTSLV
84
- nNode (int): 主节点编号
85
- bDX (bool): 0 = 释放,1 = 约束
86
- bDY (bool): 0 = 释放,1 = 约束
87
- bDZ (bool): 0 = 释放,1 = 约束
88
- bRX (bool): 0 = 释放,1 = 约束
89
- bRY (bool): 0 = 释放,1 = 约束
90
- bRZ (bool): 0 = 释放,1 = 约束
148
+ eBoundaryType (str): 固定为 GES
149
+ nCoor (int | str): 局部坐标系编号,"" 代表缺省
150
+ *params (float): 变长参数序列,按以下顺序排列:
151
+ K11,K12,K13,K14,K15,K16,
152
+ K22,K23,K24,K25,K26,
153
+ K33,K34,K35,K36,
154
+ K44,K45,K46,
155
+ K55,K56,
156
+ K66,
157
+ bM,
158
+ [M11,M12,...,M66(当bM=1时)],
159
+ bC,
160
+ [C11,C12,...,C66(当bC=1时)]
161
+ 其中 Kij/Mij/Cij 为上三角矩阵元素,必须全部给出。
162
+ bM/bC: 0=不考虑,1=考虑
163
+
91
164
  Returns:
92
165
  tuple (bool, str): 是否成功,失败原因
93
166
  '''
94
167
  pass
95
168
 
169
+
96
170
  @REGISTRY.register("Boundary")
97
- def osis_boundary_release(nBd: int, eBoundaryType: Literal["RELEASE"],
98
- Fxi_state: bool, Fyi_state: bool, Fzi_state: bool, Mxi_state: bool, Myi_state: bool, Mzi_state: bool, Mbi_state: bool,
99
- Fxi: float, Fyi: float, Fzi: float, Mxi: float, Myi: float, Mzi: float, Mbi: float,
100
- Fxj_state: bool, Fyj_state: bool, Fzj_state: bool, Mxj_state: bool, Myj_state: bool, Mzj_state: bool, Mbj_state: bool,
101
- Fxj: float, Fyj: float, Fzj: float, Mxj: float, Myj: float, Mzj: float, Mbj: float):
171
+ def osis_boundary_section_factor(
172
+ nBd: int,
173
+ eBoundaryType: Literal["SECF"],
174
+ Area: float,
175
+ Sy: float,
176
+ Sz: float,
177
+ Ixx: float,
178
+ Iyy: float,
179
+ Izz: float,
180
+ Iww: float,
181
+ W: float,
182
+ ):
102
183
  '''
103
- ## 定义或修改释放梁端约束
104
- pyosis.boundary.osis_boundary_release
184
+ ## 修改截面特性
105
185
 
106
186
  Args:
107
- nBd (int): 编号
108
- eBoundaryType (str): 固定为 MSTSLV
109
- \\*_state (bool):
110
- * 0 = 释放
111
- * 1 = 约束
112
- F\\*i and M\\*i (float): 部分约束的大小,0-1之间,表示释放后残余的约束能力的百分比
187
+ nBd (int): 边界编号
188
+ eBoundaryType (str): 固定为 SECF
189
+ Area (float): 面积调整系数
190
+ Sy (float): Y向剪切常数调整系数
191
+ Sz (float): Z向剪切常数调整系数
192
+ Ixx (float): X轴抗扭惯性矩调整系数
193
+ Iyy (float): Y轴抗弯惯性矩调整系数
194
+ Izz (float): Z轴抗弯惯性矩调整系数
195
+ Iww (float): 翘曲惯性矩调整系数
196
+ W (float): 自重调整系数
197
+
113
198
  Returns:
114
199
  tuple (bool, str): 是否成功,失败原因
115
200
  '''
116
201
  pass
117
202
 
118
- # @REGISTRY.register("Boundary")
119
- # def osis_boundary_elastic_support(nBd: int, eBoundaryType: Literal["ELSTCSPT"], nCoor: int, bX: float, bY: float, bZ: float, bRX: float, bRY: float, bRZ: float):
120
- # '''
121
- # ## 定义或修改节点弹性支撑
122
- # pyosis.boundary.osis_boundary_elastic_support
123
-
124
- # Args:
125
- # nBd (int): 编号
126
- # eBoundaryType (str): 固定为 ELSTCSPT
127
- # nCoor (int): 局部坐标系编号
128
- # dDX (float): 坐标系 X 轴方向的弹性支承刚度
129
- # dDY (float): 坐标系 Y 轴方向的弹性支承刚度
130
- # dDZ (float): 坐标系 Z 轴方向的弹性支承刚度
131
- # dRX (float): 绕坐标系 X 轴方向的转动弹性刚度
132
- # dRY (float): 绕坐标系 Y 轴方向的转动弹性刚度
133
- # dRZ (float): 绕坐标系 Z 轴方向的转动弹性刚度
134
- # Returns:
135
- # tuple (bool, str): 是否成功,失败原因
136
- # '''
137
- # pass
138
203
 
139
204
  @REGISTRY.register("AsgnBd")
140
205
  def osis_assign_boundary(nBd: int=1, eOP: Literal["a", "s", "r", "aa", "ra"]="a", param: list=[]):
@@ -183,7 +248,7 @@ def osis_boundary_group(strName: str, eOP: Literal["c", "a", "s", "r", "aa", "ra
183
248
  pass
184
249
 
185
250
  @REGISTRY.register("BoundaryDel")
186
- def osis_boundary_dle(nIndex:int)->tuple[bool, str]:
251
+ def osis_boundary_del(nIndex:int)->tuple[bool, str]:
187
252
  """
188
253
  删除边界
189
254
  Args: