midas-civil 1.0.7__py3-none-any.whl → 1.0.8__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.

@@ -0,0 +1,278 @@
1
+ from ._mapi import *
2
+ from ._load import *
3
+
4
+
5
+ class BoundaryChangeAssignment:
6
+
7
+ data = []
8
+
9
+ def __init__(self,
10
+ # Support options
11
+ bSPT: bool = False,
12
+ bSPR: bool = False,
13
+ bGSPR: bool = False,
14
+ bCGLINK: bool = False,
15
+ bSSSF: bool = False,
16
+ bPSSF: bool = False,
17
+ bRLS: bool = False,
18
+ bWSSF: bool = False,
19
+ bESSF: bool = False,
20
+ bCDOF: bool = False,
21
+ # Boundary settings
22
+ vBOUNDARY: list = None,
23
+ # Load analysis settings for ST type
24
+ ST_load_assignments: list = None,
25
+ # Load analysis settings for other types
26
+ MV: str = None,
27
+ SM: str = None,
28
+ THRSEV: str = None,
29
+ PO: str = None,
30
+ THNS: str = None,
31
+ ULAT: str = None):
32
+ """
33
+ Boundary Change Assignment constructor.
34
+
35
+ Parameters:
36
+ bSPT: Support (default False)
37
+ bSPR: Point Spring Support (default False)
38
+ bGSPR: General Spring Support (default False)
39
+ bCGLINK: Change General Link Property (default False)
40
+ bSSSF: Section Stiffness Scale Factor (default False)
41
+ bPSSF: Plate Stiffness Scale Factor (default False)
42
+ bRLS: Beam End Release (default False)
43
+ bWSSF: Wall Stiffness Scale Factor (default False)
44
+ bESSF: Element Stiffness Scale Factor (default False)
45
+ bCDOF: Constrain DOF associated with specified displacements/Settlements by boundary group combinations (default False)
46
+ vBOUNDARY: List of boundary assignments in format [["L1", "BG2"], ["L2", "BG1"]]
47
+ ST_load_assignments: List of ST type load cases with BGCNAME assignments in format [["Self-weight", "L1"], ["SIDL", "UNCHANGED"]]
48
+ MV, SM, THRSEV, PO, THNS, ULAT: Boundary group names for respective analysis types
49
+
50
+ Examples:
51
+ # Basic boundary change assignment
52
+ BoundaryChangeAssignment(
53
+ bSPT=True,
54
+ bCDOF=True,
55
+ vBOUNDARY=[["L1", "BG2"], ["L2", "BG1"]],
56
+ ST_load_assignments=[["Self-weight", "L1"]],
57
+ MV="L1"
58
+ )
59
+
60
+ # Complex assignment with multiple load types
61
+ BoundaryChangeAssignment(
62
+ bSPT=True,
63
+ bSPR=False,
64
+ bGSPR=False,
65
+ vBOUNDARY=[["L1", "BG2"], ["L2", "BG1"]],
66
+ ST_load_assignments=[["Self-weight", "L1"], ["SIDL", "L2"]],
67
+ MV="L1",
68
+ SM="L2",
69
+ THRSEV="L1"
70
+ )
71
+ """
72
+
73
+ # ID is always 1 based on the pattern
74
+ self.ID = 1
75
+
76
+ # Set support parameters
77
+ self.bSPT = bSPT
78
+ self.bSPR = bSPR
79
+ self.bGSPR = bGSPR
80
+ self.bCGLINK = bCGLINK
81
+ self.bSSSF = bSSSF
82
+ self.bPSSF = bPSSF
83
+ self.bRLS = bRLS
84
+ self.bWSSF = bWSSF
85
+ self.bESSF = bESSF
86
+ self.bCDOF = bCDOF
87
+
88
+ # Process boundary data
89
+ self.vBOUNDARY = self._process_boundary_data(vBOUNDARY)
90
+
91
+ # Process load analysis data
92
+ self.vLOADANAL = self._process_load_analysis_data(
93
+ ST_load_assignments, MV, SM, THRSEV, PO, THNS, ULAT
94
+ )
95
+
96
+ # Add to static list
97
+ BoundaryChangeAssignment.data.append(self)
98
+
99
+ # Automatically execute the data when instance is created
100
+ self._execute()
101
+
102
+ def _process_boundary_data(self, vBOUNDARY):
103
+ """
104
+ Process boundary data from list format to required JSON structure.
105
+ Input: [["L1", "BG2"], ["L2", "BG1"]]
106
+ Output: [{"BGCNAME": "L1", "vBG": ["BG2"]}, {"BGCNAME": "L2", "vBG": ["BG1"]}]
107
+ """
108
+ if not vBOUNDARY:
109
+ return []
110
+
111
+ boundary_list = []
112
+ for boundary_pair in vBOUNDARY:
113
+ if len(boundary_pair) == 2:
114
+ boundary_list.append({
115
+ "BGCNAME": boundary_pair[0],
116
+ "vBG": [boundary_pair[1]]
117
+ })
118
+
119
+ return boundary_list
120
+
121
+ def _get_load_cases(self):
122
+ """
123
+ Get load cases from the system using Load_Case.get() command.
124
+ This simulates the API call that would retrieve current load cases.
125
+ """
126
+ try:
127
+ # This would be replaced with actual API call: Load_Case.get()
128
+ # For now, using the provided example data structure
129
+ load_cases_response = Load_Case.get()
130
+ return load_cases_response.get('STLD', {})
131
+ except:
132
+ # Fallback to empty if API call fails
133
+ return {}
134
+
135
+ def _convert_st_assignments_to_dict(self, ST_load_assignments):
136
+ """
137
+ Convert ST_load_assignments from list format to dictionary format.
138
+ Input: [["Self-weight", "L1"], ["SIDL", "UNCHANGED"]]
139
+ Output: {"Self-weight": "L1", "SIDL": "UNCHANGED"}
140
+ """
141
+ if not ST_load_assignments:
142
+ return {}
143
+
144
+ assignments_dict = {}
145
+ for assignment_pair in ST_load_assignments:
146
+ if len(assignment_pair) == 2:
147
+ assignments_dict[assignment_pair[0]] = assignment_pair[1]
148
+
149
+ return assignments_dict
150
+
151
+ def _process_load_analysis_data(self, ST_load_assignments, MV, SM, THRSEV, PO, THNS, ULAT):
152
+ """
153
+ Process load analysis data combining user input with system load cases.
154
+ """
155
+ load_anal_list = []
156
+
157
+ # Get current load cases from system
158
+ load_cases = self._get_load_cases()
159
+
160
+ # Process ST type load cases
161
+ st_cases = {case_data['NAME']: case_data for case_data in load_cases.values() } # Assuming ST cases are USER type
162
+
163
+ # Convert ST_load_assignments from list format to dictionary format for internal processing
164
+ st_assignments_dict = self._convert_st_assignments_to_dict(ST_load_assignments)
165
+
166
+ if st_cases:
167
+ for case_name in st_cases.keys():
168
+ bgcname = "UNCHANGED" # Default value
169
+
170
+ # If user provided specific assignment for this load case
171
+ if st_assignments_dict and case_name in st_assignments_dict:
172
+ bgcname = st_assignments_dict[case_name]
173
+
174
+ load_anal_list.append({
175
+ "TYPE": "ST",
176
+ "BGCNAME": bgcname,
177
+ "LCNAME": case_name
178
+ })
179
+
180
+ # Process other load analysis types
181
+ analysis_types = {
182
+ "MV": MV,
183
+ "SM": SM,
184
+ "THRSEV": THRSEV,
185
+ "PO": PO,
186
+ "THNS": THNS,
187
+ "ULAT": ULAT
188
+ }
189
+
190
+ for analysis_type, bgcname in analysis_types.items():
191
+ load_anal_entry = {
192
+ "TYPE": analysis_type,
193
+ "BGCNAME": bgcname if bgcname is not None else "UNCHANGED"
194
+ }
195
+ load_anal_list.append(load_anal_entry)
196
+
197
+ return load_anal_list
198
+
199
+ def _execute(self):
200
+ """
201
+ Automatically sends the BoundaryChangeAssignment to the system when created.
202
+ """
203
+ json_data = {"Assign": {}}
204
+
205
+ boundary_data = {
206
+ "bSPT": self.bSPT,
207
+ "bSPR": self.bSPR,
208
+ "bGSPR": self.bGSPR,
209
+ "bCGLINK": self.bCGLINK,
210
+ "bSSSF": self.bSSSF,
211
+ "bPSSF": self.bPSSF,
212
+ "bRLS": self.bRLS,
213
+ "bWSSF": self.bWSSF,
214
+ "bESSF": self.bESSF,
215
+ "bCDOF": self.bCDOF,
216
+ "vBOUNDARY": self.vBOUNDARY,
217
+ "vLOADANAL": self.vLOADANAL
218
+ }
219
+
220
+ json_data["Assign"][str(self.ID)] = boundary_data
221
+
222
+ # Execute the API call
223
+ MidasAPI("PUT", "/db/bcct", json_data)
224
+
225
+ def __str__(self):
226
+ """
227
+ String representation of the BoundaryChangeAssignment.
228
+ """
229
+ return f"BoundaryChangeAssignment(ID={self.ID}, Boundaries={len(self.vBOUNDARY)}, LoadAnalyses={len(self.vLOADANAL)})"
230
+
231
+ def __repr__(self):
232
+ """
233
+ Detailed representation of the BoundaryChangeAssignment.
234
+ """
235
+ return (f"BoundaryChangeAssignment(ID={self.ID}, "
236
+ f"bSPT={self.bSPT}, bCDOF={self.bCDOF}, "
237
+ f"Boundaries={self.vBOUNDARY}, "
238
+ f"LoadAnalyses={self.vLOADANAL})")
239
+
240
+
241
+
242
+ # Example usage:
243
+ """
244
+ # Example 1: Basic boundary change assignment
245
+ boundary_assignment = BoundaryChangeAssignment(
246
+ bSPT=True,
247
+ bCDOF=True,
248
+ vBOUNDARY=[["L1", "BG2"], ["L2", "BG1"]],
249
+ ST_load_assignments=[["Self-weight", "L1"]],
250
+ MV="L1"
251
+ )
252
+
253
+ # Example 2: Complex assignment with multiple settings
254
+ complex_assignment = BoundaryChangeAssignment(
255
+ bSPT=True,
256
+ bSPR=False,
257
+ bGSPR=False,
258
+ bCGLINK=False,
259
+ bSSSF=False,
260
+ bPSSF=False,
261
+ bRLS=False,
262
+ bCDOF=True,
263
+ vBOUNDARY=[["L1", "BG2"], ["L2", "BG1"]],
264
+ ST_load_assignments=[["Self-weight", "L1"], ["SIDL", "UNCHANGED"]],
265
+ MV="UNCHANGED",
266
+ SM="L2",
267
+ THRSEV="L1",
268
+ PO="UNCHANGED",
269
+ THNS="UNCHANGED",
270
+ ULAT="UNCHANGED"
271
+ )
272
+
273
+ # Example 3: Minimal assignment with defaults
274
+ minimal_assignment = BoundaryChangeAssignment(
275
+ bSPT=True,
276
+ vBOUNDARY=[["L1", "BG2"]]
277
+ )
278
+ """
midas_civil/__init__.py CHANGED
@@ -1,6 +1,6 @@
1
1
  import requests
