osis-python 0.2.3__py3-none-any.whl → 0.3.1__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 (100) hide show
  1. osis_python-0.3.1.dist-info/METADATA +367 -0
  2. osis_python-0.3.1.dist-info/RECORD +96 -0
  3. pyosis/__init__.py +1 -1
  4. pyosis/boundary/interface.py +111 -46
  5. pyosis/boundary/manager.py +734 -199
  6. pyosis/control/__init__.py +4 -1
  7. pyosis/control/{interface.py → control.py} +1 -66
  8. pyosis/control/io.py +23 -0
  9. pyosis/control/manager.py +196 -0
  10. pyosis/control/nonlinear.py +71 -0
  11. pyosis/core/all_func.py +9 -4
  12. pyosis/core/client.py +29 -9
  13. pyosis/core/command.py +2 -1
  14. pyosis/core/engine.py +351 -0
  15. pyosis/dynamic/__init__.py +12 -0
  16. pyosis/dynamic/load_to_mass.py +108 -0
  17. pyosis/dynamic/manager.py +347 -0
  18. pyosis/dynamic/modal.py +28 -0
  19. pyosis/dynamic/seismic.py +195 -0
  20. pyosis/element/__init__.py +1 -1
  21. pyosis/element/interface.py +1 -17
  22. pyosis/element/manager.py +419 -223
  23. pyosis/general/interface.py +136 -1
  24. pyosis/geometry/__init__.py +2 -1
  25. pyosis/geometry/interface.py +4 -4
  26. pyosis/geometry/manager.py +321 -0
  27. pyosis/live/__init__.py +1 -8
  28. pyosis/live/analysis.py +17 -18
  29. pyosis/live/lane.py +1 -1
  30. pyosis/live/manager.py +692 -359
  31. pyosis/load/__init__.py +1 -1
  32. pyosis/load/manager.py +1276 -218
  33. pyosis/load/static.py +68 -19
  34. pyosis/load/tendon.py +46 -41
  35. pyosis/material/__init__.py +1 -1
  36. pyosis/material/manager.py +121 -85
  37. pyosis/node/__init__.py +1 -1
  38. pyosis/node/manager.py +84 -90
  39. pyosis/post/__init__.py +4 -1
  40. pyosis/post/combine.py +113 -58
  41. pyosis/post/design_check.py +362 -0
  42. pyosis/post/display.py +76 -0
  43. pyosis/post/manager.py +557 -0
  44. pyosis/project/__init__.py +2 -0
  45. pyosis/project/interface.py +64 -0
  46. pyosis/project/manager.py +101 -0
  47. pyosis/property/__init__.py +3 -1
  48. pyosis/property/{comp_thickness.py → component_thickness.py} +3 -3
  49. pyosis/property/coordinate.py +4 -4
  50. pyosis/property/damping.py +88 -0
  51. pyosis/property/manager.py +284 -0
  52. pyosis/result/__init__.py +2 -1
  53. pyosis/result/check.py +4 -4
  54. pyosis/result/env.py +1 -1
  55. pyosis/result/loadcase.py +1 -1
  56. pyosis/result/manager.py +272 -0
  57. pyosis/result/result.py +3 -3
  58. pyosis/section/__init__.py +1 -1
  59. pyosis/section/manager.py +816 -780
  60. pyosis/section/numeric.py +2 -2
  61. pyosis/section/param.py +44 -6
  62. pyosis/section/rebar.py +1 -1
  63. pyosis/section/rib.py +31 -0
  64. pyosis/settlement/__init__.py +8 -0
  65. pyosis/settlement/interface.py +150 -0
  66. pyosis/settlement/manager.py +368 -0
  67. pyosis/stability/__init__.py +2 -0
  68. pyosis/stability/buckling.py +112 -0
  69. pyosis/stability/manager.py +175 -0
  70. pyosis/stage/__init__.py +1 -1
  71. pyosis/stage/define.py +18 -18
  72. pyosis/stage/manager.py +201 -190
  73. pyosis/stage/overall.py +6 -6
  74. pyosis/thickness/__init__.py +2 -1
  75. pyosis/thickness/interface.py +3 -3
  76. pyosis/thickness/manager.py +76 -0
  77. pyosis/transfer/__init__.py +50 -0
  78. pyosis/transfer/command_map.py +695 -0
  79. pyosis/transfer/generator.py +366 -0
  80. pyosis/transfer/parser.py +150 -0
  81. osis_python-0.2.3.dist-info/METADATA +0 -111
  82. osis_python-0.2.3.dist-info/RECORD +0 -82
  83. pyosis/common/__init__.py +0 -2
  84. pyosis/common/interface.py +0 -110
  85. pyosis/common/project.py +0 -54
  86. pyosis/core/PyInterface.pyi +0 -157
  87. pyosis/io/__init__.py +0 -11
  88. pyosis/io/boundary_info.py +0 -239
  89. pyosis/io/coordinate.py +0 -98
  90. pyosis/io/element_info.py +0 -489
  91. pyosis/io/group_info.py +0 -82
  92. pyosis/io/material_info.py +0 -39
  93. pyosis/io/node_info.py +0 -192
  94. pyosis/io/prestressed_info.py +0 -170
  95. pyosis/io/response.py +0 -135
  96. pyosis/io/section_info.py +0 -162
  97. pyosis/io/stage_info.py +0 -187
  98. {osis_python-0.2.3.dist-info → osis_python-0.3.1.dist-info}/WHEEL +0 -0
  99. {osis_python-0.2.3.dist-info → osis_python-0.3.1.dist-info}/licenses/LICENSE +0 -0
  100. {osis_python-0.2.3.dist-info → osis_python-0.3.1.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,367 @@
1
+ Metadata-Version: 2.4
2
+ Name: osis-python
3
+ Version: 0.3.1
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. Engine Convenience Methods
106
+
107
+ `OSISEngine` provides project-level convenience methods:
108
+
109
+ ```python
110
+ # Project management
111
+ engine.new_project() # Create new project
112
+ engine.save_project() # Save current project
113
+ engine.open_project(path) # Open existing project
114
+
115
+ # Model information
116
+ summary = engine.model_summary() # Returns dict with all manager counts
117
+
118
+ # Import/Export
119
+ engine.export_apdl(path) # Export to APDL format
120
+ engine.import_apdl(path) # Import from APDL format
121
+
122
+ # Result output for calculation book
123
+ engine.output_result_for_calc_book()
124
+
125
+ # Matrix output
126
+ engine.matrix("matrix_1", [[1, 2],[3, 4]])
127
+ ```
128
+
129
+ ### 3. Using Managers Directly
130
+
131
+ If you don't need the convenience methods of Engine, you can also import individual managers directly:
132
+
133
+ ```python
134
+ from pyosis.material import material_manager
135
+ from pyosis.node import node_manager
136
+
137
+ mat = material_manager.create_conc("C30", eCode="JTG3362_2018", eGrade="C30")
138
+ node = node_manager.create(0, 0, 0)
139
+ ```
140
+
141
+ ## Core Architecture
142
+
143
+ ### Manager System
144
+
145
+ pyosis adopts a Manager pattern to organize code. Each module corresponds to a Manager:
146
+
147
+ | Manager | Attribute | Description |
148
+ |---------|-----------|-------------|
149
+ | MaterialManager | `engine.material` | Materials (concrete, steel, prestressed, rebar, etc.) |
150
+ | SectionManager | `engine.section` | Sections (box girder, T-girder, hollow slab, steel box, etc.) |
151
+ | NodeManager | `engine.node` | Nodes |
152
+ | ElementManager | `engine.element` | Elements (beam, truss, spring, cable, shell) |
153
+ | BoundaryManager | `engine.boundary` | Boundaries (general support, master-slave, elastic support, etc.) |
154
+ | GeometryManager | `engine.geometry` | Geometric entities (splines, spatial curves) |
155
+ | PropertyManager | `engine.prop` | Properties (coordinate systems, creep/shrinkage, damping, P-U curves, element thickness assignments) |
156
+ | ThicknessManager | `engine.thickness` | Shell thickness properties |
157
+ | LoadCaseManager | `engine.load` | Load cases |
158
+ | StageManager | `engine.stage` | Construction stages |
159
+ | TendonManager | `engine.tendon` | Tendons (properties + shapes) |
160
+ | LiveManager | `engine.live` | Live loads (grades + lanes + cases) |
161
+ | SettlementManager | `engine.settlement` | Settlement analysis |
162
+ | StabilityManager | `engine.stability` | Stability analysis |
163
+ | DynamicManager | `engine.dynamic` | Dynamic analysis |
164
+ | PostManager | `engine.post` | Post-processing (load combinations, design checks) |
165
+ | ResultManager | `engine.result` | Result export (load case / envelope / check results) |
166
+ | ControlManager | `engine.control` | Global control parameters |
167
+ | ProjectManager | `engine.project` | Project operations |
168
+
169
+ ### Sub-Managers
170
+
171
+ Some managers contain sub-managers, accessed via attributes:
172
+
173
+ ```python
174
+ # Element groups
175
+ grp = engine.element.group.create("Main Girder Elements")
176
+ grp.add([1, 2, 3])
177
+
178
+ # Boundary groups
179
+ bg = engine.boundary.group.create("Abutment Boundaries")
180
+ bg.add([1, 2])
181
+
182
+ # Various boundary types
183
+ engine.boundary.create_general(bX=1, bY=1, bZ=1, bRX=1, bRY=1, bRZ=1) # General support
184
+ engine.boundary.create_master_slave(nMast=1, nSlav=2, dDir=1) # Master-slave
185
+ engine.boundary.create_release(nElem=1, iReleaseEnd=2) # End release
186
+ engine.boundary.create_elstcspt(nNode=1, dK=[1e9, 1e9, 1e9, 0, 0, 0]) # Elastic support
187
+ engine.boundary.create_general_elstcspt(nNode=1, bX=1, bY=1, bZ=1, dKx=1e9, dKy=1e9, dKz=1e9) # General elastic
188
+ engine.boundary.create_rigid(nNode1=1, nNode2=2) # Rigid link
189
+ engine.boundary.create_section_factor(nElem=1, iEnd=1) # Section factor
190
+
191
+ # Tendons
192
+ prop = engine.tendon.prop.create_in(
193
+ "15-10", mat_no=1, e_code="GBT5224_2014",
194
+ diameter=15.2, n_num=10, d_pipe=0.09
195
+ )
196
+ shape = engine.tendon.shape.create_arc3d(
197
+ "N1", n_num=2, prop="15-10",
198
+ element_group="Main Girder Elements", curve_name="curve1"
199
+ )
200
+
201
+ # Live loads
202
+ grade = engine.live.grade.create("Highway-Class I")
203
+ lane = engine.live.lane.create("Lane 1")
204
+ case = engine.live.case.create("Live Load Case 1")
205
+ ```
206
+
207
+ ### Property & Thickness Management
208
+
209
+ ```python
210
+ # Coordinate systems
211
+ engine.prop.coord.create_local("CS1", origin=[0, 0, 0], x_axis=[1, 0, 0], y_axis=[0, 1, 0])
212
+
213
+ # Creep and shrinkage
214
+ engine.prop.creep_shrink.create("Creep1", eCode="JTG3362_2018", eGrade="C30")
215
+
216
+ # Damping
217
+ engine.prop.damping.create("Damping1", dDmp=0.05)
218
+
219
+ # P-U curve (for soil-structure interaction)
220
+ engine.prop.pu_curve.create("PU1", data=[(0, 0), (0.01, 1000), (0.02, 1500)])
221
+
222
+ # Element thickness assignment
223
+ engine.prop.thickness.assign_element(nElem=1, dThick=0.3)
224
+
225
+ # Shell thickness properties
226
+ engine.thickness.create_uniform("Thick1", dThick=0.3)
227
+ engine.thickness.create_tapered("Thick2", dThick1=0.2, dThick2=0.4)
228
+ ```
229
+
230
+ ### Geometry Queries
231
+
232
+ The `GeometryManager` supports querying geometric entities:
233
+
234
+ ```python
235
+ # Get all splines
236
+ splines = engine.geometry.all("spline")
237
+
238
+ # Get a specific spline
239
+ spline = engine.geometry.get("spline", name="curve1")
240
+
241
+ # Filter by type
242
+ arcs = engine.geometry.filter("spline", spline_type="ARC3D")
243
+ ```
244
+
245
+ ### Data Class Objects
246
+
247
+ Create and query operations return data class objects (dataclass) instead of raw dictionaries:
248
+
249
+ ```python
250
+ elem = engine.element.get(1)
251
+ print(elem.no) # ID
252
+ print(elem.node_vec) # Node list
253
+ print(elem.mat) # Material ID
254
+
255
+ # Objects support operations (operations下沉 to object)
256
+ lc = engine.load.get("Self-weight")
257
+ lc.create_gravity()
258
+ lc.create_nforce(1, dFx=1000)
259
+ ```
260
+
261
+ ### Explicit Numbering
262
+
263
+ Some `create_*` functions support explicit numbering via the `no` parameter. If not specified, the number is automatically assigned:
264
+
265
+ ```python
266
+ # Auto-assigned number
267
+ sec = engine.section.create_circle("Section 1", d=0.5)
268
+
269
+ # Explicit number
270
+ sec = engine.section.create_circle("Section 1", d=0.5, no=100)
271
+ ```
272
+
273
+ ## Result Export
274
+
275
+ After solving, you can export various analysis results using `engine.result`. All export methods return pandas DataFrames:
276
+
277
+ ```python
278
+ # Export load case results (element forces)
279
+ df = engine.result.loadcase("Self-weight", "LCEF")
280
+
281
+ # Export envelope results (element forces)
282
+ df = engine.result.env("Basic Combination Envelope", "EnvEF")
283
+
284
+ # Export design check results
285
+ df = engine.result.check(
286
+ "混凝土", "正截面抗弯验算", "Basic Combination"
287
+ )
288
+
289
+ # Batch export all check results from Check folder
290
+ results = engine.result.check_all()
291
+ for name, df in results.items():
292
+ print(f"{name}: {len(df)} rows")
293
+ ```
294
+
295
+ Supported result types:
296
+ - **Load case**: `LCEF` (element force), `LCED` (element displacement), `LCND` (node displacement), `LCBF` (boundary reaction), `LCTL` (tendon loss), `LCS` (element stress)
297
+ - **Envelope**: `EnvBF` (boundary reaction), `EnvEF` (element force), `EnvES` (element strain), `EnvS` (element stress), `EnvND` (node displacement)
298
+
299
+ Requires `pandas` to be installed: `pip install pandas`
300
+
301
+ ## Complete Example
302
+
303
+ ```python
304
+ from pyosis.core.engine import OSISEngine
305
+
306
+ engine = OSISEngine()
307
+ engine.clear()
308
+
309
+ # Control parameters
310
+ engine.control.set_gravity_acceleration(9.8066)
311
+ engine.control.set_calc_tendon(True)
312
+ engine.control.set_calc_concurrent_force(True)
313
+ engine.control.set_calc_shrink(True)
314
+ engine.control.set_calc_creep(True)
315
+ engine.control.set_calc_shear(True)
316
+ engine.control.set_calc_relaxation(True)
317
+ engine.control.set_mod_loc_coor(False)
318
+ engine.control.set_inc_tendon(True)
319
+ engine.control.set_nonlinear(geom=False, link=False)
320
+
321
+ # Sections
322
+ engine.section.create_circle("Circle Section 1", d=0.219, tw=0.012, no=1)
323
+ engine.section.create_circle("Circle Section 2", d=0.180, tw=0.008, no=2)
324
+
325
+ # Materials
326
+ engine.material.create_steel(
327
+ "Steel 1", eCode="JTGD64_2015", eGrade="Q345", dDmp=0.05, no=1
328
+ )
329
+
330
+ # Nodes
331
+ engine.node.create(0, 5, 0, no=1)
332
+ engine.node.create(15, 5, 0, no=2)
333
+ engine.node.create(7.5, 0, 0, no=3)
334
+ engine.node.create(20, 0, 0, no=4)
335
+
336
+ # Elements
337
+ engine.element.create_beam3d(1, 3, nMat=1, nSec1=1, nSec2=1, no=1)
338
+ engine.element.create_beam3d(2, 3, nMat=1, nSec1=2, nSec2=2, no=2)
339
+
340
+ # Boundaries
341
+ engine.boundary.create_general(no=1)
342
+ engine.boundary.get(1).assign("a", [1, 2])
343
+
344
+ # Loads
345
+ lc = engine.load.create(
346
+ "Custom Load Case 1",
347
+ load_case_type="USER",
348
+ prompt="Two forces applied at nodes 3 and 4"
349
+ )
350
+ lc.create_nforce(3, dFx=0, dFy=-1000000, dFz=0)
351
+ lc.create_nforce(4, dFx=200000, dFy=0, dFz=0)
352
+
353
+ # Solve
354
+ engine.solve()
355
+ ```
356
+
357
+ ## Important Notes
358
+
359
+ 1. **OSIS must be running**: Before executing code, ensure the OSIS software is launched and logged in. pyosis communicates with OSIS via HTTP.
360
+ 2. **Exception handling**: All operations throw `RuntimeError` on failure. It is recommended to add exception handling in production code.
361
+ 3. **Stateless design**: Managers do not cache data. Every query method (`all()`, `get()`, `filter()`) fetches fresh data from OSIS via HTTP. This ensures consistency but incurs network overhead. Cache results locally when iterating in loops.
362
+ 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).
363
+
364
+ ## More Resources
365
+
366
+ - [tests/](tests/): Example code for each module
367
+ - [templetes/](templetes/): Complete bridge modeling template projects
@@ -0,0 +1,96 @@
1
+ osis_python-0.3.1.dist-info/licenses/LICENSE,sha256=T4mkSYliXdU9mYe-NfHkqg6GPhzoYaIQO_a630UzpS4,1088
2
+ pyosis/__init__.py,sha256=gPTEgq6LnbIxzHtYdwaI_Evtco7qZUBt1U45-qbkh54,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=TpbM1ArLgZiB5EN-5hmixsPvZUniumvQez-B18J6NKU,29461
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=fy2HIqE25gW3ccDVlKwTQOZYj3TNpUqrB_d8Bi3ebYw,12485
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=wW47aeB2O4uNduOHiq_N5NC7FDHi7caazoXqPhmxZm4,34749
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
+ pyosis/transfer/__init__.py,sha256=FEVJCH6gqkG8ynZ3hg8SWeAqwhFg09KQ9gPmavlqJs4,1018
90
+ pyosis/transfer/command_map.py,sha256=wagWC3W7gZYS6NIY_TRxzyBmKZBMXhBvVZzwAEa7aoU,25089
91
+ pyosis/transfer/generator.py,sha256=r5A6iEZqYkL5JcVQTdegpqig-k3YIF6XxNqGBjwStsQ,14698
92
+ pyosis/transfer/parser.py,sha256=mRD4icsM-REf74VRGB88g_jrSyOD8Q40fAjWnZ-E6zw,4541
93
+ osis_python-0.3.1.dist-info/METADATA,sha256=MnNQ-DU8ULkMiy9wAn1RaUr6CbYDLWD82di4intDVjk,12160
94
+ osis_python-0.3.1.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
95
+ osis_python-0.3.1.dist-info/top_level.txt,sha256=6VDNySkQKwipRXcN8ayKVci4vAXi4oPyWLqFhNVcIfM,7
96
+ osis_python-0.3.1.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.3"
10
+ __version__ = "0.3.1"
11
11
  __author__ = "CCCC Highway Consultant Co. Ltd." # 中交公路规划设计院 - 工程技术研究中心 - lzh - wjh - myf
12
12
 
13
13
  # from .core import engine
@@ -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: