elasticipy 6.0.0__py3-none-any.whl → 6.1.0__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.
- elasticipy/crystal_texture.py +849 -0
- elasticipy/gui/about.py +12 -10
- elasticipy/gui/gui.py +4 -7
- elasticipy/interfaces/FEPX.py +3 -3
- elasticipy/interfaces/PRISMS.py +3 -3
- elasticipy/plasticity.py +1 -1
- elasticipy/resources/logo_text.png +0 -0
- elasticipy/spherical_function.py +5 -3
- elasticipy/tensors/elasticity.py +149 -18
- elasticipy/tensors/fourth_order.py +32 -11
- elasticipy/tensors/second_order.py +119 -18
- elasticipy/tensors/stress_strain.py +41 -25
- {elasticipy-6.0.0.dist-info → elasticipy-6.1.0.dist-info}/METADATA +6 -4
- elasticipy-6.1.0.dist-info/RECORD +31 -0
- {elasticipy-6.0.0.dist-info → elasticipy-6.1.0.dist-info}/WHEEL +1 -1
- elasticipy-6.1.0.dist-info/entry_points.txt +2 -0
- elasticipy/resources/logo_text.svg +0 -126
- elasticipy-6.0.0.dist-info/RECORD +0 -30
- elasticipy-6.0.0.dist-info/entry_points.txt +0 -2
- {elasticipy-6.0.0.dist-info → elasticipy-6.1.0.dist-info}/licenses/LICENSE +0 -0
- {elasticipy-6.0.0.dist-info → elasticipy-6.1.0.dist-info}/top_level.txt +0 -0
|
@@ -75,7 +75,7 @@ def _map(matrix, mapping_convention):
|
|
|
75
75
|
array[...,i] = matrix[...,j,k]
|
|
76
76
|
return array * mapping_convention
|
|
77
77
|
|
|
78
|
-
def
|
|
78
|
+
def _filldraw_circle(ax, center, radius, color, fill=False, alpha=1.):
|
|
79
79
|
theta = np.linspace(0, 2 * np.pi, 500)
|
|
80
80
|
x = center[0] + radius * np.cos(theta)
|
|
81
81
|
y = center[1] + radius * np.sin(theta)
|
|
@@ -572,12 +572,12 @@ class SecondOrderTensor:
|
|
|
572
572
|
|
|
573
573
|
We can for instance check that:
|
|
574
574
|
|
|
575
|
-
>>> AB_pair[5] == A[5].dot(B[5])
|
|
575
|
+
>>> print(AB_pair[5] == A[5].dot(B[5]))
|
|
576
576
|
True
|
|
577
577
|
|
|
578
578
|
and:
|
|
579
579
|
|
|
580
|
-
>>> AB_cross[0,1] == A[0].dot(B[1])
|
|
580
|
+
>>> print(AB_cross[0,1] == A[0].dot(B[1]))
|
|
581
581
|
True
|
|
582
582
|
|
|
583
583
|
See Also
|
|
@@ -1345,10 +1345,111 @@ class SecondOrderTensor:
|
|
|
1345
1345
|
E13 etc.
|
|
1346
1346
|
kwargs : dict
|
|
1347
1347
|
Keyword arguments passed to pandas.DataFrame.to_csv()
|
|
1348
|
+
|
|
1349
|
+
See Also
|
|
1350
|
+
--------
|
|
1351
|
+
load_from_txt : load a tensor array from a text file
|
|
1352
|
+
|
|
1353
|
+
Examples
|
|
1354
|
+
--------
|
|
1355
|
+
Let's start with a random tensor:
|
|
1356
|
+
|
|
1357
|
+
>>> from elasticipy.tensors.second_order import SecondOrderTensor
|
|
1358
|
+
>>> t = SecondOrderTensor.rand(seed=123) # Use seed to ensure reproducibility
|
|
1359
|
+
>>> t
|
|
1360
|
+
Second-order tensor
|
|
1361
|
+
[[0.68235186 0.05382102 0.22035987]
|
|
1362
|
+
[0.18437181 0.1759059 0.81209451]
|
|
1363
|
+
[0.923345 0.2765744 0.81975456]]
|
|
1364
|
+
|
|
1365
|
+
Then, this tensor can be saved to a text file:
|
|
1366
|
+
|
|
1367
|
+
>>> t.save_as_txt('random_tensor.txt')
|
|
1368
|
+
|
|
1369
|
+
The content of this file will look like this::
|
|
1370
|
+
|
|
1371
|
+
11,12,13,21,22,23,31,32,33
|
|
1372
|
+
0.6823518632481435,0.053821018802222675,0.22035987277261138,0.1843718106986697,0.17590590108503035,0.8120945066557737,0.9233449980270564,0.27657439779710624,0.8197545615930021
|
|
1373
|
+
|
|
1374
|
+
|
|
1375
|
+
Later, this file can be read with ``load_from_txt``:
|
|
1376
|
+
|
|
1377
|
+
>>> t2 = SecondOrderTensor.load_from_txt('random_tensor.txt')
|
|
1378
|
+
>>> t2
|
|
1379
|
+
Second-order tensor
|
|
1380
|
+
Shape=(1,)
|
|
1381
|
+
|
|
1382
|
+
One can note that the returned object is an array here (although ``t`` was a single tensor). This is because the
|
|
1383
|
+
functions above are mainly meant to deal with tensor arrays. Still, we have:
|
|
1384
|
+
|
|
1385
|
+
>>> t2[0]
|
|
1386
|
+
Second-order tensor
|
|
1387
|
+
[[0.68235186 0.05382102 0.22035987]
|
|
1388
|
+
[0.18437181 0.1759059 0.81209451]
|
|
1389
|
+
[0.923345 0.2765744 0.81975456]]
|
|
1390
|
+
|
|
1391
|
+
Now, let's consider a random tensor array:
|
|
1392
|
+
|
|
1393
|
+
>>> t = SecondOrderTensor.rand(shape=(100,), seed=123)
|
|
1394
|
+
|
|
1395
|
+
Have a look on its first value:
|
|
1396
|
+
|
|
1397
|
+
>>> t[0]
|
|
1398
|
+
Second-order tensor
|
|
1399
|
+
[[0.68235186 0.05382102 0.22035987]
|
|
1400
|
+
[0.18437181 0.1759059 0.81209451]
|
|
1401
|
+
[0.923345 0.2765744 0.81975456]]
|
|
1402
|
+
|
|
1403
|
+
Now save the array:
|
|
1404
|
+
|
|
1405
|
+
>>> t.save_as_txt('random_tensor_array.txt')
|
|
1406
|
+
|
|
1407
|
+
and try to reload it:
|
|
1408
|
+
|
|
1409
|
+
>>> t2 = SecondOrderTensor.load_from_txt('random_tensor_array.txt')
|
|
1410
|
+
|
|
1411
|
+
One can check that the original shape has bee retreived:
|
|
1412
|
+
|
|
1413
|
+
>>> t2.shape
|
|
1414
|
+
(100,)
|
|
1415
|
+
|
|
1416
|
+
And that its value are almost the same of the original one (because of round off errors), e.g.:
|
|
1417
|
+
|
|
1418
|
+
>>> t2[0]
|
|
1419
|
+
Second-order tensor
|
|
1420
|
+
[[0.68235186 0.05382102 0.22035987]
|
|
1421
|
+
[0.18437181 0.1759059 0.81209451]
|
|
1422
|
+
[0.923345 0.2765744 0.81975456]]
|
|
1423
|
+
|
|
1424
|
+
By default, the columns in the text file are named 11, 12, etc. These names can be appended with a prefix:
|
|
1425
|
+
|
|
1426
|
+
>>> t.save_as_txt('random_tensor_array_with_prefix.txt', name_prefix='E')
|
|
1427
|
+
|
|
1428
|
+
In this case, the resulting text file will look like this::
|
|
1429
|
+
|
|
1430
|
+
E11,E12,E13,E21,E22,E23,E31,E32,E33
|
|
1431
|
+
0.6823518632481435,0.053821018802222675,0.22035987277261138,0.1843718106986697,0.17590590108503035,0.8120945066557737,0.9233449980270564,0.27657439779710624,0.8197545615930021
|
|
1432
|
+
0.8898926931111859,0.5129704552295319,0.24496460106879647,0.8242415960974113,0.21376296337509548,0.7414670522347097,0.6299402045896808,0.927407258525167,0.23190818860641882
|
|
1433
|
+
0.7991251286200829,0.5181650368527142,0.23155562481706748,0.16590399324074456,0.49778896849779386,0.5827246406153199,0.18433798742847973,0.014894916760232246,0.47113322889046083
|
|
1434
|
+
[...]
|
|
1435
|
+
|
|
1436
|
+
And it can still be parsed to rebuild the tensor:
|
|
1437
|
+
|
|
1438
|
+
>>> t3 = SecondOrderTensor.load_from_txt('random_tensor_array_with_prefix.txt', name_prefix='E')
|
|
1439
|
+
|
|
1440
|
+
One can check that all the values of ``t2`` and ``t3`` are the same:
|
|
1441
|
+
|
|
1442
|
+
>>> import numpy as np
|
|
1443
|
+
>>> np.all(t3 == t2)
|
|
1444
|
+
np.True_
|
|
1348
1445
|
"""
|
|
1349
1446
|
if self.ndim > 1:
|
|
1350
1447
|
raise ValueError('The array must be flatten before getting dumped to text file.')
|
|
1351
1448
|
else:
|
|
1449
|
+
if self.shape:
|
|
1450
|
+
matrix = self.matrix
|
|
1451
|
+
else:
|
|
1452
|
+
matrix = self.matrix[np.newaxis,:,:]
|
|
1352
1453
|
d = dict()
|
|
1353
1454
|
for i in range(3):
|
|
1354
1455
|
if isinstance(self, SkewSymmetricSecondOrderTensor):
|
|
@@ -1359,7 +1460,7 @@ class SecondOrderTensor:
|
|
|
1359
1460
|
r =range(3)
|
|
1360
1461
|
for j in r:
|
|
1361
1462
|
key = name_prefix + '{}{}'.format(i+1, j+1)
|
|
1362
|
-
d[key] =
|
|
1463
|
+
d[key] = matrix[:,i,j]
|
|
1363
1464
|
df = pd.DataFrame(d)
|
|
1364
1465
|
df.to_csv(file, index=False, **kwargs)
|
|
1365
1466
|
|
|
@@ -1384,9 +1485,9 @@ class SecondOrderTensor:
|
|
|
1384
1485
|
df = pd.read_csv(file, **kwargs)
|
|
1385
1486
|
matrix = np.zeros((len(df), 3, 3))
|
|
1386
1487
|
for i in range(3):
|
|
1387
|
-
if cls
|
|
1488
|
+
if issubclass(cls, SkewSymmetricSecondOrderTensor):
|
|
1388
1489
|
r = range(i+1, 3)
|
|
1389
|
-
elif cls
|
|
1490
|
+
elif issubclass(cls, SymmetricSecondOrderTensor):
|
|
1390
1491
|
r = range(i, 3)
|
|
1391
1492
|
else:
|
|
1392
1493
|
r= range(3)
|
|
@@ -1458,9 +1559,9 @@ class SecondOrderTensor:
|
|
|
1458
1559
|
>>> c.shape
|
|
1459
1560
|
(2, 3)
|
|
1460
1561
|
>>> np.all(c[0] == a)
|
|
1461
|
-
|
|
1562
|
+
np.True_
|
|
1462
1563
|
>>> np.all(c[1] == b)
|
|
1463
|
-
|
|
1564
|
+
np.True_
|
|
1464
1565
|
|
|
1465
1566
|
>>> a = SecondOrderTensor.rand(shape=(3, 4))
|
|
1466
1567
|
>>> b = SecondOrderTensor.rand(shape=(3, 4))
|
|
@@ -1468,9 +1569,9 @@ class SecondOrderTensor:
|
|
|
1468
1569
|
>>> c.shape
|
|
1469
1570
|
(3, 2, 4)
|
|
1470
1571
|
>>> np.all(c[:,0,:] == a)
|
|
1471
|
-
|
|
1572
|
+
np.True_
|
|
1472
1573
|
>>> np.all(c[:,1,:] == b)
|
|
1473
|
-
|
|
1574
|
+
np.True_
|
|
1474
1575
|
"""
|
|
1475
1576
|
mat_array = [a.matrix for a in arrays]
|
|
1476
1577
|
if axis<0:
|
|
@@ -1516,7 +1617,7 @@ class SymmetricSecondOrderTensor(SecondOrderTensor):
|
|
|
1516
1617
|
|
|
1517
1618
|
and check that a==b:
|
|
1518
1619
|
|
|
1519
|
-
>>> a==b
|
|
1620
|
+
>>> print(a==b)
|
|
1520
1621
|
True
|
|
1521
1622
|
"""
|
|
1522
1623
|
if isinstance(mat, SecondOrderTensor):
|
|
@@ -1685,12 +1786,12 @@ class SymmetricSecondOrderTensor(SecondOrderTensor):
|
|
|
1685
1786
|
center3 = ((a + c) /2, 0)
|
|
1686
1787
|
|
|
1687
1788
|
fig, ax = plt.subplots()
|
|
1688
|
-
|
|
1689
|
-
|
|
1690
|
-
|
|
1691
|
-
|
|
1692
|
-
|
|
1693
|
-
|
|
1789
|
+
_filldraw_circle(ax, center1, r1, 'skyblue')
|
|
1790
|
+
_filldraw_circle(ax, center2, r2, 'lightgreen')
|
|
1791
|
+
_filldraw_circle(ax, center3, r3, 'red')
|
|
1792
|
+
_filldraw_circle(ax, center3, r3, 'red', fill=True, alpha=0.2)
|
|
1793
|
+
_filldraw_circle(ax, center1, r1, 'white', fill=True)
|
|
1794
|
+
_filldraw_circle(ax, center2, r2, 'white', fill=True)
|
|
1694
1795
|
ax.set_aspect('equal')
|
|
1695
1796
|
ax.set_xlabel(f"Normal")
|
|
1696
1797
|
ax.set_ylabel(f"Shear")
|
|
@@ -1733,7 +1834,7 @@ class SkewSymmetricSecondOrderTensor(SecondOrderTensor):
|
|
|
1733
1834
|
|
|
1734
1835
|
and check that a==b:
|
|
1735
1836
|
|
|
1736
|
-
>>> a==b
|
|
1837
|
+
>>> print(a==b)
|
|
1737
1838
|
True
|
|
1738
1839
|
|
|
1739
1840
|
"""
|
|
@@ -4,8 +4,7 @@ from elasticipy.tensors.second_order import SymmetricSecondOrderTensor
|
|
|
4
4
|
|
|
5
5
|
class StrainTensor(SymmetricSecondOrderTensor):
|
|
6
6
|
"""
|
|
7
|
-
Class for manipulating symmetric strain
|
|
8
|
-
|
|
7
|
+
Class for manipulating the symmetric part of gradient tensor (aka. strain tensor), or arrays of such tensors.
|
|
9
8
|
"""
|
|
10
9
|
name = 'Strain tensor'
|
|
11
10
|
_voigt_map = [1, 1, 1, 2, 2, 2]
|
|
@@ -57,7 +56,7 @@ class StrainTensor(SymmetricSecondOrderTensor):
|
|
|
57
56
|
|
|
58
57
|
>>> from elasticipy.tensors.stress_strain import StrainTensor
|
|
59
58
|
>>> eps = StrainTensor.shear([1,0,0],[0,1,0],1e-3)
|
|
60
|
-
>>> eps.volumetric_strain()
|
|
59
|
+
>>> print(eps.volumetric_strain())
|
|
61
60
|
0.0
|
|
62
61
|
|
|
63
62
|
Now try with hydrastatic straining:
|
|
@@ -69,7 +68,7 @@ class StrainTensor(SymmetricSecondOrderTensor):
|
|
|
69
68
|
[[-0.001 -0. -0. ]
|
|
70
69
|
[-0. -0.001 -0. ]
|
|
71
70
|
[-0. -0. -0.001]]
|
|
72
|
-
>>> eps_hydro.volumetric_strain()
|
|
71
|
+
>>> print(eps_hydro.volumetric_strain())
|
|
73
72
|
-0.003
|
|
74
73
|
"""
|
|
75
74
|
return self.I1
|
|
@@ -93,9 +92,11 @@ class StrainTensor(SymmetricSecondOrderTensor):
|
|
|
93
92
|
Examples
|
|
94
93
|
--------
|
|
95
94
|
>>> from elasticipy.tensors.stress_strain import StrainTensor
|
|
96
|
-
>>> StrainTensor.tensile([1,0,0], 1e-3).eq_strain()
|
|
95
|
+
>>> eps_eq = StrainTensor.tensile([1,0,0], 1e-3).eq_strain()
|
|
96
|
+
>>> print(eps_eq)
|
|
97
97
|
0.000816496580927726
|
|
98
|
-
>>> StrainTensor.shear([1,0,0],[0,1,0], 1e-3).eq_strain()
|
|
98
|
+
>>> eps_eq = StrainTensor.shear([1,0,0],[0,1,0], 1e-3).eq_strain()
|
|
99
|
+
>>> print(eps_eq)
|
|
99
100
|
0.0011547005383792514
|
|
100
101
|
"""
|
|
101
102
|
return np.sqrt(2/3 * self.ddot(self))
|
|
@@ -135,7 +136,8 @@ class StrainTensor(SymmetricSecondOrderTensor):
|
|
|
135
136
|
|
|
136
137
|
Then, the volumetric elastic energy is:
|
|
137
138
|
|
|
138
|
-
>>> eps.elastic_energy(sigma)
|
|
139
|
+
>>> e = eps.elastic_energy(sigma)
|
|
140
|
+
>>> print(e)
|
|
139
141
|
0.13423295454545456
|
|
140
142
|
"""
|
|
141
143
|
return 0.5 * self.ddot(stress, mode=mode)
|
|
@@ -146,6 +148,13 @@ class StrainTensor(SymmetricSecondOrderTensor):
|
|
|
146
148
|
ax.set_ylabel(ax.get_ylabel() + ' strain')
|
|
147
149
|
return fig, ax
|
|
148
150
|
|
|
151
|
+
def save_as_txt(self, file, name_prefix='E', **kwargs):
|
|
152
|
+
super().save_as_txt(file, name_prefix=name_prefix, **kwargs)
|
|
153
|
+
|
|
154
|
+
@classmethod
|
|
155
|
+
def load_from_txt(cls, file, name_prefix='E', **kwargs):
|
|
156
|
+
return super().load_from_txt(file, name_prefix=name_prefix, **kwargs)
|
|
157
|
+
|
|
149
158
|
|
|
150
159
|
class StressTensor(SymmetricSecondOrderTensor):
|
|
151
160
|
"""
|
|
@@ -185,13 +194,13 @@ class StressTensor(SymmetricSecondOrderTensor):
|
|
|
185
194
|
|
|
186
195
|
>>> from elasticipy.tensors.stress_strain import StressTensor
|
|
187
196
|
>>> sigma = StressTensor.tensile([1,0,0],1)
|
|
188
|
-
>>> sigma.vonMises()
|
|
197
|
+
>>> print(sigma.vonMises())
|
|
189
198
|
1.0
|
|
190
199
|
|
|
191
200
|
For (single-valued) shear stress:
|
|
192
201
|
|
|
193
202
|
>>> sigma = StressTensor.shear([1,0,0],[0,1,0],1)
|
|
194
|
-
>>> sigma.vonMises()
|
|
203
|
+
>>> print(sigma.vonMises())
|
|
195
204
|
1.7320508075688772
|
|
196
205
|
|
|
197
206
|
For arrays of stresses :
|
|
@@ -224,13 +233,13 @@ class StressTensor(SymmetricSecondOrderTensor):
|
|
|
224
233
|
|
|
225
234
|
>>> from elasticipy.tensors.stress_strain import StressTensor
|
|
226
235
|
>>> sigma = StressTensor.tensile([1,0,0],1)
|
|
227
|
-
>>> sigma.Tresca()
|
|
236
|
+
>>> print(sigma.Tresca())
|
|
228
237
|
1.0
|
|
229
238
|
|
|
230
239
|
For (single-valued) shear stress:
|
|
231
240
|
|
|
232
241
|
>>> sigma = StressTensor.shear([1,0,0],[0,1,0],1)
|
|
233
|
-
>>> sigma.Tresca()
|
|
242
|
+
>>> print(sigma.Tresca())
|
|
234
243
|
2.0
|
|
235
244
|
|
|
236
245
|
For arrays of stresses :
|
|
@@ -293,20 +302,13 @@ class StressTensor(SymmetricSecondOrderTensor):
|
|
|
293
302
|
|
|
294
303
|
Examples
|
|
295
304
|
--------
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
>>> from elasticipy.tensors.stress_strain import StressTensor
|
|
299
|
-
>>> sigma = StressTensor.tensile([1,0,0],1) + StressTensor.tensile([0,1,0],3)
|
|
305
|
+
Consider the biaxial stress-state:
|
|
300
306
|
|
|
301
|
-
|
|
307
|
+
.. plot::
|
|
302
308
|
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
These principal stresses can be directly plotted with:
|
|
307
|
-
|
|
308
|
-
>>> fig, ax = sigma.draw_Mohr_circles()
|
|
309
|
-
>>> fig.show()
|
|
309
|
+
from elasticipy.tensors.stress_strain import StressTensor
|
|
310
|
+
sigma = StressTensor.tensile([1,0,0],1) + StressTensor.tensile([0,1,0],3)
|
|
311
|
+
sigma.draw_Mohr_circles()
|
|
310
312
|
"""
|
|
311
313
|
fig, ax = super().draw_Mohr_circles()
|
|
312
314
|
ax.set_xlabel(ax.get_xlabel() + ' stress')
|
|
@@ -348,7 +350,7 @@ class StressTensor(SymmetricSecondOrderTensor):
|
|
|
348
350
|
|
|
349
351
|
>>> from elasticipy.tensors.stress_strain import StressTensor
|
|
350
352
|
>>> s1 = StressTensor.tensile([1,0,0],1.)
|
|
351
|
-
>>> s1.triaxiality()
|
|
353
|
+
>>> print(s1.triaxiality())
|
|
352
354
|
0.3333333333333333
|
|
353
355
|
|
|
354
356
|
For a stress array (e.g. for biaxial tensile stress):
|
|
@@ -357,4 +359,18 @@ class StressTensor(SymmetricSecondOrderTensor):
|
|
|
357
359
|
>>> s2.triaxiality()
|
|
358
360
|
array([0.33333333, 0.57735027, 0.66666667])
|
|
359
361
|
"""
|
|
360
|
-
return self.I1 / self.vonMises() / 3
|
|
362
|
+
return self.I1 / self.vonMises() / 3
|
|
363
|
+
|
|
364
|
+
def save_as_txt(self, file, name_prefix='S', **kwargs):
|
|
365
|
+
super().save_as_txt(file, name_prefix=name_prefix, **kwargs)
|
|
366
|
+
|
|
367
|
+
@classmethod
|
|
368
|
+
def load_from_txt(cls, file, name_prefix='S', **kwargs):
|
|
369
|
+
return super().load_from_txt(file, name_prefix=name_prefix, **kwargs)
|
|
370
|
+
|
|
371
|
+
|
|
372
|
+
class StrainRateTensor(StrainTensor):
|
|
373
|
+
"""
|
|
374
|
+
Class for manipulating strain rate tensors, or arrays of strain rate tensors.
|
|
375
|
+
"""
|
|
376
|
+
name = 'Strain rate tensor'
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: elasticipy
|
|
3
|
-
Version: 6.
|
|
3
|
+
Version: 6.1.0
|
|
4
4
|
Summary: A Python library for elasticity tensor computations
|
|
5
5
|
Author-email: Dorian Depriester <dorian.dep@gmail.com>
|
|
6
6
|
License: MIT
|
|
@@ -25,6 +25,7 @@ Requires-Dist: matplotlib
|
|
|
25
25
|
Requires-Dist: qtpy
|
|
26
26
|
Requires-Dist: pyqt5
|
|
27
27
|
Requires-Dist: pandas
|
|
28
|
+
Requires-Dist: orix
|
|
28
29
|
Provides-Extra: dev
|
|
29
30
|
Requires-Dist: pytest; extra == "dev"
|
|
30
31
|
Requires-Dist: pytest-cov; extra == "dev"
|
|
@@ -44,7 +45,7 @@ Dynamic: license-file
|
|
|
44
45
|
[](https://codecov.io/gh/DorianDepriester/Elasticipy)
|
|
45
46
|

|
|
46
47
|
[](https://doi.org/10.21105/joss.07940)
|
|
47
|
-
[](https://mybinder.org/v2/gh/DorianDepriester/
|
|
48
|
+
[](https://mybinder.org/v2/gh/DorianDepriester/elasticipy-notebook/HEAD?urlpath=%2Fdoc%2Ftree%2FElasticipy.ipynb)
|
|
48
49
|
|
|
49
50
|
|
|
50
51
|
# 
|
|
@@ -82,7 +83,7 @@ Tutorials and full documentation are available on [ReadTheDoc](https://elasticip
|
|
|
82
83
|
|
|
83
84
|
## ⏱️ Elasticipy in a nutshell
|
|
84
85
|
Take a 5-minute tour through Elasticipy's main features by running the online Jupyter Notebook, hosted on
|
|
85
|
-
[Binder](https://mybinder.org/v2/gh/DorianDepriester/
|
|
86
|
+
[Binder](https://mybinder.org/v2/gh/DorianDepriester/elasticipy-notebook/HEAD?urlpath=%2Fdoc%2Ftree%2FElasticipy.ipynb).
|
|
86
87
|
|
|
87
88
|
|
|
88
89
|
## 🔍 Sources
|
|
@@ -113,7 +114,8 @@ You can use the following BibTeX entry:
|
|
|
113
114
|
number = {115},
|
|
114
115
|
pages = {7940},
|
|
115
116
|
author = {Depriester, Dorian and Kubler, Régis},
|
|
116
|
-
title = {
|
|
117
|
+
title = {Elasticipy: A Python package for linear elasticity and tensor analysis},
|
|
117
118
|
journal = {Journal of Open Source Software}
|
|
118
119
|
}
|
|
119
120
|
````
|
|
121
|
+
Alternatively, you can by me a coffee on [](https://ko-fi.com/W7W11S5TCH)
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
elasticipy/FourthOrderTensor.py,sha256=tfrR2UMDXAOncViyvbjzExKEiA1AvwzKhgeYD71op2o,508
|
|
2
|
+
elasticipy/StressStrainTensors.py,sha256=qf1hCDtX2N_WlInaav0Ewkqc1J_opKbpO-07i-GRPoQ,491
|
|
3
|
+
elasticipy/ThermalExpansion.py,sha256=hn4MPBaex_LQLjmyfKyYLwTKKYPIOFeOMATlhfq_ROg,411
|
|
4
|
+
elasticipy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
|
+
elasticipy/crystal_symmetries.py,sha256=DAX-XPgYqI2nFvf6anCVvZ5fLM0CNSDJ7r2h15l3Hoc,3958
|
|
6
|
+
elasticipy/crystal_texture.py,sha256=1nLUW8hQ2l3Xq5tMwHYABbpokZoJ5Y8V2AR6HTR4ce8,28431
|
|
7
|
+
elasticipy/plasticity.py,sha256=2rhEcpApfArv0NE8ZYXlJIrbiDKT-FNtvv7hX_liLbU,16763
|
|
8
|
+
elasticipy/polefigure.py,sha256=-Qrf5B4_m8HSlwXfOntie75EUqKnFsl7ZeXx9lNPUsY,4119
|
|
9
|
+
elasticipy/spherical_function.py,sha256=nCSp0o0XVLRU1C8_52dDw3ddTPZM7WCCO5_KOL90UK0,42454
|
|
10
|
+
elasticipy/gui/__init__.py,sha256=nABRj-Vx3Fhxnvd5ag9_TlwCqveXy6A_BX00jKpCzsE,79
|
|
11
|
+
elasticipy/gui/about.py,sha256=zxsU2eBHmcmHdwFvdZ6Pn73PJf72-pmtwx30nMQfnS8,1456
|
|
12
|
+
elasticipy/gui/gui.py,sha256=KH7iLUBTaMxx1YcNN9XQ-xCs8LLSzPwBdlRpmzho0oA,18460
|
|
13
|
+
elasticipy/gui/rotate_window.py,sha256=xzNx9fzCRXFBxq2DqPxIeXS817vcR1K6jQyBGX4b_eg,2398
|
|
14
|
+
elasticipy/interfaces/FEPX.py,sha256=t6c8bqiBDeG6FKCEUFCuA2_qnT-jOfvKvtBk3l8qBQo,4231
|
|
15
|
+
elasticipy/interfaces/PRISMS.py,sha256=m2PLmhdL49YYSivsMGdDcaMJdDXNBzjaqkRE_EIT6wQ,3844
|
|
16
|
+
elasticipy/interfaces/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
17
|
+
elasticipy/resources/favicon.png,sha256=sUmEetdu_fDc7JFSiEn6c7DTU7Y6ZYgRUgaC6RoB4PQ,1492
|
|
18
|
+
elasticipy/resources/logo_text.png,sha256=LuiJmhXuOp0DS5-Gye4x7_Dt98jD-Dv0HsVoXit-ldo,67524
|
|
19
|
+
elasticipy/tensors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
20
|
+
elasticipy/tensors/elasticity.py,sha256=BFmudyrF9NCwL8wXYhhztPvJNqztXKp6Xcf_wLHjy4Q,104904
|
|
21
|
+
elasticipy/tensors/fourth_order.py,sha256=pZe1COdISzZt81IaJoibWProQH1klS5Pbu4VapTH-a4,50283
|
|
22
|
+
elasticipy/tensors/mapping.py,sha256=K9SQDLgg3jW3rpDYzdpwcOJQRf04iSw7xjj8N3fHwT8,3178
|
|
23
|
+
elasticipy/tensors/second_order.py,sha256=73SD9p8JFyAuWsTxvBrFUdyxqTtlODnsxPOD7uJrFEA,60895
|
|
24
|
+
elasticipy/tensors/stress_strain.py,sha256=1LDPrm3sXl-fkjSHt6km6XX6c1veVkw-HojJtCR8C2o,11229
|
|
25
|
+
elasticipy/tensors/thermal_expansion.py,sha256=i0Pld_1VlrfEp-9nhWK1VRm0H2yqcDQ3V9_8vDKpCiA,8648
|
|
26
|
+
elasticipy-6.1.0.dist-info/licenses/LICENSE,sha256=qNthTMSjVkIDM1_BREgVFQHdn1wVNQi9pwWVfTIazMA,1074
|
|
27
|
+
elasticipy-6.1.0.dist-info/METADATA,sha256=aQOB1hOhUieMez8go4a8EYRbUHiZafjww3ITt7wsCos,5800
|
|
28
|
+
elasticipy-6.1.0.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
29
|
+
elasticipy-6.1.0.dist-info/entry_points.txt,sha256=FzF1VdnQui3zO3oM49U0s-3efK_n9tTRCxwSi79uEIU,70
|
|
30
|
+
elasticipy-6.1.0.dist-info/top_level.txt,sha256=EkWNSvs2L7F2nB0tvSJcxv6P3E9OYrIKhczEWu4SetI,11
|
|
31
|
+
elasticipy-6.1.0.dist-info/RECORD,,
|
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
2
|
-
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
|
3
|
-
|
|
4
|
-
<svg
|
|
5
|
-
width="78.908997mm"
|
|
6
|
-
height="36.786999mm"
|
|
7
|
-
viewBox="0 0 78.908996 36.786998"
|
|
8
|
-
version="1.1"
|
|
9
|
-
id="svg1"
|
|
10
|
-
sodipodi:docname="logo_text.svg"
|
|
11
|
-
inkscape:export-filename="logo_text_whitebg.png"
|
|
12
|
-
inkscape:export-xdpi="422.73401"
|
|
13
|
-
inkscape:export-ydpi="422.73401"
|
|
14
|
-
inkscape:version="1.4 (86a8ad7, 2024-10-11)"
|
|
15
|
-
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
16
|
-
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
17
|
-
xmlns:xlink="http://www.w3.org/1999/xlink"
|
|
18
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
19
|
-
xmlns:svg="http://www.w3.org/2000/svg">
|
|
20
|
-
<sodipodi:namedview
|
|
21
|
-
id="namedview1"
|
|
22
|
-
pagecolor="#ffffff"
|
|
23
|
-
bordercolor="#000000"
|
|
24
|
-
borderopacity="0.25"
|
|
25
|
-
inkscape:showpageshadow="2"
|
|
26
|
-
inkscape:pageopacity="0.0"
|
|
27
|
-
inkscape:pagecheckerboard="0"
|
|
28
|
-
inkscape:deskcolor="#d1d1d1"
|
|
29
|
-
inkscape:document-units="mm"
|
|
30
|
-
inkscape:zoom="1.4520904"
|
|
31
|
-
inkscape:cx="120.51591"
|
|
32
|
-
inkscape:cy="48.550696"
|
|
33
|
-
inkscape:window-width="1920"
|
|
34
|
-
inkscape:window-height="1017"
|
|
35
|
-
inkscape:window-x="1912"
|
|
36
|
-
inkscape:window-y="-8"
|
|
37
|
-
inkscape:window-maximized="1"
|
|
38
|
-
inkscape:current-layer="layer1"
|
|
39
|
-
inkscape:export-bgcolor="#ffffffff"
|
|
40
|
-
showgrid="false" />
|
|
41
|
-
<defs
|
|
42
|
-
id="defs1">
|
|
43
|
-
<linearGradient
|
|
44
|
-
inkscape:collect="always"
|
|
45
|
-
xlink:href="#linearGradient4671"
|
|
46
|
-
id="linearGradient11"
|
|
47
|
-
gradientUnits="userSpaceOnUse"
|
|
48
|
-
gradientTransform="matrix(0.26458333,0,0,-0.26458333,62.63747,141.42565)"
|
|
49
|
-
x1="333.83426"
|
|
50
|
-
y1="-25.560944"
|
|
51
|
-
x2="333.83426"
|
|
52
|
-
y2="-79.333092"
|
|
53
|
-
spreadMethod="pad" />
|
|
54
|
-
<linearGradient
|
|
55
|
-
id="linearGradient4671">
|
|
56
|
-
<stop
|
|
57
|
-
style="stop-color:#ffd43b;stop-opacity:1"
|
|
58
|
-
offset="0"
|
|
59
|
-
id="stop4673" />
|
|
60
|
-
<stop
|
|
61
|
-
style="stop-color:#ffe873;stop-opacity:1"
|
|
62
|
-
offset="1"
|
|
63
|
-
id="stop4675" />
|
|
64
|
-
</linearGradient>
|
|
65
|
-
<linearGradient
|
|
66
|
-
inkscape:collect="always"
|
|
67
|
-
xlink:href="#linearGradient4689"
|
|
68
|
-
id="linearGradient9"
|
|
69
|
-
gradientUnits="userSpaceOnUse"
|
|
70
|
-
gradientTransform="matrix(0.26458333,0,0,0.26458333,79.98938,139.19081)"
|
|
71
|
-
x1="181.30275"
|
|
72
|
-
y1="-17.131027"
|
|
73
|
-
x2="256.79184"
|
|
74
|
-
y2="52.408573" />
|
|
75
|
-
<linearGradient
|
|
76
|
-
id="linearGradient4689">
|
|
77
|
-
<stop
|
|
78
|
-
style="stop-color:#5a9fd4;stop-opacity:1"
|
|
79
|
-
offset="0"
|
|
80
|
-
id="stop4691" />
|
|
81
|
-
<stop
|
|
82
|
-
style="stop-color:#306998;stop-opacity:1"
|
|
83
|
-
offset="1"
|
|
84
|
-
id="stop4693" />
|
|
85
|
-
</linearGradient>
|
|
86
|
-
<linearGradient
|
|
87
|
-
inkscape:collect="always"
|
|
88
|
-
xlink:href="#linearGradient4671"
|
|
89
|
-
id="linearGradient2"
|
|
90
|
-
x1="171.01212"
|
|
91
|
-
y1="149.74876"
|
|
92
|
-
x2="171.01212"
|
|
93
|
-
y2="161.5468"
|
|
94
|
-
gradientUnits="userSpaceOnUse" />
|
|
95
|
-
</defs>
|
|
96
|
-
<g
|
|
97
|
-
inkscape:label="Layer 1"
|
|
98
|
-
inkscape:groupmode="layer"
|
|
99
|
-
id="layer1"
|
|
100
|
-
transform="translate(-126.73542,-133.35)">
|
|
101
|
-
<path
|
|
102
|
-
id="text1-4-5-2-54-3"
|
|
103
|
-
style="font-size:192px;text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;display:inline;fill:url(#linearGradient11);fill-opacity:1;stroke-width:0.264583"
|
|
104
|
-
d="m 150.16462,142.15596 c -0.96996,0 -1.83852,0.007 -2.66237,0.0186 0.52425,0.50605 0.97673,1.07142 1.28261,1.74873 0.50892,1.12689 0.82992,2.28417 0.82992,3.53829 v 1.39991 c 2.66736,0.0162 5.07681,0.0196 8.15455,0.0196 0,-0.87942 0.0155,-1.76812 0.0155,-2.4474 0,-2.51527 -0.32529,-4.27777 -7.62021,-4.27777 z m -11.61583,2.07016 c -0.74411,1.15235 -0.76426,2.93071 -0.76946,5.67458 v 0.0248 c 0,1.14102 0.14056,2.1084 0.42168,2.90215 0.11054,0.30092 0.24218,0.57875 0.39378,0.83406 1.45247,-0.19775 2.71407,-2.31732 2.71404,-4.72736 3e-5,-2.43536 -1.28837,-4.55112 -2.76004,-4.70824 z m 16.1029,0.14314 a 1.3449186,1.3449186 0 0 1 1.34513,1.34514 1.3449186,1.3449186 0 0 1 -1.34513,1.34513 1.3449186,1.3449186 0 0 1 -1.34462,-1.34513 1.3449186,1.3449186 0 0 1 1.34462,-1.34514 z m -5.05448,5.9893 c -0.0858,2.29191 -0.60955,4.25462 -1.45572,5.93038 -0.90878,1.81756 -2.28539,2.88556 -4.03025,3.84887 -1.74485,0.96331 -3.67874,1.21646 -6.13244,1.21646 -0.067,0 -0.12977,-0.004 -0.19585,-0.005 -3.2e-4,0.0383 -0.004,0.0729 -0.004,0.11162 v 0.0248 c 0.0134,7.04478 0.0291,7.74475 12.38529,7.74475 7.29492,0 7.62021,-1.7625 7.62021,-4.27777 0,-0.67928 -0.0155,-1.56798 -0.0155,-2.4474 -4.40154,0 -7.05527,-0.01 -11.76001,0.046 -0.74191,0.01 -0.77069,-0.8692 -0.01,-0.8692 4.27995,0 5.96966,-1.55757 5.96966,-6.01823 0,-2.77849 -0.67428,-4.46657 -2.37195,-5.30562 z"
|
|
105
|
-
inkscape:label="epsilon" />
|
|
106
|
-
<path
|
|
107
|
-
id="text1-1-5-1"
|
|
108
|
-
style="font-weight:bold;font-size:192px;font-family:Bahnschrift;-inkscape-font-specification:'Bahnschrift Bold';display:inline;fill:url(#linearGradient9);stroke-width:0.705556"
|
|
109
|
-
d="m 143.34747,134.44325 c -2.87272,0 -8.44558,0.27355 -10.72338,1.48363 -1.5875,0.84336 -2.80293,2.06706 -3.64629,3.6711 -0.82682,1.60402 -1.24023,3.53053 -1.24023,5.77949 v 4.19199 c 0,2.36472 0.41341,4.39043 1.24023,6.07715 0.84336,1.67018 2.05879,2.94349 3.64629,3.81992 1.5875,0.87644 3.49746,1.31465 5.72988,1.31465 2.23242,0 4.14239,-0.43821 5.72989,-1.31465 1.5875,-0.87643 2.79466,-2.14147 3.62148,-3.79511 0.84336,-1.67019 1.26504,-3.67937 1.26504,-6.02754 v -2.03399 c 0,-1.14101 -0.23151,-2.22415 -0.69453,-3.24941 -0.46302,-1.02526 -1.14102,-1.87689 -2.03399,-2.55488 -0.29302,-0.22791 -0.60567,-0.42439 -0.93431,-0.59532 0,0 6.299,0.0465 8.87181,0 0.001,-0.72917 0.0207,-1.55216 0.0207,-2.13475 0,-3.69368 -0.73316,-4.63228 -10.85257,-4.63228 z m 7.72666,2.2779 a 1.3383084,1.3383084 0 0 1 1.33841,1.33842 1.3383084,1.3383084 0 0 1 -1.33841,1.3379 1.3383084,1.3383084 0 0 1 -1.33791,-1.3379 1.3383084,1.3383084 0 0 1 1.33791,-1.33842 z m -12.67365,6.68641 c 1.97408,3e-4 3.57433,2.43687 3.57446,5.44257 6e-5,3.00589 -1.60025,5.44278 -3.57446,5.44308 -1.97441,1.4e-4 -3.57503,-2.43688 -3.57497,-5.44308 1.3e-4,-3.00601 1.60069,-5.44271 3.57497,-5.44257 z"
|
|
110
|
-
inkscape:label="sigma" />
|
|
111
|
-
<path
|
|
112
|
-
style="font-weight:500;font-size:16.9333px;font-family:Flux;-inkscape-font-specification:'Flux Medium';fill:url(#linearGradient2);stroke-width:0.0352778;fill-opacity:1"
|
|
113
|
-
d="m 155.92935,161.50243 v -0.64346 c -0.8636,-0.0339 -1.38853,-0.27094 -1.38853,-1.25307 v -10.02451 l -1.20227,0.38947 v 9.66891 c 0,1.27 0.94827,2.01506 2.5908,1.86266 z m 6.62093,-1.25306 v -4.28413 c 0,-1.37159 -1.2192,-2.18439 -2.45533,-2.18439 -1.016,0 -1.69333,0.16933 -2.57386,0.64346 l 0.3048,0.7112 c 0.66039,-0.33866 1.20226,-0.52493 1.94732,-0.52493 0.82974,0 1.60867,0.57573 1.60867,1.4224 v 0.72813 h -2.01506 c -1.4224,-0.0169 -2.54,0.8636 -2.55693,2.30293 -0.0339,1.35466 1.0668,2.42146 2.40453,2.45533 1.47319,0.0169 2.62466,-0.5588 3.33586,-1.27 z m -1.20227,-0.16933 c -0.22013,0.23706 -0.88053,0.62653 -1.59173,0.60959 -0.98213,0 -1.69333,-0.81279 -1.69333,-1.65946 0,-0.93133 0.7112,-1.4732 1.65947,-1.4732 0.60959,-0.0169 1.23613,-0.0169 1.62559,-0.0169 z m 5.04613,1.50706 c 1.4224,0 2.92947,-0.74507 2.9464,-2.3368 0,-0.67733 -0.3048,-1.11759 -0.7112,-1.43933 -0.38947,-0.3048 -0.8636,-0.47413 -1.3208,-0.6604 -0.47413,-0.18626 -0.98213,-0.38946 -1.35466,-0.55879 -0.38947,-0.16934 -0.64347,-0.4064 -0.64347,-0.82974 0.0169,-0.79586 0.79587,-1.16839 1.50707,-1.16839 0.54186,0.0169 1.0668,0.16933 1.62559,0.49106 l 0.4572,-0.72813 c -0.67733,-0.37253 -1.38853,-0.62653 -2.15053,-0.62653 -1.32079,0 -2.59079,0.77893 -2.59079,2.20133 0,0.69426 0.3048,1.11759 0.7112,1.40546 0.38946,0.3048 0.8636,0.47413 1.3208,0.64347 0.23706,0.0677 0.47413,0.16933 0.69426,0.254 0.5588,0.22013 1.2192,0.44026 1.23613,1.16839 0.0339,0.93133 -0.93133,1.30387 -1.74413,1.30387 -0.6604,-0.0169 -1.40546,-0.27094 -1.91346,-0.6604 l -0.44027,0.7112 c 0.64347,0.49106 1.50707,0.82973 2.37066,0.82973 z m 4.77519,-6.82412 v 4.85986 c 0,1.26999 0.98213,2.01506 2.62466,1.86266 v -0.64347 c -0.8636,-0.0339 -1.38853,-0.27093 -1.38853,-1.25306 v -4.82599 h 1.38853 v -0.79587 h -1.38853 v -2.50612 l -1.23613,0.44026 v 2.06586 h -0.84667 v 0.79587 z m 4.72438,6.62092 h 1.2192 v -7.60305 l -1.2192,0.4064 z m -0.2032,-9.99065 c 0,0.44027 0.3556,0.79587 0.79587,0.79587 0.4572,0 0.8128,-0.3556 0.8128,-0.79587 0,-0.4572 -0.3556,-0.8128 -0.79587,-0.8128 -0.4572,0 -0.8128,0.3556 -0.8128,0.79587 z m 6.33305,10.14305 c 1.08373,0 1.99813,-0.3048 2.72626,-0.77893 l -0.32173,-0.64347 c -0.67733,0.32173 -1.25306,0.6096 -2.04893,0.59267 -1.40546,-0.0169 -2.11666,-1.60867 -2.11666,-2.9464 0,-1.40546 0.6604,-3.08186 1.99813,-3.14959 0.57573,-0.0339 1.27,0.16933 1.77799,0.4064 l 0.3556,-0.6604 c -1.16839,-0.72813 -2.74319,-0.77893 -3.77612,-0.0677 -1.03293,0.7112 -1.60867,2.08279 -1.60867,3.47132 0,1.86267 1.1176,3.7592 3.01413,3.77613 z m 4.45347,-0.1524 h 1.21919 v -7.60305 l -1.21919,0.4064 z m -0.2032,-9.99065 c 0,0.44027 0.3556,0.79587 0.79586,0.79587 0.4572,0 0.8128,-0.3556 0.8128,-0.79587 0,-0.4572 -0.3556,-0.8128 -0.79586,-0.8128 -0.4572,0 -0.8128,0.3556 -0.8128,0.79587 z"
|
|
114
|
-
id="text1"
|
|
115
|
-
aria-label="lasticipy"
|
|
116
|
-
sodipodi:nodetypes="ccsccsccssccsscccccccscccsccccccccsscccccccscsccscccccccccccccccssssssccccsccccscccccccssssss"
|
|
117
|
-
inkscape:label="lastici" />
|
|
118
|
-
<path
|
|
119
|
-
style="font-weight:500;font-size:16.9333px;font-family:Flux;-inkscape-font-specification:'Flux Medium';fill:#646464;stroke-width:0.0352778"
|
|
120
|
-
d="m 193.45354,153.79778 c 2.01506,-0.0339 2.92946,1.86266 2.94639,4.01319 0,1.89653 -0.94826,3.67453 -2.98026,3.74226 -0.82973,0 -1.54093,-0.254 -2.23519,-0.67733 v 4.38573 l -1.2192,-0.44027 0.0169,-9.73665 c -0.0169,0 0.94827,-1.27 3.4544,-1.30386 z m -0.3048,6.87492 c 1.6256,-0.1016 1.8288,-1.69333 1.8288,-2.94639 0,-1.2192 -0.2032,-3.048 -1.74413,-3.11573 -1.04987,-0.0677 -1.89653,0.42333 -2.06587,0.59266 v 4.826 c 0.4064,0.25399 1.2192,0.69426 1.9812,0.64346 z m 6.53626,-1.69333 v -5.19852 l -1.25307,0.42333 v 5.14772 c 0,1.3716 1.27,2.16747 2.3876,2.16747 1.45626,0 2.28599,-0.4064 2.65853,-0.57574 0.0169,0.18627 0,0.13547 0,0.32174 0,0.54186 -0.0169,1.47319 -0.27094,1.94733 -0.508,0.96519 -1.86266,1.10066 -2.81093,1.23613 l 0.2032,0.77893 c 1.25307,-0.0339 3.01413,-0.508 3.64066,-1.69333 0.3556,-0.67733 0.4064,-1.9812 0.4064,-2.8448 v -6.72252 h -1.23613 v 6.04519 c -0.4064,0.27093 -1.15146,0.64347 -1.81186,0.6604 -1.10067,0.0169 -1.91346,-0.57573 -1.91346,-1.71026 z"
|
|
121
|
-
id="text1-2"
|
|
122
|
-
aria-label="lasticipy"
|
|
123
|
-
sodipodi:nodetypes="ccccccccccscccccccsscsccccscccccc"
|
|
124
|
-
inkscape:label="py" />
|
|
125
|
-
</g>
|
|
126
|
-
</svg>
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
elasticipy/FourthOrderTensor.py,sha256=tfrR2UMDXAOncViyvbjzExKEiA1AvwzKhgeYD71op2o,508
|
|
2
|
-
elasticipy/StressStrainTensors.py,sha256=qf1hCDtX2N_WlInaav0Ewkqc1J_opKbpO-07i-GRPoQ,491
|
|
3
|
-
elasticipy/ThermalExpansion.py,sha256=hn4MPBaex_LQLjmyfKyYLwTKKYPIOFeOMATlhfq_ROg,411
|
|
4
|
-
elasticipy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
|
-
elasticipy/crystal_symmetries.py,sha256=DAX-XPgYqI2nFvf6anCVvZ5fLM0CNSDJ7r2h15l3Hoc,3958
|
|
6
|
-
elasticipy/plasticity.py,sha256=I0XeRbNRJ_95Y8QllL_lrWVQjAgvjlBRAh6izzoBB0E,16756
|
|
7
|
-
elasticipy/polefigure.py,sha256=-Qrf5B4_m8HSlwXfOntie75EUqKnFsl7ZeXx9lNPUsY,4119
|
|
8
|
-
elasticipy/spherical_function.py,sha256=e3iAKuYsi8KPiuSGa5mzSihrZwd86fCUnCUyZky8okU,42380
|
|
9
|
-
elasticipy/gui/__init__.py,sha256=nABRj-Vx3Fhxnvd5ag9_TlwCqveXy6A_BX00jKpCzsE,79
|
|
10
|
-
elasticipy/gui/about.py,sha256=XnGWZABk_Wz5v44KcWLTaMQLXwdfhMEK9zIex8RooMM,1424
|
|
11
|
-
elasticipy/gui/gui.py,sha256=GfPmAiyHLfMLrllNtPw0PRflU5RQkg145beP5d5e6xI,18541
|
|
12
|
-
elasticipy/gui/rotate_window.py,sha256=xzNx9fzCRXFBxq2DqPxIeXS817vcR1K6jQyBGX4b_eg,2398
|
|
13
|
-
elasticipy/interfaces/FEPX.py,sha256=sLn-M572rEInhAFBp1wklaOSVYw84PueHmzVvCP57mA,4233
|
|
14
|
-
elasticipy/interfaces/PRISMS.py,sha256=QpOBa3Q9ly10zq13oBgVMIsGkFz2Mzh-bTymF6m8YZE,3835
|
|
15
|
-
elasticipy/interfaces/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
16
|
-
elasticipy/resources/favicon.png,sha256=sUmEetdu_fDc7JFSiEn6c7DTU7Y6ZYgRUgaC6RoB4PQ,1492
|
|
17
|
-
elasticipy/resources/logo_text.svg,sha256=3xF_PQJrYzgup-PHYEgb5yRPWBUUL-AXLwUSpM5EOF0,10578
|
|
18
|
-
elasticipy/tensors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
19
|
-
elasticipy/tensors/elasticity.py,sha256=ailNf4n_09U73scNBZ9kJTHJWuQ77AIs49rI_1vdHSU,98391
|
|
20
|
-
elasticipy/tensors/fourth_order.py,sha256=O0oXPXbVayXJD_dIUqadeKe2L8SFbG18Nblb6gG2SKE,49577
|
|
21
|
-
elasticipy/tensors/mapping.py,sha256=K9SQDLgg3jW3rpDYzdpwcOJQRf04iSw7xjj8N3fHwT8,3178
|
|
22
|
-
elasticipy/tensors/second_order.py,sha256=WSVhtFe6O5W9dIBlbqRCtWrumUl2o56leX_nCDWgBoY,57073
|
|
23
|
-
elasticipy/tensors/stress_strain.py,sha256=9475JsQs6yiDF7bwkoMZlHBF_mK3SZy3vasc5xdtZ6M,10566
|
|
24
|
-
elasticipy/tensors/thermal_expansion.py,sha256=i0Pld_1VlrfEp-9nhWK1VRm0H2yqcDQ3V9_8vDKpCiA,8648
|
|
25
|
-
elasticipy-6.0.0.dist-info/licenses/LICENSE,sha256=qNthTMSjVkIDM1_BREgVFQHdn1wVNQi9pwWVfTIazMA,1074
|
|
26
|
-
elasticipy-6.0.0.dist-info/METADATA,sha256=yDavWvY7-52dtiGsfbugkVeoMMe7BmOc5C6Doe16M9M,5673
|
|
27
|
-
elasticipy-6.0.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
28
|
-
elasticipy-6.0.0.dist-info/entry_points.txt,sha256=giDQPKF6ucGGxo5_PpuSqnmOka5xs_QuwCvTYTNpACY,70
|
|
29
|
-
elasticipy-6.0.0.dist-info/top_level.txt,sha256=EkWNSvs2L7F2nB0tvSJcxv6P3E9OYrIKhczEWu4SetI,11
|
|
30
|
-
elasticipy-6.0.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|