2
2
  from ._mapi import *
3
- _version_ = "1.0.7"
3
+ _version_ = "1.0.8"
4
4
 
5
5
 
6
6
  print('')
@@ -42,8 +42,8 @@ from ._temperature import *
42
42
  from ._tendon import *
43
43
  from ._view import *
44
44
 
45
- from ._movingload import*
46
- from ._settlement import*
47
- from ._analysiscontrol import*
48
-
45
+ from ._movingload import *
46
+ from ._settlement import *
47
+ from ._analysiscontrol import *
48
+ from ._BoundaryChangeAssignment import*
49
49
 
midas_civil/_element.py CHANGED
@@ -1,14 +1,14 @@
1
1
  from ._mapi import *
2
2
  from ._node import *
3
3
  from ._group import _add_elem_2_stGroup
4
- from ._group import _add_node_2_stGroup
4
+ from ._group import _add_node_2_stGroup,Group
5
5
  import numpy as np
6
6
  from scipy.interpolate import splev, splprep
7
7
  from math import hypot
8
8
  import math
9
9
 
10
10
 
11
- def _interpolateAlignment(pointsArray,n_seg=10,deg=1,mSize=0,includePoint:bool=True) -> list:
11
+ def _interpolateAlignment(pointsArray,n_seg=10,deg=1,mSize=0,includePoint:bool=True,yEcc=0,zEcc=0) -> list:
12
12
  ''' Returns point list and beta angle list'''
13
13
  pointsArray = np.array(pointsArray)
14
14
  x_p, y_p , z_p = pointsArray[:,0] , pointsArray[:,1] , pointsArray[:,2]
