Skip to content

Commit d9b09f0

Browse files
Merge pull request #1 from azzeddinetiba/Displacement_Controlled_Non_Linear_Analysis
Displacement controlled non linear analysis
2 parents e90a008 + c28cc4b commit d9b09f0

20 files changed

Lines changed: 268 additions & 35 deletions

.gitignore

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
11
Results/
2-
*.tex
2+
*.tex
3+
__pycache__/
4+
src_code/__pycache__/
-112 KB
Binary file not shown.
-101 KB
Binary file not shown.
-103 KB
Binary file not shown.

__pycache__/Main.cpython-37.pyc

-3.83 KB
Binary file not shown.
-168 Bytes
Binary file not shown.

src_code/Assembly.py

Lines changed: 184 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1036,7 +1036,10 @@ def BCMAssembly(X,T,b,F,j,fixedx,xy):
10361036
return FBCM
10371037

10381038

1039-
def applying_Fix_q(total_loading, X, T, b, box, F, analysis_type, *args):
1039+
def applying_Fix_q(total_loading, X, T, b, box, F, analysis_type, Nincr1, *args):
1040+
1041+
Nincr = Nincr1[0]
1042+
curr_incr = Nincr1[1]
10401043

10411044
isthereM = len(args)
10421045
if isthereM != 0:
@@ -1149,7 +1152,13 @@ def applying_Fix_q(total_loading, X, T, b, box, F, analysis_type, *args):
11491152

11501153
ENFRCDS1 = np.array([ENFRCDS[:, np.arange(0, 5)]])
11511154
ENFRCDS2 = np.array([ENFRCDS[:, np.arange(5, 10)]])
1152-
ENFRCDS1 = ENFRCDS1[0]
1155+
ENFRCDS1 = ENFRCDS1[0]/Nincr
1156+
#load_step = ENFRCDS1
1157+
#if curr_incr != 0:
1158+
# i=0
1159+
# while i<curr_incr:
1160+
# ENFRCDS1 += load_step
1161+
# i+=1
11531162
ENFRCDS2 = ENFRCDS2[0]
11541163
x1 = box[0, 0]
11551164
y1 = box[0, 1]
@@ -1212,16 +1221,17 @@ def applying_Fix_q(total_loading, X, T, b, box, F, analysis_type, *args):
12121221
elif boundaryconditions[0] == 3:
12131222
F[border1[np.arange(3, border1.size, 6)] - 1, :] += BCMAssembly(X, T, b1, MY1, 2, x1, 1)
12141223
F[border1[np.arange(4, border1.size, 6)] - 1, :] += BCMAssembly(X, T, b1, MXY1, 2, x1, 2)
1215-
elif boundaryconditions[0] == 4:
1216-
srch = np.nonzero(ENFRCDS2[0, :])
1217-
for c in srch[0]:
1218-
if isthereM != 0:
1219-
M[border1[np.arange(c, border1.size, 6)] - 1, :] = 0
1220-
M[np.ix_(border1[np.arange(c, border1.size, 6)] - 1,
1221-
border1[np.arange(c, border1.size, 6)] - 1)] -= diag_mat(M[np.ix_(
1222-
border1[np.arange(c, border1.size, 6)] - 1,
1223-
border1[np.arange(c, border1.size, 6)] - 1)],analysis_type[0,2]) - np.eye(
1224-
border1[np.arange(c, border1.size, 6)].size)
1224+
#elif boundaryconditions[0] == 4:
1225+
# srch = np.nonzero(ENFRCDS2[0, :])
1226+
# for c in srch[0]:
1227+
# F[border1[np.arange(c, border1.size, 6)] - 1] = ENFRCDS1[0, c]
1228+
# if isthereM != 0:
1229+
# M[border1[np.arange(c, border1.size, 6)] - 1, :] = 0
1230+
# M[np.ix_(border1[np.arange(c, border1.size, 6)] - 1,
1231+
# border1[np.arange(c, border1.size, 6)] - 1)] -= diag_mat(M[np.ix_(
1232+
# border1[np.arange(c, border1.size, 6)] - 1,
1233+
# border1[np.arange(c, border1.size, 6)] - 1)],analysis_type[0,2]) - np.eye(
1234+
# border1[np.arange(c, border1.size, 6)].size)
12251235

12261236

12271237

