midas-civil 1.4.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 (40) hide show
  1. midas_civil/_BoundaryChangeAssignment.py +278 -0
  2. midas_civil/__init__.py +51 -0
  3. midas_civil/_analysiscontrol.py +585 -0
  4. midas_civil/_boundary.py +888 -0
  5. midas_civil/_construction.py +1004 -0
  6. midas_civil/_element.py +1346 -0
  7. midas_civil/_group.py +337 -0
  8. midas_civil/_load.py +967 -0
  9. midas_civil/_loadcomb.py +159 -0
  10. midas_civil/_mapi.py +249 -0
  11. midas_civil/_material.py +1692 -0
  12. midas_civil/_model.py +522 -0
  13. midas_civil/_movingload.py +1479 -0
  14. midas_civil/_node.py +532 -0
  15. midas_civil/_result_table.py +929 -0
  16. midas_civil/_result_test.py +5455 -0
  17. midas_civil/_section/_TapdbSecSS.py +175 -0
  18. midas_civil/_section/__init__.py +413 -0
  19. midas_civil/_section/_compositeSS.py +283 -0
  20. midas_civil/_section/_dbSecSS.py +164 -0
  21. midas_civil/_section/_offsetSS.py +53 -0
  22. midas_civil/_section/_pscSS copy.py +455 -0
  23. midas_civil/_section/_pscSS.py +822 -0
  24. midas_civil/_section/_tapPSC12CellSS.py +565 -0
  25. midas_civil/_section/_unSupp.py +58 -0
  26. midas_civil/_settlement.py +161 -0
  27. midas_civil/_temperature.py +677 -0
  28. midas_civil/_tendon.py +1016 -0
  29. midas_civil/_thickness.py +147 -0
  30. midas_civil/_utils.py +529 -0
  31. midas_civil/_utilsFunc/__init__.py +0 -0
  32. midas_civil/_utilsFunc/_line2plate.py +636 -0
  33. midas_civil/_view.py +891 -0
  34. midas_civil/_view_trial.py +430 -0
  35. midas_civil/_visualise.py +347 -0
  36. midas_civil-1.4.1.dist-info/METADATA +74 -0
  37. midas_civil-1.4.1.dist-info/RECORD +40 -0
  38. midas_civil-1.4.1.dist-info/WHEEL +5 -0
  39. midas_civil-1.4.1.dist-info/licenses/LICENSE +21 -0
  40. midas_civil-1.4.1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,455 @@