@@ -84,6 +84,7 @@ def _interpolateAlignment(pointsArray,n_seg=10,deg=1,mSize=0,includePoint:bool=T
84
84
  return align_fine_points
85
85
 
86
86
 
87
+
87
88
  def _nodeDIST(a:Node,b:Node):
88
89
  return round(hypot((a.X-b.X),(a.Y-b.Y),(a.Z-b.Z)),6)
89
90
 
@@ -109,6 +110,43 @@ def _triangleAREA(a:Node,b:Node,c:Node):
109
110
  mag = np.linalg.norm(np.cross(v1, v2))
110
111
  return float(0.5 * mag) , np.cross(v1, v2)/mag
111
112
 
113
+ def _calcVector(deltaLocation):
114
+ Z_new = np.array([0.000001,0,1])
115
+ X_new = np.array(deltaLocation)
116
+ Y_new = np.cross(Z_new, X_new)
117
+
118
+ Z_new = np.cross(X_new, Y_new) # Recomputing
119
+
120
+ X_new = X_new / (np.linalg.norm(X_new)+0.000001)
121
+ Y_new = Y_new / (np.linalg.norm(Y_new)+0.000001)
122
+ Z_new = Z_new / (np.linalg.norm(Z_new)+0.000001)
123
+
124
+ return [X_new,Y_new,Z_new]
125
+
126
+ def _pointOffset(pts,yEcc,zEcc):
127
+ norm = []
128
+ norm.append(_calcVector(np.subtract(pts[1],pts[0])))
129
+
130
+ for i in range(len(pts)-2):
131
+ X_new1 = np.array(np.subtract(pts[i+1],pts[i]))
132
+ X_new2 = np.array(np.subtract(pts[i+2],pts[i+1]))
133
+
134
+ X_new1 = X_new1 / (np.linalg.norm(X_new1)+0.000001)
135
+ X_new2 = X_new2 / (np.linalg.norm(X_new2)+0.000001)
136
+
137
+ norm.append(_calcVector(np.add(X_new1,X_new2)))
138
+
139
+ norm.append(_calcVector(np.subtract(pts[-1],pts[-2])))
140
+
141
+ # print(norm)
142
+
143
+ pt_new = []
144
+ for i in range(len(pts)):
145
+ pt_new.append(pts[i]+yEcc*norm[i][1]+zEcc*norm[i][2])
146
+
147
+ return pt_new
148
+
149
+
112
150
  def _ADD(self):
113
151
  """
114
152
  Adds an element to the main list. If the ID is 0, it auto-increments.
@@ -412,6 +450,28 @@ class Element:
412
450
  beam_obj.append(Element.Beam(beam_nodes[i],beam_nodes[i+1],mat,sect,angle,group,id_new,bLocalAxis))
413
451
 
414
452
  return beam_obj
453
+
454
+ @staticmethod
455
+ def PLine2(points_loc:list,n_div:int=0,deg:int=1,includePoint:bool=True,mat:int=1,sect:int=1,angle:float=0, group = "" , id: int = 0,bLocalAxis=False,yEcc=0,zEcc=0):
456
+
457
+ beam_nodes =[]
458
+ beam_obj = []
459
+ if n_div == 0 :
460
+ i_loc = points_loc
461
+ else:
462
+ i_loc = _interpolateAlignment(points_loc,n_div,deg,0,includePoint,yEcc,zEcc)
463
+
464
+ i_loc2 = _pointOffset(i_loc,yEcc,zEcc)
465
+ for i in i_loc2:
466
+ Enode=Node(i[0],i[1],i[2])
467
+ beam_nodes.append(Enode.ID)
468
+
469
+ for i in range(len(i_loc2)-1):
470
+ if id == 0 : id_new = 0
471
+ else: id_new = id+i
472
+ beam_obj.append(Element.Beam(beam_nodes[i],beam_nodes[i+1],mat,sect,angle,group,id_new,bLocalAxis))
473
+
474
+ return beam_obj
415
475
 
416
476
  class Truss(_common):
417
477
  def __init__(self, i: int, j: int, mat: int = 1, sect: int = 1, angle: float = 0, group = "" , id: int = 0):
midas_civil/_group.py CHANGED
@@ -330,4 +330,4 @@ class Group:
330
330
  def delete(cls):
331
331
  cls.Groups=[]
332
332
  cls.ids=[]
333
- MidasAPI("DELETE",cls.url)
333
+ MidasAPI("DELETE",cls.url)
midas_civil/_load.py CHANGED
@@ -737,4 +737,4 @@ class Load:
737
737
  item['GROUP_NAME'],
738
738
  values,
739
739
  item['ID']
740
- )
740
+ )
midas_civil/_mapi.py CHANGED
@@ -1,6 +1,7 @@
1
1
  import requests
2
2
  import sys
3
- import winreg
3
+ try:import winreg
4
+ except: pass
4
5
 
5
6
 
6
7
 
midas_civil/_model.py CHANGED
@@ -195,46 +195,46 @@ class Model:
195
195
 
196
196
 
197
197
 
198
- @staticmethod
199
- def _create2(request = "update", set = 1, force = "KN", length = "M", heat = "BTU", temp = "C"):
200
- """request["update" to update a model, "call" to get details of existing model], \nforce[Optional], length[Optional], heat[Optional], temp[Optional].
201
- \nSample: model() to update/create model. model("call") to get details of existing model and update classes.\n
202
- set = 1 => Functions that don't need to call data from connected model file.\n
203
- set = 2 => Functions that may need to call data from connected model file."""
204
- Model.units(force, length, heat, temp)
205
- if MAPI_KEY.data == []: print(f"Enter the MAPI key using the MAPI_KEY command.")
206
- if MAPI_KEY.data != []:
207
- if set == 1:
208
- if request == "update" or request == "create" or request == "PUT":
209
- if Node.json() != {"Assign":{}}: Node.create()
210
- if Element.json() != {"Assign":{}}: Element.create()
211
- if Section.json() != {"Assign":{}}: Section.create()
212
- if Group.json_BG() != {"Assign":{}}: Group.create_BG()
213
- if Group.json_LG() != {"Assign":{}}: Group.create_LG()
214
- if Group.json_TG() != {"Assign":{}}: Group.create_TG()
215
- if Material.json() != {"Assign":{}}: Material.create()
216
- if request == "call" or request == "GET":
217
- Node.sync()
218
- Element.sync()
219
- Section.sync()
220
- Group.sync()
221
- Material.sync()
222
- if set == 2:
223
- if request == "update" or request == "create" or request == "PUT":
224
- if Node.json() != {"Assign":{}}: Node.create()
225
- if Element.json() != {"Assign":{}}: Element.create()
226
- if Section.json() != {"Assign":{}}: Section.create()
227
- if Group.json_BG() != {"Assign":{}}: Group.create_BG()
228
- if Group.json_LG() != {"Assign":{}}: Group.create_LG()
229
- if Group.json_TG() != {"Assign":{}}: Group.create_TG()
230
- if Material.json() != {"Assign":{}}: Material.create()
231
- if Group.json_SG() != {"Assign":{}}: Group.create_SG()
232
- if request == "call" or request == "GET":
233
- Node.update_class()
234
- Element.update_class()
235
- Section.update_class()
236
- Group.update_class()
237
- Material.update_class()
198
+ # @staticmethod
199
+ # def _create2(request = "update", set = 1, force = "KN", length = "M", heat = "BTU", temp = "C"):
200
+ # """request["update" to update a model, "call" to get details of existing model], \nforce[Optional], length[Optional], heat[Optional], temp[Optional].
201
+ # \nSample: model() to update/create model. model("call") to get details of existing model and update classes.\n
202
+ # set = 1 => Functions that don't need to call data from connected model file.\n
203
+ # set = 2 => Functions that may need to call data from connected model file."""
204
+ # Model.units(force, length, heat, temp)
205
+ # if MAPI_KEY.data == []: print(f"Enter the MAPI key using the MAPI_KEY command.")
206
+ # if MAPI_KEY.data != []:
207
+ # if set == 1:
208
+ # if request == "update" or request == "create" or request == "PUT":
209
+ # if Node.json() != {"Assign":{}}: Node.create()
210
+ # if Element.json() != {"Assign":{}}: Element.create()
211
+ # if Section.json() != {"Assign":{}}: Section.create()
212
+ # if Group.json_BG() != {"Assign":{}}: Group.create_BG()
213
+ # if Group.json_LG() != {"Assign":{}}: Group.create_LG()
214
+ # if Group.json_TG() != {"Assign":{}}: Group.create_TG()
215
+ # if Material.json() != {"Assign":{}}: Material.create()
216
+ # if request == "call" or request == "GET":
217
+ # Node.sync()
218
+ # Element.sync()
219
+ # Section.sync()
220
+ # Group.sync()
221
+ # Material.sync()
222
+ # if set == 2:
223
+ # if request == "update" or request == "create" or request == "PUT":
224
+ # if Node.json() != {"Assign":{}}: Node.create()
225
+ # if Element.json() != {"Assign":{}}: Element.create()
226
+ # if Section.json() != {"Assign":{}}: Section.create()
227
+ # if Group.json_BG() != {"Assign":{}}: Group.create_BG()
228
+ # if Group.json_LG() != {"Assign":{}}: Group.create_LG()
229
+ # if Group.json_TG() != {"Assign":{}}: Group.create_TG()
230
+ # if Material.json() != {"Assign":{}}: Material.create()
231
+ # if Group.json_SG() != {"Assign":{}}: Group.create_SG()
232
+ # if request == "call" or request == "GET":
233
+ # Node.update_class()
234
+ # Element.update_class()
235
+ # Section.update_class()
236
+ # Group.update_class()
237
+ # Material.update_class()
238
238
 
239
239
 
240
240
 
@@ -403,4 +403,3 @@ class Model:
403
403
 
404
404
 
405
405
 
406
-
@@ -1428,4 +1428,4 @@ class MovingLoad:
1428
1428
 
1429
1429
 
1430
1430
 
1431
- #--------------------------------------Test---------------------------------------------
1431
+ #--------------------------------------Test---------------------------------------------
midas_civil/_node.py CHANGED
@@ -289,4 +289,4 @@ class NodeLocalAxis:
289
289
 
290
290
  # for j in a['NODE'].keys():
291
291
 
292
- # Node(round(a['NODE'][j]['X'],6), round(a['NODE'][j]['Y'],6), round(a['NODE'][j]['Z'],6), id=int(j), group='', merge=0)
292
+ # Node(round(a['NODE'][j]['X'],6), round(a['NODE'][j]['Y'],6), round(a['NODE'][j]['Z'],6), id=int(j), group='', merge=0)
midas_civil/_result.py CHANGED
@@ -151,5 +151,4 @@ class LoadCombination:
151
151
  print("No load combinations are defined to delete.")
152
152
  for i in list(json.keys()):
153
153
  MidasAPI("DELETE",LoadCombination.com_map.get(i) + a)
154
- #---------------------------------------------------------------------------------------------------------------
155
-
154
+ #---------------------------------------------------------------------------------------------------------------
@@ -204,4 +204,3 @@ class Result :
204
204
  ss_json = MidasAPI("POST","/post/table",js_dat)
205
205
  _setUNIT(currUNIT)
206
206
  return _JSToDF_ResTable(ss_json)
207
-
@@ -0,0 +1,47 @@
1
+ from ._offsetSS import Offset
2
+ from ._offsetSS import _common
3
+
4
+ class _SS_TAPERED_DBUSER(_common):
5
+
6
+ """ Create Standard USER DEFINED sections"""
7
+
8
+ def __init__(self,Name='',Shape='',params_I:list=[],params_J: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 = 'TAPERED'
13
+ self.SHAPE = Shape
14
+ self.PARAMS_I = params_I
15
+ self.PARAMS_J = params_J
16
+ self.OFFSET = Offset
17
+ self.USESHEAR = useShear
18
+ self.USE7DOF = use7Dof
19
+ self.DATATYPE = 2
20
+
21
+ def __str__(self):
22
+ return f' > ID = {self.ID} | USER DEFINED STANDARD SECTION \nJSON = {self.toJSON()}\n'
23
+
24
+
25
+ def toJSON(sect):
26
+ js = {
27
+ "SECTTYPE": sect.TYPE,
28
+ "SECT_NAME": sect.NAME,
29
+ "SECT_BEFORE": {
30
+ "SHAPE": sect.SHAPE,
31
+ "TYPE": sect.DATATYPE,
32
+ "SECT_I": {
33
+ "vSIZE": sect.PARAMS_I
34
+ },
35
+ "SECT_J": {
36
+ "vSIZE": sect.PARAMS_J
37
+ }
38
+ }
39
+ }
40
+ js['SECT_BEFORE'].update(sect.OFFSET.JS)
41
+ js['SECT_BEFORE']['USE_SHEAR_DEFORM'] = sect.USESHEAR
42
+ js['SECT_BEFORE']['USE_WARPING_EFFECT'] = sect.USE7DOF
43
+ return js
44
+
45
+ @staticmethod
46
+ def _objectify(id,name,type,shape,offset,uShear,u7DOF,js):
47
+ return _SS_TAPERED_DBUSER(name,shape,js['SECT_BEFORE']['SECT_I']['vSIZE'],js['SECT_BEFORE']['SECT_J']['vSIZE'],offset,uShear,u7DOF,id)
@@ -3,12 +3,15 @@ from ._dbSecSS import _SS_DBUSER
3
3
  from ._offsetSS import Offset
4
4
  from ._unSupp import _SS_UNSUPP,_SS_STD_DB
5
5
  from ._compositeSS import _SS_COMP_PSC_I,_SS_COMP_STEEL_I_TYPE1
6
+ from ._TapdbSecSS import _SS_TAPERED_DBUSER
7
+
8
+ from ._tapPSC1CellSS import _SS_TAP_PSC_1CELL
6
9
 
7
10
  from midas_civil import MidasAPI
8
11
 
9
12
 
10
13
  class _helperSECTION:
11
- NAME, SHAPE, TYPE, OFFSET, USESHEAR, USE7DOF = 0,0,0,0,0,0
14
+ ID, NAME, SHAPE, TYPE, OFFSET, USESHEAR, USE7DOF = 0,0,0,0,0,0,0
12
15
  def update():
13
16
  pass
14
17
  def toJSON():
@@ -85,6 +88,12 @@ def _JS2OBJ(id,js):
85
88
  if shape in ['CI']: obj = _SS_COMP_PSC_I._objectify(id,name,type,shape,offset,uShear,u7DOF,js)
86
89
  elif shape in ['I']: obj = _SS_COMP_STEEL_I_TYPE1._objectify(id,name,type,shape,offset,uShear,u7DOF,js)
87
90
  else: obj = _SS_UNSUPP(id,name,type,shape,offset,uShear,u7DOF,js)
91
+
92
+ elif type == 'TAPERED' :
93
+ if js['SECT_BEFORE']['TYPE'] ==2: obj = _SS_TAPERED_DBUSER._objectify(id,name,type,shape,offset,uShear,u7DOF,js)
94
+ elif shape in ['1CEL']: obj = _SS_TAP_PSC_1CELL._objectify(id,name,type,shape,offset,uShear,u7DOF,js)
95
+ else: obj = _SS_UNSUPP(id,name,type,shape,offset,uShear,u7DOF,js)
96
+
88
97
  else :
89
98
  obj = _SS_UNSUPP(id,name,type,shape,offset,uShear,u7DOF,js)
90
99
 
@@ -106,7 +115,7 @@ class Section:
106
115
  json = {"Assign":{}}
107
116
  for sect in cls.sect:
108
117
  js = sect.toJSON()
109
- json["Assign"][sect.ID] = js
118
+ json["Assign"][str(sect.ID)] = js
110
119
  return json
111
120
 
112
121
  @staticmethod
@@ -216,6 +225,36 @@ class Section:
216
225
 
217
226
  _SectionADD(sect_Obj)
218
227
  return sect_Obj
228
+
229
+ class Tapered:
230
+
231
+ @staticmethod
232
+ def DBUSER(Name='',Shape='',params_I:list=[],params_J:list=[],Offset=Offset(),useShear=True,use7Dof=False,id:int=0):
233
+ args = locals()
234
+ sect_Obj = _SS_TAPERED_DBUSER(**args)
235
+
236
+ _SectionADD(sect_Obj)
237
+ return sect_Obj
238
+
239
+ @staticmethod
240
+ def PSC1CEL(Name='',Joint=[0,0,0,0,0,0,0,0],
241
+ HO1_I=0,HO2_I=0,HO21_I=0,HO22_I=0,HO3_I=0,HO31_I=0,
242
+ BO1_I=0,BO11_I=0,BO12_I=0,BO2_I=0,BO21_I=0,BO3_I=0,
243
+ HI1_I=0,HI2_I=0,HI21_I=0,HI22_I=0,HI3_I=0,HI31_I=0,HI4_I=0,HI41_I=0,HI42_I=0,HI5_I=0,
244
+ BI1_I=0,BI11_I=0,BI12_I=0,BI21_I=0,BI3_I=0,BI31_I=0,BI32_I=0,BI4_I=0,
245
+
246
+ HO1_J=0,HO2_J=0,HO21_J=0,HO22_J=0,HO3_J=0,HO31_J=0,
247
+ BO1_J=0,BO11_J=0,BO12_J=0,BO2_J=0,BO21_J=0,BO3_J=0,
248
+ HI1_J=0,HI2_J=0,HI21_J=0,HI22_J=0,HI3_J=0,HI31_J=0,HI4_J=0,HI41_J=0,HI42_J=0,HI5_J=0,
249
+ BI1_J=0,BI11_J=0,BI12_J=0,BI21_J=0,BI3_J=0,BI31_J=0,BI32_J=0,BI4_J=0,
250
+
251
+ Offset:Offset=Offset.CC(),useShear=True,use7Dof=False,id:int=0):
252
+ args = locals()
253
+ sect_Obj = _SS_TAP_PSC_1CELL(**args)
254
+
255
+ _SectionADD(sect_Obj)
256
+ return sect_Obj
257
+
219
258
 
220
259
 
221
260
 
@@ -40,4 +40,18 @@ class _SS_DBUSER(_common):
40
40
 
41
41
  @staticmethod
42
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)
43
+ return _SS_DBUSER(name,shape,js['SECT_BEFORE']['SECT_I']['vSIZE'],offset,uShear,u7DOF,id)
44
+
45
+ def _centerLine(shape):
46
+ H = shape.PARAMS[0]
47
+ B = shape.PARAMS[1]
48
+ tw = shape.PARAMS[2]
49
+ tf = shape.PARAMS[3]
50
+
51
+ sect_lin_con = [[1,2],[3,1]]
52
+
53
+ sect_cg = [0,0]
54
+
55
+ sect_shape = [[0,0],[B,0],[0,-H]]
56
+ sect_thk = [tf,tw]
57
+ sect_thk_off = [-tf/2,-tw/2]
@@ -0,0 +1,186 @@
1
+ from ._offsetSS import Offset
2
+ from ._offsetSS import _common
3
+
4
+
5
+
6
+ class _SS_TAP_PSC_1CELL(_common):
7
+ def __init__(self,Name='',Joint=[0,0,0,0,0,0,0,0],
8
+ HO1_I=0,HO2_I=0,HO21_I=0,HO22_I=0,HO3_I=0,HO31_I=0,
9
+ BO1_I=0,BO11_I=0,BO12_I=0,BO2_I=0,BO21_I=0,BO3_I=0,
10
+ HI1_I=0,HI2_I=0,HI21_I=0,HI22_I=0,HI3_I=0,HI31_I=0,HI4_I=0,HI41_I=0,HI42_I=0,HI5_I=0,
11
+ BI1_I=0,BI11_I=0,BI12_I=0,BI21_I=0,BI3_I=0,BI31_I=0,BI32_I=0,BI4_I=0,
12
+
13
+ HO1_J=0,HO2_J=0,HO21_J=0,HO22_J=0,HO3_J=0,HO31_J=0,
14
+ BO1_J=0,BO11_J=0,BO12_J=0,BO2_J=0,BO21_J=0,BO3_J=0,
15
+ HI1_J=0,HI2_J=0,HI21_J=0,HI22_J=0,HI3_J=0,HI31_J=0,HI4_J=0,HI41_J=0,HI42_J=0,HI5_J=0,
16
+ BI1_J=0,BI11_J=0,BI12_J=0,BI21_J=0,BI3_J=0,BI31_J=0,BI32_J=0,BI4_J=0,
17
+
18
+ Offset:Offset=Offset.CC(),useShear=True,use7Dof=False,id:int=0):
19
+
20
+ self.ID = id
21
+ self.NAME = Name
22
+ self.SHAPE = '1CEL'
23
+ self.TYPE = 'TAPERED'
24
+
25
+ self.JO1=bool(Joint[0])
26
+ self.JO2=bool(Joint[1])
27
+ self.JO3=bool(Joint[2])
28
+ self.JI1=bool(Joint[3])
29
+ self.JI2=bool(Joint[4])
30
+ self.JI3=bool(Joint[5])
31
+ self.JI4=bool(Joint[6])
32
+ self.JI5=bool(Joint[7])
33
+
34
+ self.OFFSET = Offset
35
+ self.USESHEAR = bool(useShear)
36
+ self.USE7DOF = bool(use7Dof)
37
+
38
+ self.HO1_I = HO1_I
39
+ self.HO2_I = HO2_I
40
+ self.HO21_I = HO21_I
41
+ self.HO22_I= HO22_I
42
+ self.HO3_I = HO3_I
43
+ self.HO31_I = HO31_I
44
+
45
+ self.BO1_I = BO1_I
46
+ self.BO11_I = BO11_I
47
+ self.BO12_I = BO12_I
48
+ self.BO2_I = BO2_I
49
+ self.BO21_I = BO21_I
50
+ self.BO3_I = BO3_I
51
+
52
+ self.HI1_I = HI1_I
53
+ self.HI2_I = HI2_I
54
+ self.HI21_I = HI21_I
55
+ self.HI22_I = HI22_I
56
+ self.HI3_I = HI3_I
57
+ self.HI31_I = HI31_I
58
+ self.HI4_I = HI4_I
59
+ self.HI41_I = HI41_I
60
+ self.HI42_I = HI42_I
61
+ self.HI5_I = HI5_I
62
+
63
+ self.BI1_I = BI1_I
64
+ self.BI11_I = BI11_I
65
+ self.BI12_I = BI12_I
66
+ self.BI21_I = BI21_I
67
+ self.BI3_I = BI3_I
68
+ self.BI31_I = BI31_I
69
+ self.BI32_I = BI32_I
70
+ self.BI4_I = BI4_I
71
+
72
+
73
+
74
+
75
+ self.HO1_J = HO1_J
76
+ self.HO2_J = HO2_J
77
+ self.HO21_J = HO21_J
78
+ self.HO22_J= HO22_J
79
+ self.HO3_J = HO3_J
80
+ self.HO31_J = HO31_J
81
+
82
+ self.BO1_J = BO1_J
83
+ self.BO11_J = BO11_J
84
+ self.BO12_J = BO12_J
85
+ self.BO2_J = BO2_J
86
+ self.BO21_J = BO21_J
87
+ self.BO3_J = BO3_J
88
+
89
+ self.HI1_J = HI1_J
90
+ self.HI2_J = HI2_J
91
+ self.HI21_J = HI21_J
92
+ self.HI22_J = HI22_J
93
+ self.HI3_J = HI3_J
94
+ self.HI31_J = HI31_J
95
+ self.HI4_J = HI4_J
96
+ self.HI41_J = HI41_J
97
+ self.HI42_J = HI42_J
98
+ self.HI5_J = HI5_J
99
+
100
+ self.BI1_J = BI1_J
101
+ self.BI11_J = BI11_J
102
+ self.BI12_J = BI12_J
103
+ self.BI21_J = BI21_J
104
+ self.BI3_J = BI3_J
105
+ self.BI31_J = BI31_J
106
+ self.BI32_J = BI32_J
107
+ self.BI4_J = BI4_J
108
+
109
+
110
+ def __str__(self):
111
+ return f' > ID = {self.ID} | PSC 1-2 CELL SECTION \nJSON = {self.toJSON()}\n'
112
+
113
+
114
+ def toJSON(sect):
115
+ js = {
116
+ "SECTTYPE": "TAPERED",
117
+ "SECT_NAME": sect.NAME,
118
+ "SECT_BEFORE": {
119
+ "SHAPE": sect.SHAPE,
120
+ "TYPE" : 11,
121
+ "SECT_I": {
122
+ "vSIZE_PSC_A": [sect.HO1_I,sect.HO2_I,sect.HO21_I,sect.HO22_I,sect.HO3_I,sect.HO31_I],
123
+ "vSIZE_PSC_B": [sect.BO1_I,sect.BO11_I,sect.BO12_I,sect.BO2_I,sect.BO21_I,sect.BO3_I,],
124
+ "vSIZE_PSC_C": [sect.HI1_I,sect.HI2_I,sect.HI21_I,sect.HI22_I,sect.HI3_I,sect.HI31_I,sect.HI4_I,sect.HI41_I,sect.HI42_I,sect.HI5_I],
125
+ "vSIZE_PSC_D": [sect.BI1_I,sect.BI11_I,sect.BI12_I,sect.BI21_I,sect.BI3_I,sect.BI31_I,sect.BI32_I,sect.BI4_I],
126
+ "S_WIDTH" : sect.HO1_I
127
+ },
128
+ "SECT_J": {
129
+ "vSIZE_PSC_A": [sect.HO1_J,sect.HO2_J,sect.HO21_J,sect.HO22_J,sect.HO3_J,sect.HO31_J],
130
+ "vSIZE_PSC_B": [sect.BO1_J,sect.BO11_J,sect.BO12_J,sect.BO2_J,sect.BO21_J,sect.BO3_J,],
131
+ "vSIZE_PSC_C": [sect.HI1_J,sect.HI2_J,sect.HI21_J,sect.HI22_J,sect.HI3_J,sect.HI31_J,sect.HI4_J,sect.HI41_J,sect.HI42_J,sect.HI5_J],
132
+ "vSIZE_PSC_D": [sect.BI1_J,sect.BI11_J,sect.BI12_J,sect.BI21_J,sect.BI3_J,sect.BI31_J,sect.BI32_J,sect.BI4_J],
133
+ "S_WIDTH" : sect.HO1_J
134
+ },
135
+ "Y_VAR": 1,
136
+ "Z_VAR": 1,
137
+ "WARPING_CHK_AUTO_I": True,
138
+ "WARPING_CHK_AUTO_J": True,
139
+ "SHEAR_CHK": False,
140
+ "WARPING_CHK_POS_I": [[0,0,0,0,0,0],[0,0,0,0,0,0]],
141
+ "WARPING_CHK_POS_J": [[0,0,0,0,0,0],[0,0,0,0,0,0]],
142
+ "USE_WEB_THICK_SHEAR": [[True, True,True],[True,True,True]],
143
+ "WEB_THICK_SHEAR": [[0,0,0],[0,0,0]],
144
+ "USE_WEB_THICK": [True,True],
145
+ "WEB_THICK": [0,0],
146
+ "USE_SYMMETRIC": False,
147
+ "USE_SMALL_HOLE": False,
148
+ "USE_USER_DEF_MESHSIZE": False,
149
+ "USE_USER_INTPUT_STIFF": False,
150
+ "PSC_OPT1": "",
151
+ "PSC_OPT2": "",
152
+ "JOINT": [sect.JO1,sect.JO2,sect.JO3,sect.JI1,sect.JI2,sect.JI3,sect.JI4,sect.JI5]
153
+ }
154
+ }
155
+ js['SECT_BEFORE'].update(sect.OFFSET.JS)
156
+ js['SECT_BEFORE']['USE_SHEAR_DEFORM'] = sect.USESHEAR
157
+ js['SECT_BEFORE']['USE_WARPING_EFFECT'] = sect.USE7DOF
158
+ return js
159
+
160
+
161
+ @staticmethod
162
+ def _objectify(id,name,type,shape,offset,uShear,u7DOF,js):
163
+ #--- PSC 1,2 CELL -------------------
164
+ vA_I = js['SECT_BEFORE']['SECT_I']['vSIZE_PSC_A']
165
+ vB_I = js['SECT_BEFORE']['SECT_I']['vSIZE_PSC_B']
166
+ vC_I = js['SECT_BEFORE']['SECT_I']['vSIZE_PSC_C']
167
+ vD_I = js['SECT_BEFORE']['SECT_I']['vSIZE_PSC_D']
168
+
169
+ vA_J = js['SECT_BEFORE']['SECT_J']['vSIZE_PSC_A']
170
+ vB_J = js['SECT_BEFORE']['SECT_J']['vSIZE_PSC_B']
171
+ vC_J = js['SECT_BEFORE']['SECT_J']['vSIZE_PSC_C']
172
+ vD_J = js['SECT_BEFORE']['SECT_J']['vSIZE_PSC_D']
173
+
174
+ joint = js['SECT_BEFORE']['JOINT']
175
+ return _SS_TAP_PSC_1CELL(name,joint,
176
+ *vA_I,*vB_I,*vC_I,*vD_I,
177
+ *vA_J,*vB_J,*vC_J,*vD_J,
178
+ offset,uShear,u7DOF,id)
179
+
180
+
181
+
182
+
183
+
184
+
185
+
186
+
@@ -157,4 +157,3 @@ class Settlement:
157
157
  a['SMLC'][i]['ST_GROUPS'],
158
158
  int(i)
159
159
  )
