elasticipy 3.0.0__tar.gz → 4.1.0__tar.gz
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-3.0.0 → elasticipy-4.1.0}/.github/workflows/Codecov.yml +1 -1
- {elasticipy-3.0.0 → elasticipy-4.1.0}/.readthedocs.yaml +1 -1
- elasticipy-4.1.0/CITATION.bib +17 -0
- elasticipy-4.1.0/CITATION.cff +11 -0
- {elasticipy-3.0.0 → elasticipy-4.1.0}/CONTRIBUTING.md +1 -1
- {elasticipy-3.0.0 → elasticipy-4.1.0}/Examples/Elasticipy_vs_pymatgen.py +2 -4
- {elasticipy-3.0.0 → elasticipy-4.1.0}/Examples/Elate_vs_Elasticipy.py +3 -3
- {elasticipy-3.0.0 → elasticipy-4.1.0}/Examples/Example_Stiffness_tensor.py +33 -11
- {elasticipy-3.0.0 → elasticipy-4.1.0}/Examples/Example_StressStrain_arrays.py +4 -4
- {elasticipy-3.0.0 → elasticipy-4.1.0}/Examples/Example_WaveVelocity.py +7 -9
- {elasticipy-3.0.0 → elasticipy-4.1.0}/Examples/Multiple_phases.py +1 -1
- elasticipy-4.1.0/Examples/SelfConsistent.py +86 -0
- {elasticipy-3.0.0 → elasticipy-4.1.0}/Examples/essai_plasticity.py +5 -6
- {elasticipy-3.0.0 → elasticipy-4.1.0}/Examples/example_readwrite.py +1 -1
- elasticipy-4.1.0/JOSS/YoungModulus.png +0 -0
- {elasticipy-3.0.0 → elasticipy-4.1.0}/JOSS/paper.md +15 -11
- {elasticipy-3.0.0/src/elasticipy.egg-info → elasticipy-4.1.0}/PKG-INFO +26 -8
- {elasticipy-3.0.0 → elasticipy-4.1.0}/README.md +20 -5
- elasticipy-4.1.0/docs/source/Elasticipy.interfaces.FEPX.rst +7 -0
- elasticipy-4.1.0/docs/source/Elasticipy.interfaces.PRISMS.rst +7 -0
- elasticipy-4.1.0/docs/source/Elasticipy.plasticity.rst +7 -0
- elasticipy-4.1.0/docs/source/Elasticipy.rst +25 -0
- elasticipy-4.1.0/docs/source/Elasticipy.spherical_function.rst +7 -0
- elasticipy-4.1.0/docs/source/Elasticipy.tensors.elasticity.rst +7 -0
- elasticipy-4.1.0/docs/source/Elasticipy.tensors.fourth_order.rst +7 -0
- elasticipy-4.1.0/docs/source/Elasticipy.tensors.second_order.rst +7 -0
- elasticipy-4.1.0/docs/source/Elasticipy.tensors.stress_strain.rst +7 -0
- {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/source/Tutorials/Plasticity.rst +10 -11
- {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/source/Tutorials/Tutorial_AveragingMethods.rst +2 -2
- {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/source/Tutorials/Tutorial_MultiplePhases.rst +1 -1
- {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/source/Tutorials/Tutorial_ReadWriteFiles.rst +3 -2
- {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/source/Tutorials/Tutorial_StiffnessTensor.rst +13 -1
- {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/source/Tutorials/Tutorial_StressStrain.rst +48 -10
- {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/source/Tutorials/Tutorial_ThermalExpansion.rst +1 -1
- {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/source/Tutorials/Tutorial_wave-velocities.rst +11 -12
- elasticipy-4.1.0/docs/source/Tutorials/images/Mohr.png +0 -0
- {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/source/conf.py +7 -1
- elasticipy-4.1.0/docs/source/logo/favicon.png +0 -0
- elasticipy-4.1.0/docs/source/logo/logo.png +0 -0
- elasticipy-4.1.0/docs/source/logo/logo.svg +100 -0
- elasticipy-4.1.0/docs/source/logo/logo_text.png +0 -0
- elasticipy-4.1.0/docs/source/logo/logo_text.svg +126 -0
- elasticipy-4.1.0/docs/source/logo/logo_text_whitebg.png +0 -0
- {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/source/modules.rst +1 -1
- {elasticipy-3.0.0 → elasticipy-4.1.0}/pyproject.toml +5 -3
- {elasticipy-3.0.0 → elasticipy-4.1.0}/requirements.txt +2 -1
- elasticipy-4.1.0/src/Elasticipy/FourthOrderTensor.py +16 -0
- elasticipy-4.1.0/src/Elasticipy/StressStrainTensors.py +16 -0
- elasticipy-4.1.0/src/Elasticipy/ThermalExpansion.py +12 -0
- {elasticipy-3.0.0 → elasticipy-4.1.0}/src/Elasticipy/gui.py +3 -3
- elasticipy-4.1.0/src/Elasticipy/interfaces/FEPX.py +119 -0
- elasticipy-4.1.0/src/Elasticipy/interfaces/PRISMS.py +103 -0
- elasticipy-3.0.0/src/Elasticipy/Plasticity.py → elasticipy-4.1.0/src/Elasticipy/plasticity.py +35 -2
- elasticipy-3.0.0/src/Elasticipy/PoleFigure.py → elasticipy-4.1.0/src/Elasticipy/polefigure.py +21 -0
- elasticipy-3.0.0/src/Elasticipy/SphericalFunction.py → elasticipy-4.1.0/src/Elasticipy/spherical_function.py +3 -15
- elasticipy-3.0.0/src/Elasticipy/FourthOrderTensor.py → elasticipy-4.1.0/src/Elasticipy/tensors/elasticity.py +532 -563
- elasticipy-4.1.0/src/Elasticipy/tensors/fourth_order.py +662 -0
- elasticipy-4.1.0/src/Elasticipy/tensors/mapping.py +44 -0
- elasticipy-3.0.0/src/Elasticipy/SecondOrderTensor.py → elasticipy-4.1.0/src/Elasticipy/tensors/second_order.py +113 -9
- elasticipy-3.0.0/src/Elasticipy/StressStrainTensors.py → elasticipy-4.1.0/src/Elasticipy/tensors/stress_strain.py +21 -5
- elasticipy-3.0.0/src/Elasticipy/ThermalExpansion.py → elasticipy-4.1.0/src/Elasticipy/tensors/thermal_expansion.py +2 -2
- {elasticipy-3.0.0 → elasticipy-4.1.0/src/elasticipy.egg-info}/PKG-INFO +26 -8
- elasticipy-4.1.0/src/elasticipy.egg-info/SOURCES.txt +130 -0
- {elasticipy-3.0.0 → elasticipy-4.1.0}/src/elasticipy.egg-info/requires.txt +3 -1
- elasticipy-4.1.0/tests/__init__.py +0 -0
- elasticipy-4.1.0/tests/interfaces/FEPX/simulation.sim/.sim +23 -0
- elasticipy-4.1.0/tests/interfaces/FEPX/simulation.sim/results/elts/defrate/defrate.step0 +2453 -0
- elasticipy-4.1.0/tests/interfaces/FEPX/simulation.sim/results/elts/defrate/defrate.step1 +2453 -0
- elasticipy-4.1.0/tests/interfaces/FEPX/simulation.sim/results/elts/defrate/defrate.step2 +2453 -0
- elasticipy-4.1.0/tests/interfaces/FEPX/simulation.sim/results/elts/ori/ori.step0 +2453 -0
- elasticipy-4.1.0/tests/interfaces/FEPX/simulation.sim/results/elts/ori/ori.step1 +2453 -0
- elasticipy-4.1.0/tests/interfaces/FEPX/simulation.sim/results/elts/ori/ori.step2 +2453 -0
- elasticipy-4.1.0/tests/interfaces/FEPX/simulation.sim/results/elts/spinrate/spinrate.step0 +2453 -0
- elasticipy-4.1.0/tests/interfaces/FEPX/simulation.sim/results/elts/spinrate/spinrate.step1 +2453 -0
- elasticipy-4.1.0/tests/interfaces/FEPX/simulation.sim/results/elts/spinrate/spinrate.step2 +2453 -0
- elasticipy-4.1.0/tests/interfaces/FEPX/simulation.sim/results/elts/strain/strain.step0 +2453 -0
- elasticipy-4.1.0/tests/interfaces/FEPX/simulation.sim/results/elts/strain/strain.step1 +2453 -0
- elasticipy-4.1.0/tests/interfaces/FEPX/simulation.sim/results/elts/strain/strain.step2 +2453 -0
- elasticipy-4.1.0/tests/interfaces/FEPX/simulation.sim/results/elts/stress/stress.step0 +2453 -0
- elasticipy-4.1.0/tests/interfaces/FEPX/simulation.sim/results/elts/stress/stress.step1 +2453 -0
- elasticipy-4.1.0/tests/interfaces/FEPX/simulation.sim/results/elts/stress/stress.step2 +2453 -0
- elasticipy-4.1.0/tests/interfaces/FEPX/simulation.sim/results/elts/velgrad/velgrad.step0 +2453 -0
- elasticipy-4.1.0/tests/interfaces/FEPX/simulation.sim/results/elts/velgrad/velgrad.step1 +2453 -0
- elasticipy-4.1.0/tests/interfaces/FEPX/simulation.sim/results/elts/velgrad/velgrad.step2 +2453 -0
- elasticipy-4.1.0/tests/interfaces/PRISMS/QuadratureOutputs.csv +64 -0
- elasticipy-4.1.0/tests/interfaces/PRISMS/stressstrain.txt +101 -0
- elasticipy-4.1.0/tests/test_FourthOrderTensors.py +112 -0
- {elasticipy-3.0.0 → elasticipy-4.1.0}/tests/test_SphericalFunction.py +3 -3
- {elasticipy-3.0.0 → elasticipy-4.1.0}/tests/test_StiffnessTensor.py +265 -96
- {elasticipy-3.0.0 → elasticipy-4.1.0}/tests/test_StressStrainTensors.py +49 -12
- {elasticipy-3.0.0 → elasticipy-4.1.0}/tests/test_ThermalExpansion.py +10 -4
- elasticipy-4.1.0/tests/test_interfaces_FEPX.py +51 -0
- elasticipy-4.1.0/tests/test_interfaces_prisms.py +66 -0
- {elasticipy-3.0.0 → elasticipy-4.1.0}/tests/test_plasticity.py +25 -4
- elasticipy-3.0.0/JOSS/YoungModulus.png +0 -0
- elasticipy-3.0.0/docs/source/Elasticipy.FourthOrderTensor.rst +0 -7
- elasticipy-3.0.0/docs/source/Elasticipy.Plasticity.rst +0 -7
- elasticipy-3.0.0/docs/source/Elasticipy.SecondOrderTensor.rst +0 -7
- elasticipy-3.0.0/docs/source/Elasticipy.SphericalFunction.rst +0 -7
- elasticipy-3.0.0/docs/source/Elasticipy.StressStrainTensors.rst +0 -7
- elasticipy-3.0.0/docs/source/Elasticipy.rst +0 -22
- elasticipy-3.0.0/src/elasticipy.egg-info/SOURCES.txt +0 -85
- {elasticipy-3.0.0 → elasticipy-4.1.0}/.github/workflows/JOSS build.yml +0 -0
- {elasticipy-3.0.0 → elasticipy-4.1.0}/.github/workflows/cloc.yml +0 -0
- {elasticipy-3.0.0 → elasticipy-4.1.0}/.github/workflows/python-publish.yml +0 -0
- {elasticipy-3.0.0 → elasticipy-4.1.0}/CODE_OF_CONDUCT.md +0 -0
- {elasticipy-3.0.0 → elasticipy-4.1.0}/Examples/MaterialsProject.json +0 -0
- {elasticipy-3.0.0 → elasticipy-4.1.0}/JOSS/ElasticipyVSpymatgen.png +0 -0
- {elasticipy-3.0.0 → elasticipy-4.1.0}/JOSS/Nye.png +0 -0
- {elasticipy-3.0.0 → elasticipy-4.1.0}/JOSS/Plot_E.png +0 -0
- {elasticipy-3.0.0 → elasticipy-4.1.0}/JOSS/paper.bib +0 -0
- {elasticipy-3.0.0 → elasticipy-4.1.0}/LICENSE +0 -0
- {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/_static/images/HyperSphericalCoordinates.png +0 -0
- {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/index.rst +0 -0
- {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/source/Tutorials/GUI.rst +0 -0
- {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/source/Tutorials/images/Cyclic.png +0 -0
- {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/source/Tutorials/images/E_PF.png +0 -0
- {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/source/Tutorials/images/E_VRH_sections.png +0 -0
- {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/source/Tutorials/images/E_hill_fiber.png +0 -0
- {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/source/Tutorials/images/E_plot3D.png +0 -0
- {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/source/Tutorials/images/E_xyz_sections.png +0 -0
- {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/source/Tutorials/images/GUI.png +0 -0
- {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/source/Tutorials/images/G_plot3D.png +0 -0
- {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/source/Tutorials/images/G_plot3D_min.png +0 -0
- {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/source/Tutorials/images/G_xyz_sections.png +0 -0
- {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/source/Tutorials/images/Incremental.png +0 -0
- {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/source/Tutorials/images/Shear.png +0 -0
- {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/source/Tutorials/images/Stress-controlled.png +0 -0
- {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/source/Tutorials/images/StressStrain-controlled.png +0 -0
- {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/source/Tutorials/images/WaveVelocities.png +0 -0
- {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/source/Tutorials/images/plot_volumeFraction.png +0 -0
- {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/source/Tutorials.rst +0 -0
- {elasticipy-3.0.0 → elasticipy-4.1.0}/docs/source/index.rst +0 -0
- {elasticipy-3.0.0 → elasticipy-4.1.0}/setup.cfg +0 -0
- {elasticipy-3.0.0 → elasticipy-4.1.0}/src/Elasticipy/__init__.py +0 -0
- /elasticipy-3.0.0/src/Elasticipy/CrystalSymmetries.py → /elasticipy-4.1.0/src/Elasticipy/crystal_symmetries.py +0 -0
- {elasticipy-3.0.0/tests → elasticipy-4.1.0/src/Elasticipy/tensors}/__init__.py +0 -0
- {elasticipy-3.0.0 → elasticipy-4.1.0}/src/elasticipy.egg-info/dependency_links.txt +0 -0
- {elasticipy-3.0.0 → elasticipy-4.1.0}/src/elasticipy.egg-info/top_level.txt +0 -0
- {elasticipy-3.0.0 → elasticipy-4.1.0}/tests/MaterialsProject.json +0 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
@software{dorian_depriester_2025_15188346,
|
|
2
|
+
author = {Dorian Depriester},
|
|
3
|
+
title = {DorianDepriester/Elasticipy: v4.0.0},
|
|
4
|
+
month = apr,
|
|
5
|
+
year = 2025,
|
|
6
|
+
publisher = {Zenodo},
|
|
7
|
+
version = {v4.0.0},
|
|
8
|
+
doi = {10.5281/zenodo.15188346},
|
|
9
|
+
url = {https://doi.org/10.5281/zenodo.15188346},
|
|
10
|
+
swhid = {swh:1:dir:f9538575fb87ee10510bd51906012987986fc36a
|
|
11
|
+
;origin=https://doi.org/10.5281/zenodo.14501849;vi
|
|
12
|
+
sit=swh:1:snp:20bf603cb1ae305b4d37a4567557ac860e09
|
|
13
|
+
d3e5;anchor=swh:1:rel:6dad2d91dcebe09e35d44f82a0c8
|
|
14
|
+
a46c77f0d057;path=DorianDepriester-
|
|
15
|
+
Elasticipy-c8bfc05
|
|
16
|
+
},
|
|
17
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
cff-version: 1.2.0
|
|
2
|
+
message: "If you use this software, please cite it as below."
|
|
3
|
+
authors:
|
|
4
|
+
- family-names: "Depriester"
|
|
5
|
+
given-names: "Dorian"
|
|
6
|
+
orcid: "https://orcid.org/0000-0002-2881-8942"
|
|
7
|
+
title: "Elasticipy"
|
|
8
|
+
version: 4.0.0
|
|
9
|
+
doi: 10.5281/zenodo.15188346
|
|
10
|
+
date-released: 2025-04-10
|
|
11
|
+
url: "https://github.com/DorianDepriester/Elasticipy"
|
|
@@ -25,7 +25,7 @@ All types of contributions are encouraged and valued. See the [Table of Contents
|
|
|
25
25
|
## Code of Conduct
|
|
26
26
|
|
|
27
27
|
This project and everyone participating in it is governed by the
|
|
28
|
-
[Elasticipy Code of Conduct](https://github.com/DorianDepriester/Elasticipy/blob
|
|
28
|
+
[Elasticipy Code of Conduct](https://github.com/DorianDepriester/Elasticipy/blob/main/CODE_OF_CONDUCT.md).
|
|
29
29
|
By participating, you are expected to uphold this code. Please report unacceptable behavior
|
|
30
30
|
to <dorian.dep@gmail.com>.
|
|
31
31
|
|
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
from
|
|
2
|
-
|
|
3
|
-
from Elasticipy.StressStrainTensors import StrainTensor
|
|
4
|
-
from Elasticipy.FourthOrderTensor import StiffnessTensor
|
|
1
|
+
from Elasticipy.tensors.stress_strain import StrainTensor
|
|
2
|
+
from Elasticipy.tensors.elasticity import StiffnessTensor
|
|
5
3
|
from matplotlib import pyplot as plt
|
|
6
4
|
import matplotlib as mpl
|
|
7
5
|
mpl.use('Qt5Agg') # Ensure interactive plot
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import numpy as np
|
|
2
2
|
from elastic import Elastic
|
|
3
|
-
from Elasticipy.
|
|
3
|
+
from Elasticipy.tensors.elasticity import StiffnessTensor
|
|
4
4
|
import matplotlib as mpl
|
|
5
5
|
mpl.use('Qt5Agg') # Ensure interactive plot
|
|
6
|
-
from Elasticipy.
|
|
6
|
+
from Elasticipy.spherical_function import sph2cart, _plot3D
|
|
7
7
|
import time
|
|
8
8
|
import matplotlib.pyplot as plt
|
|
9
9
|
|
|
@@ -13,7 +13,7 @@ C = StiffnessTensor.monoclinic(phase_name='TiNi',
|
|
|
13
13
|
C22=240, C23=131, C33=175,
|
|
14
14
|
C44=81, C55=11, C66=85,
|
|
15
15
|
C15=-18, C25=1, C35=-3, C46=3)
|
|
16
|
-
Celate = Elastic(list(C.
|
|
16
|
+
Celate = Elastic(list(C._matrix))
|
|
17
17
|
|
|
18
18
|
# Plotting with Elate
|
|
19
19
|
start_time=time.perf_counter()
|
|
@@ -1,7 +1,14 @@
|
|
|
1
|
-
from Elasticipy.
|
|
1
|
+
from Elasticipy.tensors.elasticity import StiffnessTensor
|
|
2
2
|
from scipy.spatial.transform import Rotation
|
|
3
|
+
|
|
4
|
+
################################################
|
|
5
|
+
# The lines below are only required in PyCharm
|
|
6
|
+
################################################
|
|
3
7
|
import matplotlib as mpl
|
|
4
|
-
mpl.use('Qt5Agg')
|
|
8
|
+
mpl.use('Qt5Agg')
|
|
9
|
+
from qtpy import QtWidgets
|
|
10
|
+
app = QtWidgets.QApplication.instance() or QtWidgets.QApplication([])
|
|
11
|
+
################################################
|
|
5
12
|
|
|
6
13
|
# First, let consider the NiTi material:
|
|
7
14
|
C = StiffnessTensor.fromCrystalSymmetry(symmetry='monoclinic', diad='y', phase_name='TiNi',
|
|
@@ -15,29 +22,43 @@ print(C)
|
|
|
15
22
|
E = C.Young_modulus
|
|
16
23
|
# See min/max values
|
|
17
24
|
print(E)
|
|
25
|
+
|
|
18
26
|
# Now illustrate the spatial dependence
|
|
19
|
-
E.plot_xyz_sections() # As 2D sections...
|
|
20
|
-
|
|
21
|
-
E.
|
|
27
|
+
fig,_ = E.plot_xyz_sections() # As 2D sections...
|
|
28
|
+
fig.show()
|
|
29
|
+
fig,_ = E.plot3D() # ...or in 3D
|
|
30
|
+
fig.show()
|
|
31
|
+
fig,_ =E.plot_as_pole_figure() # or even with PF
|
|
32
|
+
fig.show()
|
|
33
|
+
|
|
34
|
+
# Print out the maximum value for the Young modulus
|
|
22
35
|
print(E.max())
|
|
23
36
|
|
|
24
37
|
# Apply a random rotation on stiffness tensor
|
|
25
38
|
rotation = Rotation.from_euler('ZXZ', [90, 45, 0], degrees=True)
|
|
26
39
|
Crot = C*rotation
|
|
27
40
|
# Check that the Young modulus has changed as well
|
|
28
|
-
Crot.Young_modulus.plot3D()
|
|
41
|
+
fig, _ = Crot.Young_modulus.plot3D()
|
|
42
|
+
fig.show()
|
|
29
43
|
|
|
30
44
|
# Now let's consider the shear modulus
|
|
31
45
|
G = C.shear_modulus
|
|
32
|
-
G.plot_xyz_sections() # Plot sections with min, max and mean
|
|
33
|
-
|
|
46
|
+
fig,_ = G.plot_xyz_sections() # Plot sections with min, max and mean
|
|
47
|
+
fig.show()
|
|
48
|
+
|
|
49
|
+
fig,_ = G.plot3D() # And plot it in 3D
|
|
50
|
+
fig.show()
|
|
34
51
|
print(G.min())
|
|
35
52
|
print(G.max())
|
|
36
53
|
|
|
37
54
|
# Finally, let's have a look on the Poisson ratio
|
|
38
55
|
nu = C.Poisson_ratio
|
|
39
|
-
nu.plot_xyz_sections()
|
|
40
|
-
|
|
56
|
+
fig,_ = nu.plot_xyz_sections()
|
|
57
|
+
fig.show()
|
|
58
|
+
fig,_ = nu.plot3D(which='max')
|
|
59
|
+
fig.show()
|
|
60
|
+
|
|
61
|
+
# Check out the maximum and minimum values
|
|
41
62
|
print(nu.min())
|
|
42
63
|
print(nu.max())
|
|
43
64
|
|
|
@@ -45,7 +66,8 @@ print(nu.max())
|
|
|
45
66
|
oris = Rotation.random(1000)
|
|
46
67
|
Crotated = C*oris # Compute the Voigt average
|
|
47
68
|
Cvoigt = Crotated.Voigt_average()
|
|
48
|
-
print(Cvoigt.Young_modulus) # Look at the corresponding Young
|
|
69
|
+
print(Cvoigt.Young_modulus) # Look at the corresponding Young moduli
|
|
49
70
|
print(C.Voigt_average().Young_modulus) # Compare with infinite number of orientations
|
|
50
71
|
|
|
51
72
|
|
|
73
|
+
app.exec() # Only required in PyCharm (see lines 7-10)
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
# Imports and simple example of stress
|
|
3
3
|
# ======================================================
|
|
4
4
|
import numpy as np
|
|
5
|
-
from Elasticipy.
|
|
5
|
+
from Elasticipy.tensors.stress_strain import StressTensor, StrainTensor
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
stress = StressTensor([[0, 1, 0],
|
|
@@ -23,7 +23,7 @@ print(strain.volumetric_strain())
|
|
|
23
23
|
# ======================================================
|
|
24
24
|
# Linear elasticity
|
|
25
25
|
# ======================================================
|
|
26
|
-
from Elasticipy.
|
|
26
|
+
from Elasticipy.tensors.elasticity import StiffnessTensor
|
|
27
27
|
|
|
28
28
|
C = StiffnessTensor.fromCrystalSymmetry(symmetry='cubic', phase_name='ferrite',
|
|
29
29
|
C11=274, C12=175, C44=89)
|
|
@@ -61,7 +61,7 @@ from scipy.spatial.transform import Rotation
|
|
|
61
61
|
n_ori = 1000
|
|
62
62
|
rotations = Rotation.random(n_ori)
|
|
63
63
|
|
|
64
|
-
eps_rotated = eps.
|
|
64
|
+
eps_rotated = eps.rotate(rotations, mode='cross')
|
|
65
65
|
print(eps_rotated.shape) # Just to check how it looks like
|
|
66
66
|
|
|
67
67
|
sigma_rotated = C * eps_rotated
|
|
@@ -72,7 +72,7 @@ sigma_mean = sigma.mean(axis=1) # Compute the mean over all orientations
|
|
|
72
72
|
print(sigma_mean[-1])
|
|
73
73
|
|
|
74
74
|
C_rotated = C * rotations
|
|
75
|
-
C_Voigt = C_rotated.Voigt_average()
|
|
75
|
+
C_Voigt = C_rotated.Voigt_average() # Now check that the previous result is consistent with Voigt average
|
|
76
76
|
sigma_Voigt = C_Voigt * eps
|
|
77
77
|
print(sigma_Voigt[-1])
|
|
78
78
|
|
|
@@ -1,16 +1,14 @@
|
|
|
1
|
-
from Elasticipy.
|
|
2
|
-
import matplotlib as mpl
|
|
3
|
-
mpl.use('Qt5Agg') # Ensure interactive plot
|
|
1
|
+
from Elasticipy.tensors.elasticity import StiffnessTensor
|
|
4
2
|
from matplotlib import pyplot as plt
|
|
5
3
|
|
|
6
|
-
C = StiffnessTensor.fromCrystalSymmetry(symmetry='
|
|
4
|
+
C = StiffnessTensor.fromCrystalSymmetry(symmetry='orthorhombic', phase_name='forsterite',
|
|
7
5
|
C11=320, C12=68.2, C13=71.6,
|
|
8
6
|
C22=196.5, C23=76.8, C33=233.5, C44=64, C55=77, C66=78.7)
|
|
9
7
|
rho = 3.355
|
|
10
8
|
|
|
11
9
|
cp, cs_fast, cs_slow = C.wave_velocity(rho)
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
10
|
+
fig = plt.figure(figsize=(12,4))
|
|
11
|
+
cp.plot_as_pole_figure(subplot_args=(131,), title='p wave', fig=fig)
|
|
12
|
+
cs_fast.plot_as_pole_figure(subplot_args=(132,), title='s wave (fast)', fig=fig)
|
|
13
|
+
cs_slow.plot_as_pole_figure(subplot_args=(133,), title='s wave (slow)', fig=fig)
|
|
14
|
+
fig.show()
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import numpy as np
|
|
2
|
+
from Elasticipy.tensors.fourth_order import FourthOrderTensor
|
|
3
|
+
from Elasticipy.tensors.elasticity import StiffnessTensor
|
|
4
|
+
from scipy.integrate import trapezoid
|
|
5
|
+
from scipy.spatial.transform import Rotation
|
|
6
|
+
|
|
7
|
+
I = FourthOrderTensor.identity()
|
|
8
|
+
|
|
9
|
+
def gamma(C_macro_local, phi, theta, a1, a2, a3):
|
|
10
|
+
s1 = np.sin(theta)*np.cos(phi) / a1
|
|
11
|
+
s2 = np.sin(theta)*np.sin(phi) / a2
|
|
12
|
+
s3 = np.cos(theta) / a3
|
|
13
|
+
s = np.array([s1, s2, s3])
|
|
14
|
+
D = np.einsum('lmnp,pqr,lqr->qrmn', C_macro_local.full_tensor(), s, s)
|
|
15
|
+
Dinv = np.linalg.inv(D)
|
|
16
|
+
return np.einsum('qrjk,iqr,lqr->qrijkl', Dinv, s, s) # The symmetrization is made afterward (see below)
|
|
17
|
+
|
|
18
|
+
def polarization_tensor(C_macro_local, a1, a2, a3, n_phi, n_theta):
|
|
19
|
+
theta = np.linspace(0, np.pi, n_theta)
|
|
20
|
+
phi = np.linspace(0, 2 * np.pi, n_phi)
|
|
21
|
+
phi_grid, theta_grid = np.meshgrid(phi, theta, indexing='ij')
|
|
22
|
+
g = gamma(C_macro_local, phi_grid, theta_grid, a1, a2, a3)
|
|
23
|
+
gsin = (g.T*np.sin(theta_grid.T)).T
|
|
24
|
+
a = trapezoid(gsin, phi, axis=0)
|
|
25
|
+
b= trapezoid(a, theta, axis=0)/(4*np.pi)
|
|
26
|
+
return FourthOrderTensor(b, force_minor_symmetry=True) # Symmetrization here (see above)
|
|
27
|
+
|
|
28
|
+
def localization_tensor(C_macro_local, C_incl, n_phi, n_theta, a1, a2, a3):
|
|
29
|
+
E = polarization_tensor(C_macro_local, a1, a2, a3, n_phi, n_theta)
|
|
30
|
+
delta = FourthOrderTensor(C_incl._matrix - C_macro_local._matrix)
|
|
31
|
+
Ainv = E.ddot(delta) + I
|
|
32
|
+
return Ainv.inv()
|
|
33
|
+
|
|
34
|
+
def Kroner_Eshelby(Ci, g, method='strain', max_iter=5, atol=1e-3, rtol=1e-3, display=False, n_phi=100, n_theta=100, particle_size=None):
|
|
35
|
+
Ci_rotated = (Ci * g)
|
|
36
|
+
C_macro = Ci_rotated.Hill_average()
|
|
37
|
+
eigen_stiff = C_macro.eig_stiffnesses
|
|
38
|
+
keep_on = True
|
|
39
|
+
k = 0
|
|
40
|
+
message = 'Maximum number of iterations is reached'
|
|
41
|
+
m = len(g)
|
|
42
|
+
A_local = FourthOrderTensor.zeros(m)
|
|
43
|
+
if particle_size is None:
|
|
44
|
+
a1 = a2 = a3 = 1
|
|
45
|
+
else:
|
|
46
|
+
a1, a2, a3 = particle_size
|
|
47
|
+
while keep_on:
|
|
48
|
+
eigen_stiff_old = eigen_stiff
|
|
49
|
+
C_macro_local = C_macro * (g.inv())
|
|
50
|
+
for i in range(m):
|
|
51
|
+
A_local[i] = localization_tensor(C_macro_local[i], Ci, n_phi, n_theta, a1, a2, a3)
|
|
52
|
+
A = A_local * g
|
|
53
|
+
Q = Ci_rotated.ddot(A)
|
|
54
|
+
if method=='stress':
|
|
55
|
+
CiAi_mean = Q.mean()
|
|
56
|
+
C_macro = StiffnessTensor.from_Kelvin(CiAi_mean._matrix, force_symmetries=True)
|
|
57
|
+
err = A.mean() - FourthOrderTensor.identity()
|
|
58
|
+
else:
|
|
59
|
+
B = Q.ddot(C_macro.inv())
|
|
60
|
+
R = Ci_rotated.inv().ddot(B)
|
|
61
|
+
R_mean = R.mean()
|
|
62
|
+
C_macro = StiffnessTensor.from_Kelvin(R_mean.inv()._matrix, force_symmetries=True)
|
|
63
|
+
err = B.mean() - FourthOrderTensor.identity()
|
|
64
|
+
|
|
65
|
+
# Stopping criteria
|
|
66
|
+
eigen_stiff = C_macro.eig_stiffnesses
|
|
67
|
+
abs_change = np.abs(eigen_stiff - eigen_stiff_old)
|
|
68
|
+
rel_change = np.max(abs_change / eigen_stiff_old)
|
|
69
|
+
max_abs_change = np.max(abs_change)
|
|
70
|
+
k += 1
|
|
71
|
+
if max_abs_change < atol:
|
|
72
|
+
keep_on = False
|
|
73
|
+
message = 'Absolute change is below threshold value'
|
|
74
|
+
if rel_change < rtol:
|
|
75
|
+
keep_on = False
|
|
76
|
+
message = 'Relative change is below threshold value'
|
|
77
|
+
if k == max_iter:
|
|
78
|
+
keep_on = False
|
|
79
|
+
if display:
|
|
80
|
+
err = np.max(np.abs(err._matrix))
|
|
81
|
+
print('Iter #{}: abs. change={:0.5f}; rel. change={:0.5f}; error={:0.5f}'.format(k, max_abs_change, rel_change,err))
|
|
82
|
+
return C_macro, message
|
|
83
|
+
|
|
84
|
+
C=StiffnessTensor.cubic(C11=108, C44=28.3, C12=62)
|
|
85
|
+
orientations = Rotation.random(1000)
|
|
86
|
+
Cmacro, msg = Kroner_Eshelby(C, orientations, method='stress', display=True)
|
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
from Elasticipy.
|
|
2
|
-
from Elasticipy.
|
|
3
|
-
from Elasticipy.
|
|
1
|
+
from Elasticipy.plasticity import JohnsonCook
|
|
2
|
+
from Elasticipy.tensors.stress_strain import StressTensor, StrainTensor
|
|
3
|
+
from Elasticipy.tensors.elasticity import StiffnessTensor
|
|
4
4
|
import numpy as np
|
|
5
5
|
from matplotlib import pyplot as plt
|
|
6
|
-
import matplotlib as mpl
|
|
7
|
-
mpl.use('Qt5Agg') # Ensure interactive plot
|
|
8
6
|
|
|
9
7
|
|
|
10
8
|
JC = JohnsonCook(A=363, B=792.7122, n=0.5756) # https://doi.org/10.1016/j.matpr.2020.05.213
|
|
@@ -70,4 +68,5 @@ for j, model in enumerate(models):
|
|
|
70
68
|
ax.plot(eps_xy, stress_mag, label=labels[j])
|
|
71
69
|
ax.set_xlabel(r'$\varepsilon_{xy}$')
|
|
72
70
|
ax.set_ylabel('Shear stress (MPa)')
|
|
73
|
-
ax.legend()
|
|
71
|
+
ax.legend()
|
|
72
|
+
fig.show()
|
|
Binary file
|
|
@@ -112,7 +112,7 @@ orthogonal sections.
|
|
|
112
112
|
|
|
113
113
|
![Young modulus (GPa) of Cu single crystal as a 3D surface (a) or a pole figure (b);
|
|
114
114
|
Young modulus of Cu polycrystal with $[001]$ fiber texture, plotted in three orthogonal sections, depending on the
|
|
115
|
-
averaging method. \label{fig:Young}](YoungModulus.png)
|
|
115
|
+
averaging method (c). \label{fig:Young}](YoungModulus.png)
|
|
116
116
|
|
|
117
117
|
Elasticipy also introduces the concept of *tensor arrays*, in a similar way as in MTEX [@MTEX], allowing to
|
|
118
118
|
process several tensors at once with simple and highly efficient commands. In order to highlight the performances
|
|
@@ -136,17 +136,20 @@ to other averaging methods (e.g. self-consistent models), possibly beyond linear
|
|
|
136
136
|
with ease. It already implements thermal expansion.
|
|
137
137
|
|
|
138
138
|
# Usage
|
|
139
|
+
This section presents the syntaxes of few basic operations performed with Elasticipy v4.0.0.
|
|
139
140
|
|
|
140
141
|
## Plot directional engineering constants
|
|
141
142
|
|
|
142
143
|
\autoref{fig:Young}.a) and b) were rendered with the following syntax:
|
|
143
144
|
|
|
144
145
|
````python
|
|
145
|
-
from Elasticipy.
|
|
146
|
+
from Elasticipy.tensors.elasticity import StiffnessTensor
|
|
146
147
|
C = StiffnessTensor.cubic(C11=186, C12=134, C44=77)
|
|
147
148
|
E = C.Young_modulus
|
|
148
|
-
E.plot3D(n_phi=500, n_theta=500)
|
|
149
|
-
|
|
149
|
+
fig, _ = E.plot3D(n_phi=500, n_theta=500)
|
|
150
|
+
fig.show()
|
|
151
|
+
fig, _ = E.plot_as_pole_figure()
|
|
152
|
+
fig.show()
|
|
150
153
|
````
|
|
151
154
|
|
|
152
155
|
## Create an array of rotated stiffness tensors and compute average
|
|
@@ -160,7 +163,7 @@ n = 10000
|
|
|
160
163
|
phi1 = np.random.random(n)*2*np.pi # Random sampling from 0 to 2pi
|
|
161
164
|
Euler_angles = np.array([phi1, np.zeros(n), np.zeros(n)]).T # Fibre texture
|
|
162
165
|
rotations = Rotation.from_euler('ZXZ', Euler_angles) # Bunge-Euler angles
|
|
163
|
-
C_rotated = C * rotations # n-
|
|
166
|
+
C_rotated = C * rotations # n-length tensor array
|
|
164
167
|
````
|
|
165
168
|
|
|
166
169
|
Then, the Voigt--Reuss--Hill average [@hill] can be computed from the tensor array:
|
|
@@ -172,7 +175,8 @@ C_VRH = C_rotated.Hill_average()
|
|
|
172
175
|
Finally, the corresponding Young moduli can be plotted in orthogonal sections, as shown in \autoref{fig:Young}.c), with:
|
|
173
176
|
|
|
174
177
|
````python
|
|
175
|
-
C_VRH.Young_modulus.plot_xyz_sections()
|
|
178
|
+
fig, ax = C_VRH.Young_modulus.plot_xyz_sections()
|
|
179
|
+
fig.show()
|
|
176
180
|
````
|
|
177
181
|
|
|
178
182
|
## Arrays of stress/strain tensor
|
|
@@ -181,17 +185,17 @@ Efforts have been made to provide out-of-the-box simple syntaxes for common oper
|
|
|
181
185
|
will create a tensor array corresponding to evenly-spaced strain along $[1,0,0]$ axis:
|
|
182
186
|
|
|
183
187
|
````python
|
|
184
|
-
from Elasticipy.
|
|
185
|
-
m = 1000
|
|
186
|
-
mag = np.linspace(0, 0.1, m)
|
|
187
|
-
strain = StrainTensor.tensile([1,0,0], mag)
|
|
188
|
+
from Elasticipy.tensors.stress_strain import StrainTensor
|
|
189
|
+
m = 1000 # length of tensor array
|
|
190
|
+
mag = np.linspace(0, 0.1, m) # Strain magnitude
|
|
191
|
+
strain = StrainTensor.tensile([1, 0, 0], mag)
|
|
188
192
|
````
|
|
189
193
|
|
|
190
194
|
Given the stiffness tensor ``C`` (see above), one can compute the corresponding stress array with:
|
|
191
195
|
````python
|
|
192
196
|
stress = C * strain
|
|
193
197
|
````
|
|
194
|
-
Finally, ``stress.
|
|
198
|
+
Finally, ``stress.vonMises()`` returns an array of length ``n`` and data type ``float64``, providing all the
|
|
195
199
|
corresponding von Mises equivalent stresses.
|
|
196
200
|
|
|
197
201
|
# References
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: elasticipy
|
|
3
|
-
Version:
|
|
3
|
+
Version: 4.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
|
|
@@ -15,20 +15,22 @@ Classifier: Programming Language :: Python
|
|
|
15
15
|
Classifier: Programming Language :: Python :: 3.10
|
|
16
16
|
Classifier: Programming Language :: Python :: 3.11
|
|
17
17
|
Classifier: Programming Language :: Python :: 3.12
|
|
18
|
-
Requires-Python: >=3.
|
|
18
|
+
Requires-Python: >=3.11
|
|
19
19
|
Description-Content-Type: text/markdown
|
|
20
20
|
License-File: LICENSE
|
|
21
21
|
Requires-Dist: numpy
|
|
22
22
|
Requires-Dist: scipy
|
|
23
23
|
Requires-Dist: matplotlib
|
|
24
|
+
Requires-Dist: qtpy
|
|
25
|
+
Requires-Dist: pandas
|
|
24
26
|
Provides-Extra: dev
|
|
25
27
|
Requires-Dist: pytest; extra == "dev"
|
|
26
28
|
Requires-Dist: pytest-cov; extra == "dev"
|
|
27
29
|
Requires-Dist: pymatgen; extra == "dev"
|
|
28
30
|
Requires-Dist: orix; extra == "dev"
|
|
29
|
-
Requires-Dist: mp_api; extra == "dev"
|
|
31
|
+
Requires-Dist: mp_api==0.45.9; extra == "dev"
|
|
32
|
+
Dynamic: license-file
|
|
30
33
|
|
|
31
|
-
# Elasticipy
|
|
32
34
|
[](https://pypi.org/project/elasticipy/)
|
|
33
35
|
[](https://pypistats.org/packages/elasticipy)
|
|
34
36
|
[](https://github.com/DorianDepriester/Elasticipy/blob/main/LICENSE)
|
|
@@ -38,9 +40,9 @@ Requires-Dist: mp_api; extra == "dev"
|
|
|
38
40
|

|
|
39
41
|
[](https://joss.theoj.org/papers/8cce91b782f17f52e9ee30916cd86ad5)
|
|
40
42
|
|
|
43
|
+
# 
|
|
41
44
|
|
|
42
|
-
|
|
43
|
-
A python toolkit to manipulate strain and strain tensors, and other linear elasticity-related tensors (e.g. stiffness).
|
|
45
|
+
A python toolkit to manipulate stress and strain tensors, and other linear elasticity-related tensors (e.g. stiffness).
|
|
44
46
|
This package also provides a collection of easy-to-use and very fast tools to work on stress and strain tensors.
|
|
45
47
|
|
|
46
48
|
## Main features
|
|
@@ -48,7 +50,7 @@ Among other features, this package implements:
|
|
|
48
50
|
|
|
49
51
|
- Computation of elasticity tensors,
|
|
50
52
|
- Analysis of elastic anisotropy and wave propagation,
|
|
51
|
-
- Working with multidimensional arrays of
|
|
53
|
+
- Working with multidimensional arrays of tensors,
|
|
52
54
|
- Thermal expansion tensors,
|
|
53
55
|
- Rotation of tensors,
|
|
54
56
|
- Integration with crystal symmetry groups,
|
|
@@ -79,3 +81,19 @@ Certain parts of the code, particularly those related to graphical user interfac
|
|
|
79
81
|
**excluded from code coverage analysis**. This includes the following file:
|
|
80
82
|
|
|
81
83
|
- **`src/Elasticipy/gui.py`**
|
|
84
|
+
|
|
85
|
+
## Cite this package
|
|
86
|
+
If you use Elasticipy, please cite [](https://doi.org/10.5281/zenodo.14501849)
|
|
87
|
+
|
|
88
|
+
You can use the following BibTeX entry:
|
|
89
|
+
````bibtex
|
|
90
|
+
@software{Elasticipy,
|
|
91
|
+
author = {Depriester, Dorian},
|
|
92
|
+
doi = {10.5281/zenodo.15188346},
|
|
93
|
+
month = apr,
|
|
94
|
+
title = {{Elasticipy}},
|
|
95
|
+
url = {https://github.com/DorianDepriester/Elasticipy},
|
|
96
|
+
version = {4.0.0},
|
|
97
|
+
year = {2025}
|
|
98
|
+
}
|
|
99
|
+
````
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
# Elasticipy
|
|
2
1
|
[](https://pypi.org/project/elasticipy/)
|
|
3
2
|
[](https://pypistats.org/packages/elasticipy)
|
|
4
3
|
[](https://github.com/DorianDepriester/Elasticipy/blob/main/LICENSE)
|
|
@@ -8,9 +7,9 @@
|
|
|
8
7
|

|
|
9
8
|
[](https://joss.theoj.org/papers/8cce91b782f17f52e9ee30916cd86ad5)
|
|
10
9
|
|
|
10
|
+
# 
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
A python toolkit to manipulate strain and strain tensors, and other linear elasticity-related tensors (e.g. stiffness).
|
|
12
|
+
A python toolkit to manipulate stress and strain tensors, and other linear elasticity-related tensors (e.g. stiffness).
|
|
14
13
|
This package also provides a collection of easy-to-use and very fast tools to work on stress and strain tensors.
|
|
15
14
|
|
|
16
15
|
## Main features
|
|
@@ -18,7 +17,7 @@ Among other features, this package implements:
|
|
|
18
17
|
|
|
19
18
|
- Computation of elasticity tensors,
|
|
20
19
|
- Analysis of elastic anisotropy and wave propagation,
|
|
21
|
-
- Working with multidimensional arrays of
|
|
20
|
+
- Working with multidimensional arrays of tensors,
|
|
22
21
|
- Thermal expansion tensors,
|
|
23
22
|
- Rotation of tensors,
|
|
24
23
|
- Integration with crystal symmetry groups,
|
|
@@ -48,4 +47,20 @@ The project uses unit tests with `pytest` and coverage reports generated using `
|
|
|
48
47
|
Certain parts of the code, particularly those related to graphical user interfaces (GUIs) or visual plotting, are
|
|
49
48
|
**excluded from code coverage analysis**. This includes the following file:
|
|
50
49
|
|
|
51
|
-
- **`src/Elasticipy/gui.py`**
|
|
50
|
+
- **`src/Elasticipy/gui.py`**
|
|
51
|
+
|
|
52
|
+
## Cite this package
|
|
53
|
+
If you use Elasticipy, please cite [](https://doi.org/10.5281/zenodo.14501849)
|
|
54
|
+
|
|
55
|
+
You can use the following BibTeX entry:
|
|
56
|
+
````bibtex
|
|
57
|
+
@software{Elasticipy,
|
|
58
|
+
author = {Depriester, Dorian},
|
|
59
|
+
doi = {10.5281/zenodo.15188346},
|
|
60
|
+
month = apr,
|
|
61
|
+
title = {{Elasticipy}},
|
|
62
|
+
url = {https://github.com/DorianDepriester/Elasticipy},
|
|
63
|
+
version = {4.0.0},
|
|
64
|
+
year = {2025}
|
|
65
|
+
}
|
|
66
|
+
````
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
Elasticipy package
|
|
2
|
+
==================
|
|
3
|
+
|
|
4
|
+
Submodules
|
|
5
|
+
----------
|
|
6
|
+
|
|
7
|
+
.. toctree::
|
|
8
|
+
:maxdepth: 4
|
|
9
|
+
|
|
10
|
+
Elasticipy.tensors.fourth_order
|
|
11
|
+
Elasticipy.tensors.elasticity
|
|
12
|
+
Elasticipy.tensors.second_order
|
|
13
|
+
Elasticipy.tensors.stress_strain
|
|
14
|
+
Elasticipy.spherical_function
|
|
15
|
+
Elasticipy.plasticity
|
|
16
|
+
Elasticipy.interfaces.PRISMS
|
|
17
|
+
Elasticipy.interfaces.FEPX
|
|
18
|
+
|
|
19
|
+
Module contents
|
|
20
|
+
---------------
|
|
21
|
+
|
|
22
|
+
.. automodule:: Elasticipy
|
|
23
|
+
:members:
|
|
24
|
+
:undoc-members:
|
|
25
|
+
:show-inheritance:
|