@@ -1348,17 +1358,17 @@ def applying_Fix_q(total_loading, X, T, b, box, F, analysis_type, *args):
13481358
M[border1 - 1, :] = 0
13491359
M[:, border1 - 1] = 0
13501360
M[np.ix_(border1 - 1, border1 - 1)] = np.eye(border1.size)
1351-
elif boundaryconditions[1] == 4:
1352-
srch = np.nonzero(ENFRCDS2[1, :])
1353-
for c in srch[0]:
1354-
1355-
if isthereM != 0:
1356-
M[border2[np.arange(c, border2.size, 6)] - 1, :] = 0
1357-
M[np.ix_(border2[np.arange(c, border2.size, 6)] - 1,
1358-
border2[np.arange(c, border2.size, 6)] - 1)] -= diag_mat(M[np.ix_(
1359-
border2[np.arange(c, border2.size, 6)] - 1,
1360-
border2[np.arange(c, border2.size, 6)] - 1)],analysis_type[0,2]) - np.eye(
1361-
border2[np.arange(c, border2.size, 6)].size)
1361+
#elif boundaryconditions[1] == 4:
1362+
# srch = np.nonzero(ENFRCDS2[1, :])
1363+
# for c in srch[0]:
1364+
# F[border2[np.arange(c, border2.size, 6)] - 1] = ENFRCDS1[1, c]
1365+
# if isthereM != 0:
1366+
# M[border2[np.arange(c, border2.size, 6)] - 1, :] = 0
1367+
# M[np.ix_(border2[np.arange(c, border2.size, 6)] - 1,
1368+
# border2[np.arange(c, border2.size, 6)] - 1)] -= diag_mat(M[np.ix_(
1369+
# border2[np.arange(c, border2.size, 6)] - 1,
1370+
# border2[np.arange(c, border2.size, 6)] - 1)],analysis_type[0,2]) - np.eye(
1371+
# border2[np.arange(c, border2.size, 6)].size)
13621372

13631373

13641374
elif boundaryconditions[1] == 5:
@@ -1470,9 +1480,19 @@ def applying_Fix_q(total_loading, X, T, b, box, F, analysis_type, *args):
14701480
F[border3[np.arange(3, border3.size, 6)] - 1] += BCMAssembly(X, T, b3, MY3, 2, x2, 1)
14711481
F[border3[np.arange(4, border3.size, 6)] - 1] += BCMAssembly(X, T, b3, MXY3, 2, x2, 2)
14721482
if boundaryconditions[1] == 2:
1473-
14741483
F[border2 - 1] = 0
14751484

1485+
#elif boundaryconditions[2] == 4:
1486+
# srch = np.nonzero(ENFRCDS2[2, :])
1487+
# for c in srch[0]:
1488+
# F[border3[np.arange(c, border3.size, 6)] - 1] = ENFRCDS1[2, c]
1489+
# if isthereM != 0:
1490+
# M[border3[np.arange(c, border3.size, 6)] - 1, :] = 0
1491+
# M[np.ix_(border3[np.arange(c, border3.size, 6)] - 1,
1492+
# border3[np.arange(c, border3.size, 6)] - 1)] -= diag_mat(M[np.ix_(
1493+
# border3[np.arange(c, border3.size, 6)] - 1,
1494+
# border3[np.arange(c, border3.size, 6)] - 1)],analysis_type[0,2]) - np.eye(
1495+
# border3[np.arange(c, border3.size, 6)].size)
14761496

14771497

14781498
elif boundaryconditions[2] == 5:
@@ -1597,6 +1617,19 @@ def applying_Fix_q(total_loading, X, T, b, box, F, analysis_type, *args):
15971617
F[border1[np.arange(0, 6)] - 1] = 0
15981618

15991619

1620+
#elif boundaryconditions[3] == 4:
1621+
# srch = np.nonzero(ENFRCDS2[3, :])
1622+
# for c in srch[0]:
1623+
# F[border4[np.arange(c, border4.size, 6)] - 1] = ENFRCDS1[3, c]
1624+
# if isthereM != 0:
1625+
# M[border4[np.arange(c, border4.size, 6)] - 1, :] = 0
1626+
# M[np.ix_(border4[np.arange(c, border4.size, 6)] - 1,
1627+
# border4[np.arange(c, border4.size, 6)] - 1)] -= diag_mat(M[np.ix_(
1628+
# border4[np.arange(c, border4.size, 6)] - 1,
1629+
# border4[np.arange(c, border4.size, 6)] - 1)],analysis_type[0,2]) - np.eye(
1630+
# border4[np.arange(c, border4.size, 6)].size)
1631+
1632+
16001633
elif boundaryconditions[3] == 5:
16011634

16021635

@@ -1695,3 +1728,130 @@ def applying_Fix_q(total_loading, X, T, b, box, F, analysis_type, *args):
16951728

16961729

