midas-civil 1.0.3__py3-none-any.whl → 1.0.5__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.
Potentially problematic release.
This version of midas-civil might be problematic. Click here for more details.
- midas_civil/__init__.py +17 -11
- midas_civil/_analysiscontrol.py +585 -0
- midas_civil/_element.py +81 -17
- midas_civil/_group.py +3 -3
- midas_civil/_mapi.py +28 -7
- midas_civil/_model.py +1 -0
- midas_civil/_node.py +142 -33
- midas_civil/_section/__init__.py +361 -0
- midas_civil/_section/_compositeSS.py +283 -0
- midas_civil/_section/_dbSecSS.py +43 -0
- midas_civil/_section/_offsetSS.py +53 -0
- midas_civil/_section/_pscSS.py +425 -0
- midas_civil/_section/_unSupp.py +58 -0
- {midas_civil-1.0.3.dist-info → midas_civil-1.0.5.dist-info}/METADATA +1 -1
- midas_civil-1.0.5.dist-info/RECORD +33 -0
- midas_civil/_section.py +0 -994
- midas_civil-1.0.3.dist-info/RECORD +0 -27
- {midas_civil-1.0.3.dist-info → midas_civil-1.0.5.dist-info}/WHEEL +0 -0
- {midas_civil-1.0.3.dist-info → midas_civil-1.0.5.dist-info}/licenses/LICENSE +0 -0
- {midas_civil-1.0.3.dist-info → midas_civil-1.0.5.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,361 @@
|
|
|
1
|
+
print('Section MODULE LOADED...')
|
|
2
|
+
|
|
3
|
+
from ._pscSS import SS_PSC_12CELL,SS_PSC_I,SS_PSC_Value
|
|
4
|
+
from ._dbSecSS import SS_DBUSER
|
|
5
|
+
from ._offsetSS import Offset
|
|
6
|
+
from ._unSupp import SS_UNSUPP,SS_STD_DB
|
|
7
|
+
from ._compositeSS import SS_COMP_PSC_I,SS_COMP_STEEL_I_TYPE1
|
|
8
|
+
|
|
9
|
+
from midas_civil import MidasAPI
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class _helperSECTION:
|
|
13
|
+
NAME, SHAPE, TYPE, OFFSET, USESHEAR, USE7DOF = 0,0,0,0,0,0
|
|
14
|
+
def update():
|
|
15
|
+
pass
|
|
16
|
+
def toJSON():
|
|
17
|
+
pass
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def _SectionADD(self):
|
|
21
|
+
# Commom HERE ---------------------------------------------
|
|
22
|
+
id = int(self.ID)
|
|
23
|
+
if Section.ids == []:
|
|
24
|
+
count = 1
|
|
25
|
+
else:
|
|
26
|
+
count = max(Section.ids)+1
|
|
27
|
+
|
|
28
|
+
if id==0 :
|
|
29
|
+
self.ID = count
|
|
30
|
+
Section.sect.append(self)
|
|
31
|
+
Section.ids.append(int(self.ID))
|
|
32
|
+
elif id in Section.ids:
|
|
33
|
+
self.ID=int(id)
|
|
34
|
+
print(f'⚠️ Section with ID {id} already exist! It will be replaced.')
|
|
35
|
+
index=Section.ids.index(id)
|
|
36
|
+
Section.sect[index]=self
|
|
37
|
+
else:
|
|
38
|
+
self.ID=id
|
|
39
|
+
Section.sect.append(self)
|
|
40
|
+
Section.ids.append(int(self.ID))
|
|
41
|
+
# Common END -------------------------------------------------------
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def off_JS2Obj(js):
|
|
46
|
+
|
|
47
|
+
try: OffsetPoint = js['OFFSET_PT']
|
|
48
|
+
except: OffsetPoint='CC'
|
|
49
|
+
try: CenterLocation = js['OFFSET_CENTER']
|
|
50
|
+
except: CenterLocation=0
|
|
51
|
+
try: HOffset = js['USERDEF_OFFSET_YI']
|
|
52
|
+
except: HOffset=0
|
|
53
|
+
try: HOffOpt = js['HORZ_OFFSET_OPT']
|
|
54
|
+
except: HOffOpt=0
|
|
55
|
+
try: VOffOpt = js['VERT_OFFSET_OPT']
|
|
56
|
+
except: VOffOpt=0
|
|
57
|
+
try: VOffset = js['USERDEF_OFFSET_ZI']
|
|
58
|
+
except: VOffset=0
|
|
59
|
+
try: UsrOffOpt = js['USER_OFFSET_REF']
|
|
60
|
+
except: UsrOffOpt=0
|
|
61
|
+
|
|
62
|
+
return Offset(OffsetPoint,CenterLocation,HOffset,HOffOpt,VOffset,VOffOpt,UsrOffOpt)
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
# ------------------- FUNCTION TO CREATE OBJECT used in ELEMENT SYNC --------------------------
|
|
67
|
+
def _JS2OBJ(id,js):
|
|
68
|
+
name = js['SECT_NAME']
|
|
69
|
+
type = js['SECTTYPE']
|
|
70
|
+
shape = js['SECT_BEFORE']['SHAPE']
|
|
71
|
+
offset = off_JS2Obj(js['SECT_BEFORE'])
|
|
72
|
+
uShear = js['SECT_BEFORE']['USE_SHEAR_DEFORM']
|
|
73
|
+
u7DOF = js['SECT_BEFORE']['USE_WARPING_EFFECT']
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
if type == 'DBUSER':
|
|
77
|
+
if js['SECT_BEFORE']['DATATYPE'] ==2: obj = SS_DBUSER._objectify(id,name,type,shape,offset,uShear,u7DOF,js)
|
|
78
|
+
else: obj = SS_STD_DB(id,name,type,shape,offset,uShear,u7DOF,js)
|
|
79
|
+
|
|
80
|
+
elif type == 'PSC' :
|
|
81
|
+
if shape in ['1CEL','2CEL']: obj = SS_PSC_12CELL._objectify(id,name,type,shape,offset,uShear,u7DOF,js)
|
|
82
|
+
elif shape in ['PSCI']: obj = SS_PSC_I._objectify(id,name,type,shape,offset,uShear,u7DOF,js)
|
|
83
|
+
elif shape in ['VALU']: obj = SS_PSC_Value._objectify(id,name,type,shape,offset,uShear,u7DOF,js)
|
|
84
|
+
else: obj = SS_UNSUPP(id,name,type,shape,offset,uShear,u7DOF,js)
|
|
85
|
+
|
|
86
|
+
elif type == 'COMPOSITE':
|
|
87
|
+
if shape in ['CI']: obj = SS_COMP_PSC_I._objectify(id,name,type,shape,offset,uShear,u7DOF,js)
|
|
88
|
+
elif shape in ['I']: obj = SS_COMP_STEEL_I_TYPE1._objectify(id,name,type,shape,offset,uShear,u7DOF,js)
|
|
89
|
+
else: obj = SS_UNSUPP(id,name,type,shape,offset,uShear,u7DOF,js)
|
|
90
|
+
else :
|
|
91
|
+
obj = SS_UNSUPP(id,name,type,shape,offset,uShear,u7DOF,js)
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
_SectionADD(obj)
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
class Section:
|
|
101
|
+
""" NEW Create Sections \n Use Section.USER , Section.PSC to create sections"""
|
|
102
|
+
sect:list[_helperSECTION] = []
|
|
103
|
+
ids:list[int] = []
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
@classmethod
|
|
107
|
+
def json(cls):
|
|
108
|
+
json = {"Assign":{}}
|
|
109
|
+
for sect in cls.sect:
|
|
110
|
+
js = sect.toJSON()
|
|
111
|
+
json["Assign"][sect.ID] = js
|
|
112
|
+
return json
|
|
113
|
+
|
|
114
|
+
@staticmethod
|
|
115
|
+
def create():
|
|
116
|
+
MidasAPI("PUT","/db/SECT",Section.json())
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
@staticmethod
|
|
120
|
+
def get():
|
|
121
|
+
return MidasAPI("GET","/db/SECT")
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
@staticmethod
|
|
125
|
+
def delete():
|
|
126
|
+
MidasAPI("DELETE","/db/SECT")
|
|
127
|
+
Section.sect=[]
|
|
128
|
+
Section.ids=[]
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
@staticmethod
|
|
132
|
+
def sync():
|
|
133
|
+
a = Section.get()
|
|
134
|
+
if a != {'message': ''}:
|
|
135
|
+
Section.sect = []
|
|
136
|
+
Section.ids=[]
|
|
137
|
+
for sect_id in a['SECT'].keys():
|
|
138
|
+
_JS2OBJ(sect_id,a['SECT'][sect_id])
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
#--------------------------------- S E C T I O N S ---------------------------------------------
|
|
142
|
+
|
|
143
|
+
#--------------------- D B U S E R --------------------
|
|
144
|
+
@staticmethod
|
|
145
|
+
def DBUSER(Name='',Shape='',parameters:list=[],Offset=Offset(),useShear=True,use7Dof=False,id:int=0):
|
|
146
|
+
args = locals()
|
|
147
|
+
sect_Obj = SS_DBUSER(**args)
|
|
148
|
+
_SectionADD(sect_Obj)
|
|
149
|
+
return sect_Obj
|
|
150
|
+
|
|
151
|
+
class PSC :
|
|
152
|
+
|
|
153
|
+
@staticmethod
|
|
154
|
+
def CEL12(Name='',Shape='1CEL',Joint=[0,0,0,0,0,0,0,0],
|
|
155
|
+
HO1=0,HO2=0,HO21=0,HO22=0,HO3=0,HO31=0,
|
|
156
|
+
BO1=0,BO11=0,BO12=0,BO2=0,BO21=0,BO3=0,
|
|
157
|
+
HI1=0,HI2=0,HI21=0,HI22=0,HI3=0,HI31=0,HI4=0,HI41=0,HI42=0,HI5=0,
|
|
158
|
+
BI1=0,BI11=0,BI12=0,BI21=0,BI3=0,BI31=0,BI32=0,BI4=0,
|
|
159
|
+
Offset:Offset=Offset.CC(),useShear=True,use7Dof=False,id:int=0):
|
|
160
|
+
args = locals()
|
|
161
|
+
sect_Obj = SS_PSC_12CELL(**args)
|
|
162
|
+
_SectionADD(sect_Obj)
|
|
163
|
+
return sect_Obj
|
|
164
|
+
|
|
165
|
+
@staticmethod
|
|
166
|
+
def I(Name='',Symm = True,Joint=[0,0,0,0,0,0,0,0,0],
|
|
167
|
+
H1=0,
|
|
168
|
+
HL1=0,HL2=0,HL21=0,HL22=0,HL3=0,HL4=0,HL41=0,HL42=0,HL5=0,
|
|
169
|
+
BL1=0,BL2=0,BL21=0,BL22=0,BL4=0,BL41=0,BL42=0,
|
|
170
|
+
HR1=0,HR2=0,HR21=0,HR22=0,HR3=0,HR4=0,HR41=0,HR42=0,HR5=0,
|
|
171
|
+
BR1=0,BR2=0,BR21=0,BR22=0,BR4=0,BR41=0,BR42=0,
|
|
172
|
+
Offset:Offset=Offset.CC(),useShear=True,use7Dof=False,id:int=0):
|
|
173
|
+
|
|
174
|
+
args = locals()
|
|
175
|
+
sect_Obj = SS_COMP_PSC_I(**args)
|
|
176
|
+
|
|
177
|
+
_SectionADD(sect_Obj)
|
|
178
|
+
return sect_Obj
|
|
179
|
+
|
|
180
|
+
@staticmethod
|
|
181
|
+
def Value(Name:str,
|
|
182
|
+
OuterPolygon:list,InnerPolygon:list=[],
|
|
183
|
+
Offset:Offset=Offset.CC(),useShear=True,use7Dof=False,id:int=0):
|
|
184
|
+
|
|
185
|
+
args = locals()
|
|
186
|
+
sect_Obj = SS_PSC_Value(**args)
|
|
187
|
+
|
|
188
|
+
_SectionADD(sect_Obj)
|
|
189
|
+
return sect_Obj
|
|
190
|
+
|
|
191
|
+
|
|
192
|
+
class Composite :
|
|
193
|
+
@staticmethod
|
|
194
|
+
def PSCI(Name='',Symm = True,Joint=[0,0,0,0,0,0,0,0,0],
|
|
195
|
+
Bc=0,tc=0,Hh=0,
|
|
196
|
+
H1=0,
|
|
197
|
+
HL1=0,HL2=0,HL21=0,HL22=0,HL3=0,HL4=0,HL41=0,HL42=0,HL5=0,
|
|
198
|
+
BL1=0,BL2=0,BL21=0,BL22=0,BL4=0,BL41=0,BL42=0,
|
|
199
|
+
HR1=0,HR2=0,HR21=0,HR22=0,HR3=0,HR4=0,HR41=0,HR42=0,HR5=0,
|
|
200
|
+
BR1=0,BR2=0,BR21=0,BR22=0,BR4=0,BR41=0,BR42=0,
|
|
201
|
+
EgdEsb =0, DgdDsb=0,Pgd=0,Psb=0,TgdTsb=0,
|
|
202
|
+
MultiModulus = False,CreepEratio=0,ShrinkEratio=0,
|
|
203
|
+
Offset:Offset=Offset.CC(),useShear=True,use7Dof=False,id:int=0):
|
|
204
|
+
|
|
205
|
+
args = locals()
|
|
206
|
+
sect_Obj = SS_COMP_PSC_I(**args)
|
|
207
|
+
|
|
208
|
+
_SectionADD(sect_Obj)
|
|
209
|
+
return sect_Obj
|
|
210
|
+
|
|
211
|
+
@staticmethod
|
|
212
|
+
def SteelI_Type1(Name='',Bc=0,tc=0,Hh=0,Hw=0,B1=0,tf1=0,tw=0,B2=0,tf2=0,EsEc =0, DsDc=0,Ps=0,Pc=0,TsTc=0,
|
|
213
|
+
MultiModulus = False,CreepEratio=0,ShrinkEratio=0,
|
|
214
|
+
Offset:Offset=Offset.CC(),useShear=True,use7Dof=False,id:int=0):
|
|
215
|
+
|
|
216
|
+
args = locals()
|
|
217
|
+
sect_Obj = SS_COMP_STEEL_I_TYPE1(**args)
|
|
218
|
+
|
|
219
|
+
_SectionADD(sect_Obj)
|
|
220
|
+
return sect_Obj
|
|
221
|
+
|
|
222
|
+
|
|
223
|
+
|
|
224
|
+
#--------------------------------- T A P E R E D G R O U P ---------------------------------------------
|
|
225
|
+
class TaperedGroup:
|
|
226
|
+
|
|
227
|
+
data = []
|
|
228
|
+
|
|
229
|
+
def __init__(self, name, elem_list, z_var, y_var, z_exp=None, z_from=None, z_dist=None,
|
|
230
|
+
y_exp=None, y_from=None, y_dist=None, id=""):
|
|
231
|
+
"""
|
|
232
|
+
Args:
|
|
233
|
+
name (str): Tapered Group Name (Required).
|
|
234
|
+
elem_list (list): List of element numbers (Required).
|
|
235
|
+
z_var (str): Section shape variation for Z-axis: "LINEAR" or "POLY" (Required).
|
|
236
|
+
y_var (str): Section shape variation for Y-axis: "LINEAR" or "POLY" (Required).
|
|
237
|
+
z_exp (float, optional): Z-axis exponent. Required if z_var is "POLY".
|
|
238
|
+
z_from (str, optional): Z-axis symmetric plane ("i" or "j"). Defaults to "i" for "POLY".
|
|
239
|
+
z_dist (float, optional): Z-axis symmetric plane distance. Defaults to 0 for "POLY".
|
|
240
|
+
y_exp (float, optional): Y-axis exponent. Required if y_var is "POLY".
|
|
241
|
+
y_from (str, optional): Y-axis symmetric plane ("i" or "j"). Defaults to "i" for "POLY".
|
|
242
|
+
y_dist (float, optional): Y-axis symmetric plane distance. Defaults to 0 for "POLY".
|
|
243
|
+
id (str, optional): ID for the tapered group. Auto-generated if not provided.
|
|
244
|
+
|
|
245
|
+
Example:
|
|
246
|
+
Section.TapperGroup("Linear", [1, 2, 3], "LINEAR", "LINEAR")
|
|
247
|
+
Section.TapperGroup("ZPoly", [4, 5], "POLY", "LINEAR", z_exp=2.5)
|
|
248
|
+
"""
|
|
249
|
+
self.NAME = name
|
|
250
|
+
self.ELEM_LIST = elem_list
|
|
251
|
+
self.Z_VAR = z_var
|
|
252
|
+
self.Y_VAR = y_var
|
|
253
|
+
|
|
254
|
+
# Z-axis parameters (only for POLY)
|
|
255
|
+
if z_var == "POLY":
|
|
256
|
+
if z_exp is None:
|
|
257
|
+
raise ValueError("z_exp is required when z_var is 'POLY'")
|
|
258
|
+
self.Z_EXP = z_exp
|
|
259
|
+
self.Z_FROM = z_from if z_from is not None else "i"
|
|
260
|
+
self.Z_DIST = z_dist if z_dist is not None else 0
|
|
261
|
+
else:
|
|
262
|
+
self.Z_EXP = None
|
|
263
|
+
self.Z_FROM = None
|
|
264
|
+
self.Z_DIST = None
|
|
265
|
+
|
|
266
|
+
# Y-axis parameters (only for POLY)
|
|
267
|
+
if y_var == "POLY":
|
|
268
|
+
if y_exp is None:
|
|
269
|
+
raise ValueError("y_exp is required when y_var is 'POLY'")
|
|
270
|
+
self.Y_EXP = y_exp
|
|
271
|
+
self.Y_FROM = y_from if y_from is not None else "i"
|
|
272
|
+
self.Y_DIST = y_dist if y_dist is not None else 0
|
|
273
|
+
else:
|
|
274
|
+
self.Y_EXP = None
|
|
275
|
+
self.Y_FROM = None
|
|
276
|
+
self.Y_DIST = None
|
|
277
|
+
|
|
278
|
+
if id == "":
|
|
279
|
+
id = len(Section.TaperedGroup.data) + 1
|
|
280
|
+
self.ID = id
|
|
281
|
+
|
|
282
|
+
Section.TaperedGroup.data.append(self)
|
|
283
|
+
|
|
284
|
+
@classmethod
|
|
285
|
+
def json(cls):
|
|
286
|
+
json_data = {"Assign": {}}
|
|
287
|
+
for i in cls.data:
|
|
288
|
+
# Base data that's always included
|
|
289
|
+
tapper_data = {
|
|
290
|
+
"NAME": i.NAME,
|
|
291
|
+
"ELEMLIST": i.ELEM_LIST,
|
|
292
|
+
"ZVAR": i.Z_VAR,
|
|
293
|
+
"YVAR": i.Y_VAR
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
# Add Z-axis polynomial parameters only if Z_VAR is "POLY"
|
|
297
|
+
if i.Z_VAR == "POLY":
|
|
298
|
+
tapper_data["ZEXP"] = i.Z_EXP
|
|
299
|
+
tapper_data["ZFROM"] = i.Z_FROM
|
|
300
|
+
tapper_data["ZDIST"] = i.Z_DIST
|
|
301
|
+
|
|
302
|
+
# Add Y-axis polynomial parameters only if Y_VAR is "POLY"
|
|
303
|
+
if i.Y_VAR == "POLY":
|
|
304
|
+
tapper_data["YEXP"] = i.Y_EXP
|
|
305
|
+
tapper_data["YFROM"] = i.Y_FROM
|
|
306
|
+
tapper_data["YDIST"] = i.Y_DIST
|
|
307
|
+
|
|
308
|
+
json_data["Assign"][str(i.ID)] = tapper_data
|
|
309
|
+
|
|
310
|
+
return json_data
|
|
311
|
+
|
|
312
|
+
@classmethod
|
|
313
|
+
def create(cls):
|
|
314
|
+
MidasAPI("PUT", "/db/tsgr", cls.json())
|
|
315
|
+
|
|
316
|
+
@classmethod
|
|
317
|
+
def get(cls):
|
|
318
|
+
return MidasAPI("GET", "/db/tsgr")
|
|
319
|
+
|
|
320
|
+
@classmethod
|
|
321
|
+
def delete(cls):
|
|
322
|
+
cls.data = []
|
|
323
|
+
return MidasAPI("DELETE", "/db/tsgr")
|
|
324
|
+
|
|
325
|
+
@classmethod
|
|
326
|
+
def sync(cls):
|
|
327
|
+
cls.data = []
|
|
328
|
+
response = cls.get()
|
|
329
|
+
|
|
330
|
+
if response and response != {'message': ''}:
|
|
331
|
+
tsgr_data = response.get('TSGR', {})
|
|
332
|
+
# Iterate through the dictionary of tapered groups from the API response
|
|
333
|
+
for tsgr_id, item_data in tsgr_data.items():
|
|
334
|
+
# Extract base parameters
|
|
335
|
+
name = item_data.get('NAME')
|
|
336
|
+
elem_list = item_data.get('ELEMLIST')
|
|
337
|
+
z_var = item_data.get('ZVAR')
|
|
338
|
+
y_var = item_data.get('YVAR')
|
|
339
|
+
|
|
340
|
+
# Extract optional parameters based on variation type
|
|
341
|
+
z_exp = item_data.get('ZEXP') if z_var == "POLY" else None
|
|
342
|
+
z_from = item_data.get('ZFROM') if z_var == "POLY" else None
|
|
343
|
+
z_dist = item_data.get('ZDIST') if z_var == "POLY" else None
|
|
344
|
+
|
|
345
|
+
y_exp = item_data.get('YEXP') if y_var == "POLY" else None
|
|
346
|
+
y_from = item_data.get('YFROM') if y_var == "POLY" else None
|
|
347
|
+
y_dist = item_data.get('YDIST') if y_var == "POLY" else None
|
|
348
|
+
|
|
349
|
+
Section.TaperedGroup(
|
|
350
|
+
name=name,
|
|
351
|
+
elem_list=elem_list,
|
|
352
|
+
z_var=z_var,
|
|
353
|
+
y_var=y_var,
|
|
354
|
+
z_exp=z_exp,
|
|
355
|
+
z_from=z_from,
|
|
356
|
+
z_dist=z_dist,
|
|
357
|
+
y_exp=y_exp,
|
|
358
|
+
y_from=y_from,
|
|
359
|
+
y_dist=y_dist,
|
|
360
|
+
id=tsgr_id
|
|
361
|
+
)
|
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
from ._offsetSS import Offset
|
|
2
|
+
from ._offsetSS import _common
|
|
3
|
+
|
|
4
|
+
class SS_COMP_PSC_I(_common):
|
|
5
|
+
|
|
6
|
+
""" Create Standard USER DEFINED sections"""
|
|
7
|
+
|
|
8
|
+
def __init__(self,Name='',Symm = True,Joint=[0,0,0,0,0,0,0,0,0],
|
|
9
|
+
Bc=0,tc=0,Hh=0,
|
|
10
|
+
H1=0,
|
|
11
|
+
HL1=0,HL2=0,HL21=0,HL22=0,HL3=0,HL4=0,HL41=0,HL42=0,HL5=0,
|
|
12
|
+
BL1=0,BL2=0,BL21=0,BL22=0,BL4=0,BL41=0,BL42=0,
|
|
13
|
+
|
|
14
|
+
HR1=0,HR2=0,HR21=0,HR22=0,HR3=0,HR4=0,HR41=0,HR42=0,HR5=0,
|
|
15
|
+
BR1=0,BR2=0,BR21=0,BR22=0,BR4=0,BR41=0,BR42=0,
|
|
16
|
+
|
|
17
|
+
EgdEsb =0, DgdDsb=0,Pgd=0,Psb=0,TgdTsb=0,
|
|
18
|
+
|
|
19
|
+
MultiModulus = False,CreepEratio=0,ShrinkEratio=0,
|
|
20
|
+
|
|
21
|
+
Offset:Offset=Offset.CC(),useShear=True,use7Dof=False,id:int=0):
|
|
22
|
+
|
|
23
|
+
self.ID = id
|
|
24
|
+
self.NAME = Name
|
|
25
|
+
self.SHAPE = 'CI'
|
|
26
|
+
self.TYPE = 'COMPOSITE'
|
|
27
|
+
|
|
28
|
+
self.SYMM = bool(Symm)
|
|
29
|
+
|
|
30
|
+
self.BC =Bc
|
|
31
|
+
self.TC =tc
|
|
32
|
+
self.HH =Hh
|
|
33
|
+
|
|
34
|
+
self.MATL_ELAST = EgdEsb
|
|
35
|
+
self.MATL_DENS = DgdDsb
|
|
36
|
+
self.MATL_POIS_S = Pgd
|
|
37
|
+
self.MATL_POIS_C = Psb
|
|
38
|
+
self.MATL_THERMAL = TgdTsb
|
|
39
|
+
self.USE_MULTI_ELAST = MultiModulus
|
|
40
|
+
self.LONGTERM_ESEC = CreepEratio
|
|
41
|
+
self.SHRINK_ESEC = ShrinkEratio
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
self.J1=bool(Joint[0])
|
|
45
|
+
self.JL1=bool(Joint[1])
|
|
46
|
+
self.JL2=bool(Joint[2])
|
|
47
|
+
self.JL3=bool(Joint[3])
|
|
48
|
+
self.JL4=bool(Joint[4])
|
|
49
|
+
|
|
50
|
+
if self.SYMM:
|
|
51
|
+
self.JR1=bool(Joint[1])
|
|
52
|
+
self.JR2=bool(Joint[2])
|
|
53
|
+
self.JR3=bool(Joint[3])
|
|
54
|
+
self.JR4=bool(Joint[4])
|
|
55
|
+
|
|
56
|
+
self.HR1 = HL1
|
|
57
|
+
self.HR2 = HL2
|
|
58
|
+
self.HR21 = HL21
|
|
59
|
+
self.HR22 = HL22
|
|
60
|
+
self.HR3 = HL3
|
|
61
|
+
self.HR4 = HL4
|
|
62
|
+
self.HR41 = HL41
|
|
63
|
+
self.HR42 = HL42
|
|
64
|
+
self.HR5 = HL5
|
|
65
|
+
|
|
66
|
+
self.BR1 = BL1
|
|
67
|
+
self.BR2 = BL2
|
|
68
|
+
self.BR21 = BL21
|
|
69
|
+
self.BR22 = BL22
|
|
70
|
+
self.BR4 = BL4
|
|
71
|
+
self.BR41 = BL41
|
|
72
|
+
self.BR42 = BL42
|
|
73
|
+
else:
|
|
74
|
+
self.JR1=bool(Joint[5])
|
|
75
|
+
self.JR2=bool(Joint[6])
|
|
76
|
+
self.JR3=bool(Joint[7])
|
|
77
|
+
self.JR4=bool(Joint[8])
|
|
78
|
+
|
|
79
|
+
self.HR1 = HR1
|
|
80
|
+
self.HR2 = HR2
|
|
81
|
+
self.HR21 = HR21
|
|
82
|
+
self.HR22 = HR22
|
|
83
|
+
self.HR3 = HR3
|
|
84
|
+
self.HR4 = HR4
|
|
85
|
+
self.HR41 = HR41
|
|
86
|
+
self.HR42 = HR42
|
|
87
|
+
self.HR5 = HR5
|
|
88
|
+
|
|
89
|
+
self.BR1 = BR1
|
|
90
|
+
self.BR2 = BR2
|
|
91
|
+
self.BR21 = BR21
|
|
92
|
+
self.BR22 = BR22
|
|
93
|
+
self.BR4 = BR4
|
|
94
|
+
self.BR41 = BR41
|
|
95
|
+
self.BR42 = BR42
|
|
96
|
+
|
|
97
|
+
self.OFFSET = Offset
|
|
98
|
+
self.USESHEAR = bool(useShear)
|
|
99
|
+
self.USE7DOF = bool(use7Dof)
|
|
100
|
+
|
|
101
|
+
self.H1 = H1
|
|
102
|
+
self.HL1 = HL1
|
|
103
|
+
self.HL2 = HL2
|
|
104
|
+
self.HL21 = HL21
|
|
105
|
+
self.HL22 = HL22
|
|
106
|
+
self.HL3 = HL3
|
|
107
|
+
self.HL4 = HL4
|
|
108
|
+
self.HL41 = HL41
|
|
109
|
+
self.HL42 = HL42
|
|
110
|
+
self.HL5 = HL5
|
|
111
|
+
|
|
112
|
+
self.BL1 = BL1
|
|
113
|
+
self.BL2 = BL2
|
|
114
|
+
self.BL21 = BL21
|
|
115
|
+
self.BL22 = BL22
|
|
116
|
+
self.BL4 = BL4
|
|
117
|
+
self.BL41 = BL41
|
|
118
|
+
self.BL42 = BL42
|
|
119
|
+
|
|
120
|
+
def __str__(self):
|
|
121
|
+
return f' > ID = {self.ID} | PSC COMPOSITE I SECTION \nJSON = {self.toJSON()}\n'
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
def toJSON(sect):
|
|
125
|
+
js = {
|
|
126
|
+
"SECTTYPE": sect.TYPE,
|
|
127
|
+
"SECT_NAME": sect.NAME,
|
|
128
|
+
"SECT_BEFORE": {
|
|
129
|
+
"SHAPE": sect.SHAPE,
|
|
130
|
+
"SECT_I": {
|
|
131
|
+
"vSIZE_PSC_A": [sect.H1,sect.HL1,sect.HL2,sect.HL21,sect.HL22,sect.HL3,sect.HL4,sect.HL41,sect.HL42,sect.HL5],
|
|
132
|
+
"vSIZE_PSC_B": [sect.BL1,sect.BL2,sect.BL21,sect.BL22,sect.BL4,sect.BL41,sect.BL42],
|
|
133
|
+
"vSIZE_PSC_C": [sect.HR1,sect.HR2,sect.HR21,sect.HR22,sect.HR3,sect.HR4,sect.HR41,sect.HR42,sect.HR5],
|
|
134
|
+
"vSIZE_PSC_D": [sect.BR1,sect.BR2,sect.BR21,sect.BR22,sect.BR4,sect.BR41,sect.BR42]
|
|
135
|
+
},
|
|
136
|
+
"WARPING_CHK_AUTO_I": True,
|
|
137
|
+
"WARPING_CHK_AUTO_J": True,
|
|
138
|
+
"SHEAR_CHK": True,
|
|
139
|
+
"WARPING_CHK_POS_I": [[0,0,0,0,0,0],[0,0,0,0,0,0]],
|
|
140
|
+
"WARPING_CHK_POS_J": [[0,0,0,0,0,0],[0,0,0,0,0,0]],
|
|
141
|
+
"USE_AUTO_SHEAR_CHK_POS": [[True,False,True],[False,False,False]],
|
|
142
|
+
"USE_WEB_THICK_SHEAR": [[True, True,True],[False,False,False]],
|
|
143
|
+
"SHEAR_CHK_POS": [[0,0,0],[0,0,0]],
|
|
144
|
+
"USE_WEB_THICK": [True,False],
|
|
145
|
+
"WEB_THICK": [0,0],
|
|
146
|
+
"JOINT": [sect.J1,sect.JL1,sect.JL2,sect.JL3,sect.JL4,sect.JR1,sect.JR2,sect.JR3,sect.JR4],
|
|
147
|
+
"MATL_ELAST": sect.MATL_ELAST,
|
|
148
|
+
"MATL_DENS": sect.MATL_DENS,
|
|
149
|
+
"MATL_POIS_S": sect.MATL_POIS_S,
|
|
150
|
+
"MATL_POIS_C": sect.MATL_POIS_C,
|
|
151
|
+
"MATL_THERMAL": sect.MATL_THERMAL,
|
|
152
|
+
"USE_MULTI_ELAST": sect.USE_MULTI_ELAST,
|
|
153
|
+
"LONGTERM_ESEC": sect.LONGTERM_ESEC,
|
|
154
|
+
"SHRINK_ESEC": sect.SHRINK_ESEC,
|
|
155
|
+
},
|
|
156
|
+
"SECT_AFTER": {
|
|
157
|
+
"SLAB": [sect.BC,sect.TC,sect.HH]
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
js['SECT_BEFORE'].update(sect.OFFSET.JS)
|
|
161
|
+
js['SECT_BEFORE']['USE_SHEAR_DEFORM'] = sect.USESHEAR
|
|
162
|
+
js['SECT_BEFORE']['USE_WARPING_EFFECT'] = sect.USE7DOF
|
|
163
|
+
return js
|
|
164
|
+
|
|
165
|
+
@staticmethod
|
|
166
|
+
def _objectify(id,name,type,shape,offset,uShear,u7DOF,js):
|
|
167
|
+
vA = js['SECT_BEFORE']['SECT_I']['vSIZE_PSC_A']
|
|
168
|
+
vB = js['SECT_BEFORE']['SECT_I']['vSIZE_PSC_B']
|
|
169
|
+
vC = js['SECT_BEFORE']['SECT_I']['vSIZE_PSC_C']
|
|
170
|
+
vD = js['SECT_BEFORE']['SECT_I']['vSIZE_PSC_D']
|
|
171
|
+
joint = js['SECT_BEFORE']['JOINT']
|
|
172
|
+
slab = js['SECT_AFTER']['SLAB']
|
|
173
|
+
secti = js['SECT_BEFORE']
|
|
174
|
+
|
|
175
|
+
try: e1 = js['SECT_BEFORE']['LONGTERM_ESEC']
|
|
176
|
+
except: e1 = 0
|
|
177
|
+
try: e2 = js['SECT_BEFORE']['SHRINK_ESEC']
|
|
178
|
+
except: e2 = 0
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
return SS_COMP_PSC_I(name,False,joint,
|
|
182
|
+
slab[0],slab[1],slab[2],
|
|
183
|
+
vA[0],
|
|
184
|
+
vA[1],vA[2],vA[3],vA[4],vA[5],vA[6],vA[7],vA[8],vA[9],
|
|
185
|
+
vB[0],vB[1],vB[2],vB[3],vB[4],vB[5],vB[6],
|
|
186
|
+
vC[0],vC[1],vC[2],vC[3],vC[4],vC[5],vC[6],vC[7],vC[8],
|
|
187
|
+
vD[0],vD[1],vD[2],vD[3],vD[4],vD[5],vD[6],
|
|
188
|
+
secti['MATL_ELAST'],secti['MATL_DENS'],secti['MATL_POIS_S'],secti['MATL_POIS_C'],secti['MATL_THERMAL'],
|
|
189
|
+
secti['USE_MULTI_ELAST'],e1,e2,
|
|
190
|
+
offset,uShear,u7DOF,id)
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
class SS_COMP_STEEL_I_TYPE1(_common):
|
|
194
|
+
|
|
195
|
+
""" Create Standard USER DEFINED sections"""
|
|
196
|
+
|
|
197
|
+
def __init__(self,Name='',
|
|
198
|
+
Bc=0,tc=0,Hh=0,
|
|
199
|
+
Hw=0,B1=0,tf1=0,tw=0,B2=0,tf2=0,
|
|
200
|
+
|
|
201
|
+
EsEc =0, DsDc=0,Ps=0,Pc=0,TsTc=0,
|
|
202
|
+
MultiModulus = False,CreepEratio=0,ShrinkEratio=0,
|
|
203
|
+
Offset:Offset=Offset.CC(),useShear=True,use7Dof=False,id:int=0):
|
|
204
|
+
|
|
205
|
+
self.ID = id
|
|
206
|
+
self.NAME = Name
|
|
207
|
+
self.SHAPE = 'I'
|
|
208
|
+
self.TYPE = 'COMPOSITE'
|
|
209
|
+
|
|
210
|
+
self.BC =Bc
|
|
211
|
+
self.TC =tc
|
|
212
|
+
self.HH =Hh
|
|
213
|
+
|
|
214
|
+
self.HW = Hw
|
|
215
|
+
self.B1 = B1
|
|
216
|
+
self.TF1 = tf1
|
|
217
|
+
self.TW = tw
|
|
218
|
+
self.B2 = B2
|
|
219
|
+
self.TF2 = tf2
|
|
220
|
+
|
|
221
|
+
self.MATL_ELAST = EsEc
|
|
222
|
+
self.MATL_DENS = DsDc
|
|
223
|
+
self.MATL_POIS_S = Ps
|
|
224
|
+
self.MATL_POIS_C = Pc
|
|
225
|
+
self.MATL_THERMAL = TsTc
|
|
226
|
+
self.USE_MULTI_ELAST = MultiModulus
|
|
227
|
+
self.LONGTERM_ESEC = CreepEratio
|
|
228
|
+
self.SHRINK_ESEC = ShrinkEratio
|
|
229
|
+
|
|
230
|
+
self.OFFSET = Offset
|
|
231
|
+
self.USESHEAR = bool(useShear)
|
|
232
|
+
self.USE7DOF = bool(use7Dof)
|
|
233
|
+
|
|
234
|
+
def __str__(self):
|
|
235
|
+
return f' > ID = {self.ID} | STEEL COMPOSITE I SECTION \nJSON = {self.toJSON()}\n'
|
|
236
|
+
|
|
237
|
+
|
|
238
|
+
def toJSON(sect):
|
|
239
|
+
js = {
|
|
240
|
+
"SECTTYPE": sect.TYPE,
|
|
241
|
+
"SECT_NAME": sect.NAME,
|
|
242
|
+
"SECT_BEFORE": {
|
|
243
|
+
"SHAPE": sect.SHAPE,
|
|
244
|
+
"SECT_I": {
|
|
245
|
+
"vSIZE": [sect.HW,sect.TW,sect.B1,sect.TF1,sect.B2,sect.TF2],
|
|
246
|
+
},
|
|
247
|
+
|
|
248
|
+
"MATL_ELAST": sect.MATL_ELAST,
|
|
249
|
+
"MATL_DENS": sect.MATL_DENS,
|
|
250
|
+
"MATL_POIS_S": sect.MATL_POIS_S,
|
|
251
|
+
"MATL_POIS_C": sect.MATL_POIS_C,
|
|
252
|
+
"MATL_THERMAL": sect.MATL_THERMAL,
|
|
253
|
+
"USE_MULTI_ELAST": sect.USE_MULTI_ELAST,
|
|
254
|
+
"LONGTERM_ESEC": sect.LONGTERM_ESEC,
|
|
255
|
+
"SHRINK_ESEC": sect.SHRINK_ESEC,
|
|
256
|
+
},
|
|
257
|
+
"SECT_AFTER": {
|
|
258
|
+
"SLAB": [sect.BC,sect.TC,sect.HH]
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
js['SECT_BEFORE'].update(sect.OFFSET.JS)
|
|
262
|
+
js['SECT_BEFORE']['USE_SHEAR_DEFORM'] = sect.USESHEAR
|
|
263
|
+
js['SECT_BEFORE']['USE_WARPING_EFFECT'] = sect.USE7DOF
|
|
264
|
+
return js
|
|
265
|
+
|
|
266
|
+
@staticmethod
|
|
267
|
+
def _objectify(id,name,type,shape,offset,uShear,u7DOF,js):
|
|
268
|
+
vS = js['SECT_BEFORE']['SECT_I']['vSIZE']
|
|
269
|
+
slab = js['SECT_AFTER']['SLAB']
|
|
270
|
+
secti = js['SECT_BEFORE']
|
|
271
|
+
|
|
272
|
+
try: e1 = js['SECT_BEFORE']['LONGTERM_ESEC']
|
|
273
|
+
except: e1 = 0
|
|
274
|
+
try: e2 = js['SECT_BEFORE']['SHRINK_ESEC']
|
|
275
|
+
except: e2 = 0
|
|
276
|
+
|
|
277
|
+
|
|
278
|
+
return SS_COMP_STEEL_I_TYPE1(name,
|
|
279
|
+
slab[0],slab[1],slab[2],
|
|
280
|
+
vS[0],vS[2],vS[3],vS[1],vS[4],vS[5],
|
|
281
|
+
secti['MATL_ELAST'],secti['MATL_DENS'],secti['MATL_POIS_S'],secti['MATL_POIS_C'],secti['MATL_THERMAL'],
|
|
282
|
+
secti['USE_MULTI_ELAST'],e1,e2,
|
|
283
|
+
offset,uShear,u7DOF,id)
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
from ._offsetSS import Offset
|
|
2
|
+
from ._offsetSS import _common
|
|
3
|
+
|
|
4
|
+
class SS_DBUSER(_common):
|
|
5
|
+
|
|
6
|
+
""" Create Standard USER DEFINED sections"""
|
|
7
|
+
|
|
8
|
+
def __init__(self,Name='',Shape='',parameters:list=[],Offset=Offset(),useShear=True,use7Dof=False,id:int=0):
|
|
9
|
+
""" Shape = 'SB' 'SR' for rectangle \n For cylinder"""
|
|
10
|
+
self.ID = id
|
|
11
|
+
self.NAME = Name
|
|
12
|
+
self.TYPE = 'DBUSER'
|
|
13
|
+
self.SHAPE = Shape
|
|
14
|
+
self.PARAMS = parameters
|
|
15
|
+
self.OFFSET = Offset
|
|
16
|
+
self.USESHEAR = useShear
|
|
17
|
+
self.USE7DOF = use7Dof
|
|
18
|
+
self.DATATYPE = 2
|
|
19
|
+
|
|
20
|
+
def __str__(self):
|
|
21
|
+
return f' > ID = {self.ID} | USER DEFINED STANDARD SECTION \nJSON = {self.toJSON()}\n'
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def toJSON(sect):
|
|
25
|
+
js = {
|
|
26
|
+
"SECTTYPE": "DBUSER",
|
|
27
|
+
"SECT_NAME": sect.NAME,
|
|
28
|
+
"SECT_BEFORE": {
|
|
29
|
+
"SHAPE": sect.SHAPE,
|
|
30
|
+
"DATATYPE": sect.DATATYPE,
|
|
31
|
+
"SECT_I": {
|
|
32
|
+
"vSIZE": sect.PARAMS
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
js['SECT_BEFORE'].update(sect.OFFSET.JS)
|
|
37
|
+
js['SECT_BEFORE']['USE_SHEAR_DEFORM'] = sect.USESHEAR
|
|
38
|
+
js['SECT_BEFORE']['USE_WARPING_EFFECT'] = sect.USE7DOF
|
|
39
|
+
return js
|
|
40
|
+
|
|
41
|
+
@staticmethod
|
|
42
|
+
def _objectify(id,name,type,shape,offset,uShear,u7DOF,js):
|
|
43
|
+
return SS_DBUSER(name,shape,js['SECT_BEFORE']['SECT_I']['vSIZE'],offset,uShear,u7DOF,id)
|