160
-
@@ -641,4 +641,4 @@ class Temperature:
641
641
  def delete():
642
642
  """Delete Beam Section Temperatures from MIDAS Civil NX and Python"""
643
643
  Temperature.BeamSection.temps = []
644
- return MidasAPI("DELETE", "/db/btmp")
644
+ return MidasAPI("DELETE", "/db/btmp")
midas_civil/_tendon.py CHANGED
@@ -2,6 +2,7 @@
2
2
  from ._mapi import *
3
3
  from ._utils import *
4
4
  from ._load import *
5
+ from ._group import *
5
6
 
6
7
 
7
8
  def _JStoObj_Relax(js):
midas_civil/_thickness.py CHANGED
@@ -139,4 +139,3 @@ class Thickness(_common):
139
139
  _JS2Obj(sect_id,a['THIK'][sect_id])
140
140
 
141
141
 
142
-
midas_civil/_utils.py CHANGED
@@ -1,5 +1,5 @@
1
- from ._model import *
2
- from ._mapi import *
1
+ # from ._model import *
2
+ # from ._mapi import *
3
3
 
4
4
  #Function to remove duplicate set of values from 2 lists
5
5
  # def unique_lists(li1, li2):
@@ -86,4 +86,4 @@ def zz_add_to_dict(dictionary, key, value):
86
86
  def _convItem2List(item):