16971730
return F
1731+
1732+
1733+
def get_boundaries(X, b, box):
1734+
ind = 0
1735+
while ind < 4:
1736+
i = 0
1737+
while i < b.shape[1]:
1738+
if b[ind, i] == 0:
1739+
if ind == 0:
1740+
b1 = b[ind, np.arange(0, i)]
1741+
elif ind == 1:
1742+
b2 = b[ind, np.arange(0, i)]
1743+
elif ind == 2:
1744+
b3 = b[ind, np.arange(0, i)]
1745+
elif ind == 3:
1746+
b4 = b[ind, np.arange(0, i)]
1747+
break
1748+
elif b[ind, i] != 0 and i == b.shape[1] - 1:
1749+
if ind == 0:
1750+
b1 = b[ind, np.arange(0, i + 1)]
1751+
elif ind == 1:
1752+
b2 = b[ind, np.arange(0, i + 1)]
1753+
elif ind == 2:
1754+
b3 = b[ind, np.arange(0, i + 1)]
1755+
elif ind == 3:
1756+
b4 = b[ind, np.arange(0, i + 1)]
1757+
break
1758+
i += 1
1759+
ind += 1
1760+
1761+
ii = 0
1762+
while ii < b1.size:
1763+
min = ii
1764+
kk = ii + 1
1765+
while kk < b1.size:
1766+
if X[b1[kk] - 1, 1] < X[b1[min] - 1, 1]:
1767+
min = kk
1768+
1769+
kk += 1
1770+
rempl = b1[min]
1771+
b1[min] = b1[ii]
1772+
b1[ii] = rempl
1773+
ii += 1
1774+
1775+
ii = 0
1776+
while ii < b2.size:
1777+
min = ii
1778+
kk = ii + 1
1779+
while kk < b2.size:
1780+
if X[b2[kk] - 1, 0] < X[b2[min] - 1, 0]:
1781+
min = kk
1782+
1783+
kk += 1
1784+
rempl = b2[min]
1785+
b2[min] = b2[ii]
1786+
b2[ii] = rempl
1787+
ii += 1
1788+
1789+
ii = 0
1790+
while ii < b3.size:
1791+
min = ii
1792+
kk = ii + 1
1793+
while kk < b3.size:
1794+
if X[b3[kk] - 1, 1] < X[b3[min] - 1, 1]:
1795+
min = kk
1796+
1797+
kk += 1
1798+
rempl = b3[min]
1799+
b3[min] = b3[ii]
1800+
b3[ii] = rempl
1801+
ii += 1
1802+
1803+
ii = 0
1804+
while ii < b4.size:
1805+
min = ii
1806+
kk = ii + 1
1807+
while kk < b4.size:
1808+
if X[b4[kk] - 1, 0] < X[b4[min] - 1, 0]:
1809+
min = kk
1810+
kk += 1
1811+
1812+
rempl = b4[min]
1813+
b4[min] = b4[ii]
1814+
b4[ii] = rempl
1815+
ii += 1
1816+
1817+
1818+
x1 = box[0, 0]
1819+
y1 = box[0, 1]
1820+
x2 = box[1, 0]
1821+
y2 = box[1, 1]
1822+
1823+
border1 = np.zeros((1, 6 * b1.size))
1824+
ii = 0
1825+
while ii < b1.size:
1826+
border1[0, np.arange(6 * ii, 6 * ii + 6)] = np.arange(6 * b1[ii] - 5, 6 * b1[ii] + 1)
1827+
ii += 1
1828+
border1 = border1.astype(int)
1829+
border1 = border1[0]
1830+
1831+
border2 = np.zeros((1, 6 * b2.size))
1832+
ii = 0
1833+
while ii < b2.size:
1834+
border2[0, np.arange(6 * ii, 6 * ii + 6)] = np.arange(6 * b2[ii] - 5, 6 * b2[ii] + 1)
1835+
ii += 1
1836+
border2 = border2.astype(int)
1837+
border2 = border2[0]
1838+
1839+
border3 = np.zeros((1, 6 * b3.size))
1840+
ii = 0
1841+
while ii < b3.size:
1842+
border3[0, np.arange(6 * ii, 6 * ii + 6)] = np.arange(6 * b3[ii] - 5, 6 * b3[ii] + 1)
1843+
ii += 1
1844+
border3 = border3.astype(int)
1845+
border3 = border3[0]
1846+
1847+
border4 = np.zeros((1, 6 * b4.size))
1848+
ii = 0
1849+
while ii < b4.size:
1850+
border4[0, np.arange(6 * ii, 6 * ii + 6)] = np.arange(6 * b4[ii] - 5, 6 * b4[ii] + 1)
1851+
ii += 1
1852+
border4 = border4.astype(int)
1853+
border4 = border4[0]
1854+
1855+
bnd = [border1, border2, border3, border4]
1856+
1857+
return bnd
-42.4 KB
Binary file not shown.
-540 Bytes
Binary file not shown.
-4.19 KB
Binary file not shown.

0 commit comments

Comments
 (0)