1
+ from ._offsetSS import Offset
2
+ from ._offsetSS import _common
3
+ import math
4
+
5
+
6
+
7
+ class _SS_PSC_12CELL(_common):
8
+ def __init__(self,Name='',Shape='1CEL',Joint=[0,0,0,0,0,0,0,0],
9
+ HO1=0,HO2=0,HO21=0,HO22=0,HO3=0,HO31=0,
10
+ BO1=0,BO11=0,BO12=0,BO2=0,BO21=0,BO3=0,
11
+ HI1=0,HI2=0,HI21=0,HI22=0,HI3=0,HI31=0,HI4=0,HI41=0,HI42=0,HI5=0,
12
+ BI1=0,BI11=0,BI12=0,BI21=0,BI3=0,BI31=0,BI32=0,BI4=0,
13
+ Offset:Offset=Offset.CC(),useShear=True,use7Dof=False,id:int=0):
14
+
15
+ self.ID = id
16
+ self.NAME = Name
17
+ self.SHAPE = Shape
18
+ self.TYPE = 'PSC'
19
+
20
+ self.JO1=bool(Joint[0])
21
+ self.JO2=bool(Joint[1])
22
+ self.JO3=bool(Joint[2])
23
+ self.JI1=bool(Joint[3])
24
+ self.JI2=bool(Joint[4])
25
+ self.JI3=bool(Joint[5])
26
+ self.JI4=bool(Joint[6])
27
+ self.JI5=bool(Joint[7])
28
+
29
+ self.OFFSET = Offset
30
+ self.USESHEAR = bool(useShear)
31
+ self.USE7DOF = bool(use7Dof)
32
+
33
+ self.HO1 = HO1
34
+ self.HO2 = HO2
35
+ self.HO21 = HO21
36
+ self.HO22= HO22
37
+ self.HO3 = HO3
38
+ self.HO31 = HO31
39
+
40
+ self.BO1 = BO1
41
+ self.BO11 = BO11
42
+ self.BO12 = BO12
43
+ self.BO2 = BO2
44
+ self.BO21 = BO21
45
+ self.BO3 = BO3
46
+
47
+ self.HI1 = HI1
48
+ self.HI2 = HI2
49
+ self.HI21 = HI21
50
+ self.HI22 = HI22
51
+ self.HI3 = HI3
52
+ self.HI31 = HI31
53
+ self.HI4 = HI4
54
+ self.HI41 = HI41
55
+ self.HI42 = HI42
56
+ self.HI5 = HI5
57
+
58
+ self.BI1 = BI1
59
+ self.BI11 = BI11
60
+ self.BI12 = BI12
61
+ self.BI21 = BI21
62
+ self.BI3 = BI3
63
+ self.BI31 = BI31
64
+ self.BI32 = BI32
65
+ self.BI4 = BI4
66
+
67
+
68
+ def __str__(self):
69
+ return f' > ID = {self.ID} | PSC 1-2 CELL SECTION \nJSON = {self.toJSON()}\n'
70
+
71
+
72
+ def toJSON(sect):
73
+ js = {
74
+ "SECTTYPE": "PSC",
75
+ "SECT_NAME": sect.NAME,
76
+ "SECT_BEFORE": {
77
+ "SHAPE": sect.SHAPE,
78
+ "SECT_I": {
79
+ "vSIZE_PSC_A": [sect.HO1,sect.HO2,sect.HO21,sect.HO22,sect.HO3,sect.HO31],
80
+ "vSIZE_PSC_B": [sect.BO1,sect.BO11,sect.BO12,sect.BO2,sect.BO21,sect.BO3,],
81
+ "vSIZE_PSC_C": [sect.HI1,sect.HI2,sect.HI21,sect.HI22,sect.HI3,sect.HI31,sect.HI4,sect.HI41,sect.HI42,sect.HI5],
82
+ "vSIZE_PSC_D": [sect.BI1,sect.BI11,sect.BI12,sect.BI21,sect.BI3,sect.BI31,sect.BI32,sect.BI4]
83
+ },
84
+ "WARPING_CHK_AUTO_I": True,
85
+ "WARPING_CHK_AUTO_J": True,
86
+ "SHEAR_CHK": True,
87
+ "WARPING_CHK_POS_I": [[0,0,0,0,0,0],[0,0,0,0,0,0]],
88
+ "WARPING_CHK_POS_J": [[0,0,0,0,0,0],[0,0,0,0,0,0]],
89
+ "USE_AUTO_SHEAR_CHK_POS": [[True,False,True],[False,False,False]],
90
+ "USE_WEB_THICK_SHEAR": [[True, True,True],[False,False,False]],
91
+ "SHEAR_CHK_POS": [[0,0,0],[0,0,0]],
92
+ "USE_WEB_THICK": [True,False],
93
+ "WEB_THICK": [0,0],
94
+ "JOINT": [sect.JO1,sect.JO2,sect.JO3,sect.JI1,sect.JI2,sect.JI3,sect.JI4,sect.JI5]
95
+ }
96
+ }
97
+ js['SECT_BEFORE'].update(sect.OFFSET.JS)
98
+ js['SECT_BEFORE']['USE_SHEAR_DEFORM'] = sect.USESHEAR
99
+ js['SECT_BEFORE']['USE_WARPING_EFFECT'] = sect.USE7DOF
100
+ return js
101
+
102
+
103
+ @staticmethod
104
+ def _objectify(id,name,type,shape,offset,uShear,u7DOF,js):
105
+ #--- PSC 1,2 CELL -------------------
106
+ vA = js['SECT_BEFORE']['SECT_I']['vSIZE_PSC_A']
107
+ vB = js['SECT_BEFORE']['SECT_I']['vSIZE_PSC_B']
108
+ vC = js['SECT_BEFORE']['SECT_I']['vSIZE_PSC_C']
109
+ vD = js['SECT_BEFORE']['SECT_I']['vSIZE_PSC_D']
110
+ joint = js['SECT_BEFORE']['JOINT']
111
+ return _SS_PSC_12CELL(name,shape,joint,
112
+ vA[0],vA[1],vA[2],vA[3],vA[4],vA[5],
113
+ vB[0],vB[1],vB[2],vB[3],vB[4],vB[5],
114
+ vC[0],vC[1],vC[2],vC[3],vC[4],vC[5],vC[6],vC[7],vC[8],vC[9],
115
+ vD[0],vD[1],vD[2],vD[3],vD[4],vD[5],vD[6],vD[7],
116
+ offset,uShear,u7DOF,id)
117
+
118
+ def _centerLine(shape,*args):
119
+ if shape.SHAPE == '1CEL':
120
+ BO1 = shape.BO1
121
+ BO2 = shape.BO2
122
+ BO3 = shape.BO3
123
+ HO1 = shape.HO1
124
+ HO2 = shape.HO2
125
+ HO3 = shape.HO3
126
+ HI1 = shape.HI1
127
+ HI5 = shape.HI5
128
+ BI3 = shape.BI3
129
+
130
+ sect_lin_con = [[1,2],[2,3],[3,4],[2,5],[3,6],[5,6]]
131
+
132
+ sect_cg_LT = [0,0]
133
+ sect_cg_RB = [2*(BO1+BO2+BO3),-(HO1+HO2+HO3)]
134
+ sect_cg_CC = [(BO1+BO2+BO3),-(HO1+HO2+HO3)/2]
135
+
136
+ sect_shape = [[0,0],[BO1,0],[BO1+2*(BO2+BO3),0],[2*(BO1+BO2+BO3),0],[BO1+BO2,-HO1-HO3-HO2],[BO1+BO2+2*BO3,-HO1-HO3-HO2]]
137
+ sect_thk = [HO1,HI1,HO1,BO3-BI3,BO3-BI3,HI5]
138
+ sect_thk_off = [-HO1/2,-HI1/2,-HO1/2,(BO3-BI3)/2,-(BO3-BI3)/2,HI5/2]
139
+
140
+
141
+
142
+ sect_cg = (sect_cg_LT,sect_cg_CC,sect_cg_RB)
143
+
144
+ return sect_shape, sect_thk ,sect_thk_off, sect_cg , sect_lin_con
145
+
146
+
147
+
148
+
149
+
150
+
151
+
152
+
153
+
154
+
155
+ class _SS_PSC_I(_common):
156
+ def __init__(self,Name='',Symm = True,Joint=[0,0,0,0,0,0,0,0,0],
157
+ H1=0,
158
+ HL1=0,HL2=0,HL21=0,HL22=0,HL3=0,HL4=0,HL41=0,HL42=0,HL5=0,
159
+ BL1=0,BL2=0,BL21=0,BL22=0,BL4=0,BL41=0,BL42=0,
160
+
161
+ HR1=0,HR2=0,HR21=0,HR22=0,HR3=0,HR4=0,HR41=0,HR42=0,HR5=0,
162
+ BR1=0,BR2=0,BR21=0,BR22=0,BR4=0,BR41=0,BR42=0,
163
+
164
+ Offset:Offset=Offset.CC(),useShear=True,use7Dof=False,id:int=0):
165
+
166
+ self.ID = id
167
+ self.NAME = Name
168
+ self.SHAPE = 'PSCI'
169
+ self.TYPE = 'PSC'
170
+
171
+ self.SYMM = bool(Symm)
172
+
173
+ self.J1=bool(Joint[0])
174
+ self.JL1=bool(Joint[1])
175
+ self.JL2=bool(Joint[2])
176
+ self.JL3=bool(Joint[3])
177
+ self.JL4=bool(Joint[4])
178
+
179
+ if self.SYMM:
180
+ self.JR1=bool(Joint[1])
181
+ self.JR2=bool(Joint[2])
182
+ self.JR3=bool(Joint[3])
183
+ self.JR4=bool(Joint[4])
184
+
185
+ self.HR1 = HL1
186
+ self.HR2 = HL2
187
+ self.HR21 = HL21
188
+ self.HR22 = HL22
189
+ self.HR3 = HL3
190
+ self.HR4 = HL4
191
+ self.HR41 = HL41
192
+ self.HR42 = HL42
193
+ self.HR5 = HL5
194
+
195
+ self.BR1 = BL1
196
+ self.BR2 = BL2
197
+ self.BR21 = BL21
198
+ self.BR22 = BL22
199
+ self.BR4 = BL4
200
+ self.BR41 = BL41
201
+ self.BR42 = BL42
202
+ else:
203
+ self.JR1=bool(Joint[5])
204
+ self.JR2=bool(Joint[6])
205
+ self.JR3=bool(Joint[7])
206
+ self.JR4=bool(Joint[8])
207
+
208
+ self.HR1 = HR1
209
+ self.HR2 = HR2
210
+ self.HR21 = HR21
211
+ self.HR22 = HR22
212
+ self.HR3 = HR3
213
+ self.HR4 = HR4
214
+ self.HR41 = HR41
215
+ self.HR42 = HR42
216
+ self.HR5 = HR5
217
+
218
+ self.BR1 = BR1
219
+ self.BR2 = BR2
220
+ self.BR21 = BR21
221
+ self.BR22 = BR22
222
+ self.BR4 = BR4
223
+ self.BR41 = BR41
224
+ self.BR42 = BR42
225
+
226
+ self.OFFSET = Offset
227
+ self.USESHEAR = bool(useShear)
228
+ self.USE7DOF = bool(use7Dof)
229
+
230
+ self.H1 = H1
231
+ self.HL1 = HL1
232
+ self.HL2 = HL2
233
+ self.HL21 = HL21
234
+ self.HL22 = HL22
235
+ self.HL3 = HL3
236
+ self.HL4 = HL4
237
+ self.HL41 = HL41
238
+ self.HL42 = HL42
239
+ self.HL5 = HL5
240
+
241
+ self.BL1 = BL1
242
+ self.BL2 = BL2
243
+ self.BL21 = BL21
244
+ self.BL22 = BL22
245
+ self.BL4 = BL4
246
+ self.BL41 = BL41
247
+ self.BL42 = BL42
248
+
249
+
250
+ def __str__(self):
251
+ return f' > ID = {self.ID} | PSC I SECTION \nJSON = {self.toJSON()}\n'
252
+
253
+
254
+ def toJSON(sect):
255
+ js = {
256
+ "SECTTYPE": "PSC",
257
+ "SECT_NAME": sect.NAME,
258
+ "SECT_BEFORE": {
259
+ "SHAPE": sect.SHAPE,
260
+ "SECT_I": {
261
+ "vSIZE_PSC_A": [sect.H1,sect.HL1,sect.HL2,sect.HL21,sect.HL22,sect.HL3,sect.HL4,sect.HL41,sect.HL42,sect.HL5],
262
+ "vSIZE_PSC_B": [sect.BL1,sect.BL2,sect.BL21,sect.BL22,sect.BL4,sect.BL41,sect.BL42],
263
+ "vSIZE_PSC_C": [sect.HR1,sect.HR2,sect.HR21,sect.HR22,sect.HR3,sect.HR4,sect.HR41,sect.HR42,sect.HR5],
264
+ "vSIZE_PSC_D": [sect.BR1,sect.BR2,sect.BR21,sect.BR22,sect.BR4,sect.BR41,sect.BR42]
265
+ },
266
+ "WARPING_CHK_AUTO_I": True,
267
+ "WARPING_CHK_AUTO_J": True,
268
+ "SHEAR_CHK": True,
269
+ "WARPING_CHK_POS_I": [[0,0,0,0,0,0],[0,0,0,0,0,0]],
270
+ "WARPING_CHK_POS_J": [[0,0,0,0,0,0],[0,0,0,0,0,0]],
271
+ "USE_AUTO_SHEAR_CHK_POS": [[True,False,True],[False,False,False]],
272
+ "USE_WEB_THICK_SHEAR": [[True, True,True],[False,False,False]],
273
+ "SHEAR_CHK_POS": [[0,0,0],[0,0,0]],
274
+ "USE_WEB_THICK": [True,False],
275
+ "WEB_THICK": [0,0],
276
+ "USE_SYMMETRIC" : sect.SYMM,
277
+ "JOINT": [sect.J1,sect.JL1,sect.JL2,sect.JL3,sect.JL4,sect.JR1,sect.JR2,sect.JR3,sect.JR4]
278
+ }
279
+ }
280
+ js['SECT_BEFORE'].update(sect.OFFSET.JS)
281
+ js['SECT_BEFORE']['USE_SHEAR_DEFORM'] = sect.USESHEAR
282
+ js['SECT_BEFORE']['USE_WARPING_EFFECT'] = sect.USE7DOF
283
+ return js
284
+
285
+
286
+ @staticmethod
287
+ def _objectify(id,name,type,shape,offset,uShear,u7DOF,js):
288
+ symm = js['SECT_BEFORE']['USE_SYMMETRIC']
289
+ vA = js['SECT_BEFORE']['SECT_I']['vSIZE_PSC_A']
290
+ vB = js['SECT_BEFORE']['SECT_I']['vSIZE_PSC_B']
291
+ vC = js['SECT_BEFORE']['SECT_I']['vSIZE_PSC_C']
292
+ vD = js['SECT_BEFORE']['SECT_I']['vSIZE_PSC_D']
293
+ joint = js['SECT_BEFORE']['JOINT']
294
+ return _SS_PSC_I(name,symm,joint,
295
+ vA[0],
296
+ vA[1],vA[2],vA[3],vA[4],vA[5],vA[6],vA[7],vA[8],vA[9],
297
+ vB[0],vB[1],vB[2],vB[3],vB[4],vB[5],vB[6],
298
+ vC[0],vC[1],vC[2],vC[3],vC[4],vC[5],vC[6],vC[7],vC[8],
299
+ vD[0],vD[1],vD[2],vD[3],vD[4],vD[5],vD[6],
300
+ offset,uShear,u7DOF,id)
301
+
302
+
303
+
304
+
305
+
306
+
307
+
308
+
309
+
310
+
311
+
312
+
313
+ import numpy as np
314
+ def _poly_dir(poly,rot='CCW'):
315
+ outer_cg = np.mean(poly,axis=0)
316
+ outer_t = np.subtract(poly,outer_cg)
317
+ dir = 0
318
+ for i in range(len(poly)-1):
319
+ dir+=outer_t[i][0]*outer_t[i+1][1]-outer_t[i][1]*outer_t[i+1][0]
320
+ if dir < 0:
321
+ poly.reverse()
322
+
323
+ if rot == 'CW':
324
+ poly.reverse()
325
+
326
+ return poly
327
+
328
+
329
+
330
+
331
+
332
+
333
+ class _SS_PSC_Value(_common):
334
+ def __init__(self,Name:str,
335
+ OuterPolygon:list,InnerPolygon:list=[],
336
+ Offset:Offset=Offset.CC(),useShear=True,use7Dof=False,id:int=0):
337
+
338
+ '''
339
+ Outer Polygon -> List of points ; Last input is different from first
340
+ [(0,0),(1,0),(1,1),(0,1)]
341
+ Inner Polygon -> List of points ; Last input is different from first
342
+ Only one inner polygon
343
+ '''
344
+
345
+ self.ID = id
346
+ self.NAME = Name
347
+ self.SHAPE = 'VALUE'
348
+ self.TYPE = 'PSC'
349
+
350
+ self.OFFSET = Offset
351
+ self.USESHEAR = bool(useShear)
352
+ self.USE7DOF = bool(use7Dof)
353
+
354
+ self.OUTER_POLYGON = _poly_dir(OuterPolygon)
355
+ self.INNER_POLYGON = []
356
+ self.N_INNER_POLYGON = 0
357
+
358
+ temp_arr = []
359
+
360
+ # Finding no. of internal polygons
361
+ if InnerPolygon != []:
362
+ if not isinstance(InnerPolygon[0][0],(int,float)):
363
+ self.N_INNER_POLYGON = len(InnerPolygon)
364
+ temp_arr = InnerPolygon
365
+
366
+ else:
367
+ temp_arr.append(InnerPolygon) #Convert to list
368
+ self.N_INNER_POLYGON = 1
369
+
370
+ for i in range(len(temp_arr)):
371
+ self.INNER_POLYGON.append(_poly_dir(temp_arr[i],'CW'))
372
+
373
+
374
+ def __str__(self):
375
+ return f' > ID = {self.ID} | PSC VALUE SECTION \nJSON = {self.toJSON()}\n'
376
+
377
+
378
+ def toJSON(sect):
379
+ js = {
380
+ "SECTTYPE": "PSC",
381
+ "SECT_NAME": sect.NAME,
382
+ "CALC_OPT": True,
383
+ "SECT_BEFORE": {
384
+ "SHAPE": "VALU",
385
+ "SECT_I": {
386
+ "SECT_NAME": "",
387
+ "vSIZE": [0.1, 0.1, 0.1, 0.1],
388
+ "OUTER_POLYGON": [
389
+ {
390
+ "VERTEX": [
391
+ {"X": 5, "Y": 5},
392
+ {"X": -5, "Y": 5}
393
+ ]
394
+ }
395
+ ]
396
+ },
397
+ "SHEAR_CHK": True,
398
+ "SHEAR_CHK_POS": [[0.1, 0, 0.1], [0, 0, 0]],
399
+ "USE_AUTO_QY": [[True, True, True], [False, False, False]],
400
+ "WEB_THICK": [0, 0],
401
+ "USE_WEB_THICK_SHEAR": [[True, True, True], [False, False, False]]
402
+ }
403
+ }
404
+
405
+ v_list = []
406
+ for i in sect.OUTER_POLYGON:
407
+ v_list.append({"X":i[0],"Y":i[1]})
408
+ js["SECT_BEFORE"]["SECT_I"]["OUTER_POLYGON"][0]["VERTEX"] =v_list
409
+
410
+
411
+
412
+ if sect.N_INNER_POLYGON > 0 :
413
+
414
+ js["SECT_BEFORE"]["SECT_I"]["INNER_POLYGON"]= []
415
+
416
+ mult_ver = []
417
+ for n in range(sect.N_INNER_POLYGON):
418
+ vi_list = []
419
+
420
+ js["SECT_BEFORE"]["SECT_I"]["INNER_POLYGON"]= [
421
+ {
422
+ "VERTEX": []
423
+ }
424
+ ]
425
+ for i in sect.INNER_POLYGON[n]:
426
+ vi_list.append({"X":i[0],"Y":i[1]})
427
+
428
+ ver_json = {"VERTEX": vi_list}
429
+ mult_ver.append(ver_json)
430
+
431
+ js["SECT_BEFORE"]["SECT_I"]["INNER_POLYGON"] = mult_ver
432
+
433
+ js['SECT_BEFORE'].update(sect.OFFSET.JS)
434
+ js['SECT_BEFORE']['USE_SHEAR_DEFORM'] = sect.USESHEAR
435
+ js['SECT_BEFORE']['USE_WARPING_EFFECT'] = sect.USE7DOF
436
+ return js
437
+
438
+
439
+ @staticmethod
440
+ def _objectify(id,name,type,shape,offset,uShear,u7DOF,js):
441
+
442
+ outer_pt = []
443
+ for pt in js["SECT_BEFORE"]["SECT_I"]["OUTER_POLYGON"][0]["VERTEX"]:
444
+ outer_pt.append((pt['X'],pt['Y']))
445
+
446
+ inner_pt = []
447
+ if 'INNER_POLYGON' in js["SECT_BEFORE"]["SECT_I"]:
448
+ innerJSON = js["SECT_BEFORE"]["SECT_I"]['INNER_POLYGON']
449
+ for n_holes in innerJSON:
450
+ h_pt = []
451
+ for pt in n_holes['VERTEX']:
452
+ h_pt.append([pt['X'],pt['Y']])
453
+ inner_pt.append(h_pt)
454
+
455
+ return _SS_PSC_Value(name,outer_pt,inner_pt,offset,uShear,u7DOF,id)