87
87
  if isinstance(item,list):
88
88
  return item
89
- return [item]
89
+ return [item]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: midas_civil
3
- Version: 1.0.7
3
+ Version: 1.0.8
4
4
  Summary: Python library for MIDAS Civil NX
5
5
  Home-page: https://github.com/MIDASIT-Co-Ltd/midas-civil-python
6
6
  Author: Sumit Shekhar
@@ -0,0 +1,36 @@
1
+ midas_civil/_BoundaryChangeAssignment.py,sha256=8lQC0DZ8zAXuPfchBdhqUaLZhZMog51EffQcKeayrlc,9511
2
+ midas_civil/__init__.py,sha256=T0NwsEmr2c1166UlxbogGhDfBzvRGbTIU9XX9c6h-_E,1156
3
+ midas_civil/_analysiscontrol.py,sha256=r2zp7fdC_m-WfO7KSXU4SzVjOgLWg4Wm0djl7X1ioZo,24456
4
+ midas_civil/_boundary.py,sha256=s5mgZIc1b0-P7AdWuaPAQ5cIbHL5CR1YRKJA7KE4W_U,32958
5
+ midas_civil/_construction.py,sha256=q9C3gGdvky5t7jCDzd6lBRv6pm8cMycI91xfkgDV37Y,40673
6
+ midas_civil/_construction_backup.py,sha256=Pj7V-NYCkkT-aMjKXfs1jKa9klsGh48UXDLwn3BLYTY,18225
7
+ midas_civil/_element.py,sha256=1GcI-9PcRdfvHvtXs2tdMNRvvxyQ7A78Lk8rAp5gGOw,34795
8
+ midas_civil/_group.py,sha256=ul0gPtAhfuc9HPQkVw2dfV0jqCLvnTbxAlx6hEBUmyI,9882
9
+ midas_civil/_load.py,sha256=twsfqofTzbnMHXShfMRSP61ll7CTBA5qos33od7nQ9E,30170
10
+ midas_civil/_mapi.py,sha256=UMGuzuNE7uTjR6YwPsbfI5xHSoFESVY2U0NM5mfgcW8,5486
11
+ midas_civil/_material.py,sha256=uJEIHJM9OhwTRWUI2mtd_0BQSxdlYhATYJu9P7tNNBA,69511
12
+ midas_civil/_model.py,sha256=huUlmIZVsBbThszrEIhvb9owOSmdggylXaJeK4g7lxY,16735
13
+ midas_civil/_movingload.py,sha256=a1i5fNc7oCmWTjVXbyBEYzDr5BO7NTXPVCKgvjzxuX4,80000
14
+ midas_civil/_node.py,sha256=3iVj5Hs7DJPbfgM_hIazP-Y1szu3j3ofuh_ftUxoLcY,8827
15
+ midas_civil/_result copy.py,sha256=siTMENLIwF_6rvydSjP9aQAWaIlt0pReiqNyDhDevGk,24290
16
+ midas_civil/_result.py,sha256=nzXY2lh_342M45TMq2hBYwSp41_wAHyGFSfvt9h2vXc,7638
17
+ midas_civil/_result_extract.py,sha256=QVo1DJmlkTJ20-FwqgguH70bVrwHbx7TfPFENYfCUbE,5706
18
+ midas_civil/_settlement.py,sha256=0ZkKutTjQ7Wg47ohfrc6SgoZY1xyP9_ylGQlCVBH-2U,5124
19
+ midas_civil/_temperature.py,sha256=Sr5fRgUHzMx6tfr1E0Nw7ZLYKUmzoH1h6Sl-APqFkHo,24208
20
+ midas_civil/_tendon.py,sha256=pUtR-74c1GcJyJt6Te38TAlBBOZJtlkERb9Ijf5CkH0,33417
21
+ midas_civil/_thickness.py,sha256=yyFkMCaxcwRsqYJcRAxWqnt59fdqzX4Mqkjz23waw-A,3247
22
+ midas_civil/_utils.py,sha256=c_NgCmqtoWP7jv4RoK7oGyF9edDo_UlJYR-p54h572U,2711
23
+ midas_civil/_view.py,sha256=o7rkfoQzmgAb3dT0ujPIQLVwVlveo3rMRIbZU1UosZo,849
24
+ midas_civil/_section/_TapdbSecSS.py,sha256=ANHBwzegppGmUlm7spEBNDHfdJfTbWX7Q-pvn-Th1tA,1649
25
+ midas_civil/_section/__init__.py,sha256=subwWGtIRFfz19i2mtLPuQbViFAR8-xZY7eHLBGUWO4,15250
26
+ midas_civil/_section/_compositeSS.py,sha256=mrHOkjHkbuVOLAd1dGEiLruyqmye_mv9H99UJIdWdiQ,9942
27
+ midas_civil/_section/_dbSecSS.py,sha256=Dupfs4un0mwJbreqrUPw7iEstbdFiMiQYXVQtam-5k0,1763
28
+ midas_civil/_section/_offsetSS.py,sha256=kHjwp_PCeBKWqYKoQCy0s4d8O5Gb0Vk6e1MWMOGxql4,1377
29
+ midas_civil/_section/_pscSS.py,sha256=PnXR5lJNKYtp8MyFddJlW45CYCRSG6SpA-zojDl4DnE,14254
30
+ midas_civil/_section/_tapPSC1CellSS.py,sha256=bjpuOgIot2yQd2zirE6vVmVlgfco1f83RlI7DwIicdU,6700
31
+ midas_civil/_section/_unSupp.py,sha256=46A_a5CzDpQM7bqglkFzIvq6VG7Lj9J6qflY3nwZlqI,1674
32
+ midas_civil-1.0.8.dist-info/licenses/LICENSE,sha256=zrL4RwZC4rb-by_ZHKXwKdIwcs6ATy59TPZ9HxPHCrs,1071
33
+ midas_civil-1.0.8.dist-info/METADATA,sha256=BW2J0aNKOVhFN8yglhcnfnMj8smztMrx4xbSwEzN6Po,2085
34
+ midas_civil-1.0.8.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
35
+ midas_civil-1.0.8.dist-info/top_level.txt,sha256=_NFmrlN5V9OxJ-PAO4s_om8OA8uupXho3QqZcSsnbuI,12
36
+ midas_civil-1.0.8.dist-info/RECORD,,
@@ -1,33 +0,0 @@
1
- midas_civil/__init__.py,sha256=_KjbkXkwosQGJ9F1iVunbSg2lKNftP9ICCK4FKYqYHY,1114
2
- midas_civil/_analysiscontrol.py,sha256=r2zp7fdC_m-WfO7KSXU4SzVjOgLWg4Wm0djl7X1ioZo,24456
3
- midas_civil/_boundary.py,sha256=s5mgZIc1b0-P7AdWuaPAQ5cIbHL5CR1YRKJA7KE4W_U,32958
4
- midas_civil/_construction.py,sha256=q9C3gGdvky5t7jCDzd6lBRv6pm8cMycI91xfkgDV37Y,40673
5
- midas_civil/_construction_backup.py,sha256=Pj7V-NYCkkT-aMjKXfs1jKa9klsGh48UXDLwn3BLYTY,18225
6
- midas_civil/_element.py,sha256=i0svU0oRndZHJweOddDTpyEc4tD3LMclBxlp7nmO1a4,32795
7
- midas_civil/_group.py,sha256=KRTPPUiHfUQJ_APFJ0dhkiNeDysAQaihVC7nCnLlamo,9881
8
- midas_civil/_load.py,sha256=TltWAjDaeC5MNW8IIPKgpLahDQgJR3J6SzinkCrJS7A,30171
9
- midas_civil/_mapi.py,sha256=rQWGN2Wy38h64HAtNpXGCB-EVeNypGaFBoqFno1s3-Q,5469
10
- midas_civil/_material.py,sha256=uJEIHJM9OhwTRWUI2mtd_0BQSxdlYhATYJu9P7tNNBA,69511
11
- midas_civil/_model.py,sha256=hVwcSdkKf_DEf2IO_jzGle2T_0s7tG3ivG0feHKXQ7k,16656
12
- midas_civil/_movingload.py,sha256=kzTbi4vFjOnUYOyhDDTmSHFU-sDGb_MgMBNXUmFmUZc,80001
13
- midas_civil/_node.py,sha256=xkUdHdZgGq1kBBXNiumOKebZa9l-fKOEOsJLsDDHXtg,8828
14
- midas_civil/_result copy.py,sha256=siTMENLIwF_6rvydSjP9aQAWaIlt0pReiqNyDhDevGk,24290
15
- midas_civil/_result.py,sha256=ZJf2CQG2ZjlTKuWo3zBnG7W8EwI1UkhWhWJVWRzlXUU,7640
16
- midas_civil/_result_extract.py,sha256=cZgWMxvZV9Pc-Ec0KzGrerDRv1Sj3AJKqlZwj_uVi9w,5707
17
- midas_civil/_settlement.py,sha256=U7lJYBqGbuCv7qziEEznDyA4M_SCjJeIjc0lDeGfE4Y,5125
18
- midas_civil/_temperature.py,sha256=EfvivFWfxyM8yFCvWJgXLhaCofGwLKEBGFUuW8yHnfQ,24209
19
- midas_civil/_tendon.py,sha256=mXNJeLikFsBpgn8u9fED2qx9oqnKh3XtIpYwp3moEfk,33395
20
- midas_civil/_thickness.py,sha256=4xQsLA3Q_gIGCwLc_glFmiErdWdQUSwhlEhJ_IPJseA,3248
21
- midas_civil/_utils.py,sha256=GR9cj-mgRPmtwmgqEj4JeEjMlRS6zmvhcxFV5IHbpRk,2708
22
- midas_civil/_view.py,sha256=o7rkfoQzmgAb3dT0ujPIQLVwVlveo3rMRIbZU1UosZo,849
23
- midas_civil/_section/__init__.py,sha256=hKAAxFx3aubS6VoKvWDb9qPF4P-v98ON6MNUDVCbeyY,13483
24
- midas_civil/_section/_compositeSS.py,sha256=mrHOkjHkbuVOLAd1dGEiLruyqmye_mv9H99UJIdWdiQ,9942
25
- midas_civil/_section/_dbSecSS.py,sha256=J597m31ZN91BKnO77oDBSSnPYCL6p2ULzwGto_vQxAE,1446
26
- midas_civil/_section/_offsetSS.py,sha256=kHjwp_PCeBKWqYKoQCy0s4d8O5Gb0Vk6e1MWMOGxql4,1377
27
- midas_civil/_section/_pscSS.py,sha256=PnXR5lJNKYtp8MyFddJlW45CYCRSG6SpA-zojDl4DnE,14254
28
- midas_civil/_section/_unSupp.py,sha256=46A_a5CzDpQM7bqglkFzIvq6VG7Lj9J6qflY3nwZlqI,1674
29
- midas_civil-1.0.7.dist-info/licenses/LICENSE,sha256=zrL4RwZC4rb-by_ZHKXwKdIwcs6ATy59TPZ9HxPHCrs,1071
30
- midas_civil-1.0.7.dist-info/METADATA,sha256=jNF5IcPDPL9YP_r24YTv2yQavK774RCOpSBUKF79HDY,2085
31
- midas_civil-1.0.7.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
32
- midas_civil-1.0.7.dist-info/top_level.txt,sha256=_NFmrlN5V9OxJ-PAO4s_om8OA8uupXho3QqZcSsnbuI,12
33
- midas_civil-1.0.7.dist-info/RECORD,,