elasticipy 6.0.1__tar.gz → 6.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-6.1.0/.github/FUNDING.yml +1 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/.github/workflows/Codecov.yml +1 -1
- {elasticipy-6.0.1/src/elasticipy.egg-info → elasticipy-6.1.0}/PKG-INFO +6 -4
- {elasticipy-6.0.1 → elasticipy-6.1.0}/README.md +4 -3
- {elasticipy-6.0.1 → elasticipy-6.1.0}/docs/source/API/API.rst +5 -4
- elasticipy-6.1.0/docs/source/API/Elasticipy.crystal_texture.rst +8 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/docs/source/Tutorials/FourthOrderTensors.rst +1 -1
- {elasticipy-6.0.1 → elasticipy-6.1.0}/docs/source/Tutorials/Tutorial_AveragingMethods.rst +15 -7
- {elasticipy-6.0.1 → elasticipy-6.1.0}/docs/source/Tutorials/Tutorial_StiffnessTensor.rst +4 -4
- {elasticipy-6.0.1 → elasticipy-6.1.0}/docs/source/Tutorials/Tutorial_StressStrain.rst +1 -1
- elasticipy-6.1.0/docs/source/Tutorials/texture.rst +188 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/docs/source/Tutorials.rst +2 -1
- {elasticipy-6.0.1 → elasticipy-6.1.0}/docs/source/index.rst +2 -2
- {elasticipy-6.0.1 → elasticipy-6.1.0}/pyproject.toml +4 -10
- elasticipy-6.1.0/requirements.txt +18 -0
- elasticipy-6.1.0/src/elasticipy/crystal_texture.py +849 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/src/elasticipy/gui/about.py +12 -10
- {elasticipy-6.0.1 → elasticipy-6.1.0}/src/elasticipy/gui/gui.py +4 -7
- {elasticipy-6.0.1 → elasticipy-6.1.0}/src/elasticipy/interfaces/FEPX.py +3 -3
- {elasticipy-6.0.1 → elasticipy-6.1.0}/src/elasticipy/interfaces/PRISMS.py +3 -3
- {elasticipy-6.0.1 → elasticipy-6.1.0}/src/elasticipy/plasticity.py +1 -1
- elasticipy-6.1.0/src/elasticipy/resources/logo_text.png +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/src/elasticipy/spherical_function.py +5 -3
- {elasticipy-6.0.1 → elasticipy-6.1.0}/src/elasticipy/tensors/elasticity.py +149 -18
- {elasticipy-6.0.1 → elasticipy-6.1.0}/src/elasticipy/tensors/fourth_order.py +32 -11
- {elasticipy-6.0.1 → elasticipy-6.1.0}/src/elasticipy/tensors/second_order.py +119 -18
- {elasticipy-6.0.1 → elasticipy-6.1.0}/src/elasticipy/tensors/stress_strain.py +41 -25
- {elasticipy-6.0.1 → elasticipy-6.1.0/src/elasticipy.egg-info}/PKG-INFO +6 -4
- {elasticipy-6.0.1 → elasticipy-6.1.0}/src/elasticipy.egg-info/SOURCES.txt +6 -6
- {elasticipy-6.0.1 → elasticipy-6.1.0}/src/elasticipy.egg-info/requires.txt +1 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/tests/test_StiffnessTensor.py +15 -2
- {elasticipy-6.0.1 → elasticipy-6.1.0}/tests/test_StressStrainTensors.py +55 -0
- elasticipy-6.1.0/tests/test_crystaltexture.py +294 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/tests/test_interfaces_FEPX.py +2 -2
- elasticipy-6.0.1/CITATION.bib +0 -17
- elasticipy-6.0.1/Elasticipy_for_the_Impatient.ipynb +0 -1283
- elasticipy-6.0.1/docs/index.rst +0 -6
- elasticipy-6.0.1/postBuild +0 -1
- elasticipy-6.0.1/requirements.txt +0 -6
- elasticipy-6.0.1/runtime.txt +0 -1
- elasticipy-6.0.1/src/elasticipy/resources/logo_text.svg +0 -126
- {elasticipy-6.0.1 → elasticipy-6.1.0}/.github/workflows/JOSS build.yml +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/.github/workflows/cloc.yml +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/.github/workflows/python-publish.yml +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/.readthedocs.yaml +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/CITATION.cff +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/CODE_OF_CONDUCT.md +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/CONTRIBUTING.md +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/Examples/Elasticipy_vs_pymatgen.py +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/Examples/Elate_vs_Elasticipy.py +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/Examples/Example_Stiffness_tensor.py +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/Examples/Example_StressStrain_arrays.py +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/Examples/Example_WaveVelocity.py +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/Examples/MaterialsProject.json +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/Examples/Multiple_phases.py +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/Examples/SelfConsistent.py +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/Examples/essai_plasticity.py +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/Examples/example_readwrite.py +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/JOSS/ElasticipyVSpymatgen.png +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/JOSS/Nye.png +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/JOSS/Plot_E.png +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/JOSS/YoungModulus.png +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/JOSS/paper.bib +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/JOSS/paper.md +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/LICENSE +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/docs/_static/images/HyperSphericalCoordinates.png +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/docs/source/API/Elasticipy.interfaces.FEPX.rst +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/docs/source/API/Elasticipy.interfaces.PRISMS.rst +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/docs/source/API/Elasticipy.plasticity.rst +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/docs/source/API/Elasticipy.spherical_function.rst +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/docs/source/API/Elasticipy.tensors.elasticity.rst +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/docs/source/API/Elasticipy.tensors.fourth_order.rst +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/docs/source/API/Elasticipy.tensors.mapping.rst +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/docs/source/API/Elasticipy.tensors.second_order.rst +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/docs/source/API/Elasticipy.tensors.stress_strain.rst +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/docs/source/API/Elasticipy.tensors.thermal_expansion.rst +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/docs/source/Tutorials/GUI.rst +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/docs/source/Tutorials/Plasticity.rst +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/docs/source/Tutorials/Tutorial_MultiplePhases.rst +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/docs/source/Tutorials/Tutorial_ReadWriteFiles.rst +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/docs/source/Tutorials/Tutorial_ThermalExpansion.rst +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/docs/source/Tutorials/Tutorial_wave-velocities.rst +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/docs/source/Tutorials/images/Cyclic.png +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/docs/source/Tutorials/images/E_PF.png +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/docs/source/Tutorials/images/E_VRH_sections.png +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/docs/source/Tutorials/images/E_hill_fiber.png +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/docs/source/Tutorials/images/E_plot3D.png +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/docs/source/Tutorials/images/E_xyz_sections.png +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/docs/source/Tutorials/images/GUI.png +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/docs/source/Tutorials/images/G_plot3D.png +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/docs/source/Tutorials/images/G_plot3D_min.png +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/docs/source/Tutorials/images/G_xyz_sections.png +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/docs/source/Tutorials/images/Incremental.png +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/docs/source/Tutorials/images/Mohr.png +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/docs/source/Tutorials/images/Nye.png +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/docs/source/Tutorials/images/Shear.png +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/docs/source/Tutorials/images/Stress-controlled.png +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/docs/source/Tutorials/images/StressStrain-controlled.png +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/docs/source/Tutorials/images/WaveVelocities.png +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/docs/source/Tutorials/images/plot_volumeFraction.png +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/docs/source/citation.rst +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/docs/source/conf.py +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/docs/source/install.rst +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/docs/source/logo/favicon.png +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/docs/source/logo/logo.png +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/docs/source/logo/logo.svg +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/docs/source/logo/logo_text.png +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/docs/source/logo/logo_text.svg +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/docs/source/logo/logo_text_whitebg.png +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/setup.cfg +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/src/elasticipy/FourthOrderTensor.py +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/src/elasticipy/StressStrainTensors.py +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/src/elasticipy/ThermalExpansion.py +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/src/elasticipy/__init__.py +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/src/elasticipy/crystal_symmetries.py +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/src/elasticipy/gui/__init__.py +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/src/elasticipy/gui/rotate_window.py +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/src/elasticipy/interfaces/__init__.py +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/src/elasticipy/polefigure.py +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/src/elasticipy/resources/favicon.png +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/src/elasticipy/tensors/__init__.py +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/src/elasticipy/tensors/mapping.py +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/src/elasticipy/tensors/thermal_expansion.py +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/src/elasticipy.egg-info/dependency_links.txt +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/src/elasticipy.egg-info/entry_points.txt +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/src/elasticipy.egg-info/top_level.txt +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/tests/MaterialsProject.json +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/tests/__init__.py +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/tests/interfaces/FEPX/simulation.sim/.sim +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/tests/interfaces/FEPX/simulation.sim/results/elts/defrate/defrate.step0 +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/tests/interfaces/FEPX/simulation.sim/results/elts/defrate/defrate.step1 +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/tests/interfaces/FEPX/simulation.sim/results/elts/defrate/defrate.step2 +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/tests/interfaces/FEPX/simulation.sim/results/elts/ori/ori.step0 +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/tests/interfaces/FEPX/simulation.sim/results/elts/ori/ori.step1 +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/tests/interfaces/FEPX/simulation.sim/results/elts/ori/ori.step2 +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/tests/interfaces/FEPX/simulation.sim/results/elts/spinrate/spinrate.step0 +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/tests/interfaces/FEPX/simulation.sim/results/elts/spinrate/spinrate.step1 +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/tests/interfaces/FEPX/simulation.sim/results/elts/spinrate/spinrate.step2 +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/tests/interfaces/FEPX/simulation.sim/results/elts/strain/strain.step0 +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/tests/interfaces/FEPX/simulation.sim/results/elts/strain/strain.step1 +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/tests/interfaces/FEPX/simulation.sim/results/elts/strain/strain.step2 +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/tests/interfaces/FEPX/simulation.sim/results/elts/stress/stress.step0 +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/tests/interfaces/FEPX/simulation.sim/results/elts/stress/stress.step1 +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/tests/interfaces/FEPX/simulation.sim/results/elts/stress/stress.step2 +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/tests/interfaces/FEPX/simulation.sim/results/elts/velgrad/velgrad.step0 +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/tests/interfaces/FEPX/simulation.sim/results/elts/velgrad/velgrad.step1 +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/tests/interfaces/FEPX/simulation.sim/results/elts/velgrad/velgrad.step2 +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/tests/interfaces/PRISMS/QuadratureOutputs.csv +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/tests/interfaces/PRISMS/stressstrain.txt +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/tests/test_FourthOrderTensors.py +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/tests/test_SphericalFunction.py +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/tests/test_ThermalExpansion.py +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/tests/test_interfaces_prisms.py +0 -0
- {elasticipy-6.0.1 → elasticipy-6.1.0}/tests/test_plasticity.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ko_fi: doriandepriester
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: elasticipy
|
|
3
|
-
Version: 6.0
|
|
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)
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
[](https://codecov.io/gh/DorianDepriester/Elasticipy)
|
|
10
10
|

|
|
11
11
|
[](https://doi.org/10.21105/joss.07940)
|
|
12
|
-
[](https://mybinder.org/v2/gh/DorianDepriester/
|
|
12
|
+
[](https://mybinder.org/v2/gh/DorianDepriester/elasticipy-notebook/HEAD?urlpath=%2Fdoc%2Ftree%2FElasticipy.ipynb)
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
# 
|
|
@@ -47,7 +47,7 @@ Tutorials and full documentation are available on [ReadTheDoc](https://elasticip
|
|
|
47
47
|
|
|
48
48
|
## ⏱️ Elasticipy in a nutshell
|
|
49
49
|
Take a 5-minute tour through Elasticipy's main features by running the online Jupyter Notebook, hosted on
|
|
50
|
-
[Binder](https://mybinder.org/v2/gh/DorianDepriester/
|
|
50
|
+
[Binder](https://mybinder.org/v2/gh/DorianDepriester/elasticipy-notebook/HEAD?urlpath=%2Fdoc%2Ftree%2FElasticipy.ipynb).
|
|
51
51
|
|
|
52
52
|
|
|
53
53
|
## 🔍 Sources
|
|
@@ -78,7 +78,8 @@ You can use the following BibTeX entry:
|
|
|
78
78
|
number = {115},
|
|
79
79
|
pages = {7940},
|
|
80
80
|
author = {Depriester, Dorian and Kubler, Régis},
|
|
81
|
-
title = {
|
|
81
|
+
title = {Elasticipy: A Python package for linear elasticity and tensor analysis},
|
|
82
82
|
journal = {Journal of Open Source Software}
|
|
83
83
|
}
|
|
84
84
|
````
|
|
85
|
+
Alternatively, you can by me a coffee on [](https://ko-fi.com/W7W11S5TCH)
|
|
@@ -4,12 +4,13 @@ API documentation
|
|
|
4
4
|
.. toctree::
|
|
5
5
|
:maxdepth: 5
|
|
6
6
|
|
|
7
|
+
Elasticipy.crystal_texture
|
|
8
|
+
Elasticipy.interfaces.PRISMS
|
|
9
|
+
Elasticipy.interfaces.FEPX
|
|
10
|
+
Elasticipy.plasticity
|
|
11
|
+
Elasticipy.spherical_function
|
|
7
12
|
Elasticipy.tensors.elasticity
|
|
8
13
|
Elasticipy.tensors.fourth_order
|
|
9
14
|
Elasticipy.tensors.second_order
|
|
10
15
|
Elasticipy.tensors.stress_strain
|
|
11
16
|
Elasticipy.tensors.thermal_expansion
|
|
12
|
-
Elasticipy.plasticity
|
|
13
|
-
Elasticipy.spherical_function
|
|
14
|
-
Elasticipy.interfaces.PRISMS
|
|
15
|
-
Elasticipy.interfaces.FEPX
|
|
@@ -189,7 +189,7 @@ representation. Indeed, one can check that their components as full representati
|
|
|
189
189
|
|
|
190
190
|
Actually, a more direct way to check this equality is:
|
|
191
191
|
|
|
192
|
-
>>> I_kelvin == I_voigt
|
|
192
|
+
>>> print(I_kelvin == I_voigt)
|
|
193
193
|
True
|
|
194
194
|
|
|
195
195
|
As said above, the two tensors above can `mixed`, although they are not represented the same way. E.g.:
|
|
@@ -59,6 +59,7 @@ As a comparison, let's see how the underlying assumption impair the Young moduli
|
|
|
59
59
|
>>> print(E_Voigt.mean(), E_Reuss.mean(), E_Hill.mean())
|
|
60
60
|
145.66862361382908 76.13802022165395 111.67690532486962
|
|
61
61
|
|
|
62
|
+
.. _rotations:
|
|
62
63
|
|
|
63
64
|
Finite number of orientations
|
|
64
65
|
=============================
|
|
@@ -66,6 +67,11 @@ If one wants to consider a finite set of orientations, or consider that these or
|
|
|
66
67
|
over the SO3 (i.e. if we have a crystallographic texture), the first steps consists in estimating the mean of all the
|
|
67
68
|
rotated stiffnesses/compliances (depending on the model).
|
|
68
69
|
|
|
70
|
+
.. note::
|
|
71
|
+
|
|
72
|
+
Elasticipy now handles *textures* to compute the "exact" averages (i.e. based on sampling). See :ref:`textures`.
|
|
73
|
+
|
|
74
|
+
|
|
69
75
|
As an example, we assume that the material displays a perfect fiber texture along **z**. In terms of Bunge-Euler angles,
|
|
70
76
|
it means that we have Phi=0 for each orientation:
|
|
71
77
|
|
|
@@ -93,6 +99,11 @@ Let's see how the Young modulus is distributed over space:
|
|
|
93
99
|
|
|
94
100
|
It is thus clear that the fiber along the *z* axis results in a transverse-isotropic behavior in the X-Y plane.
|
|
95
101
|
|
|
102
|
+
Actually, a quicker way to compute the average from a finite set of orientations is to pass them as the averaging
|
|
103
|
+
function, e.g.:
|
|
104
|
+
|
|
105
|
+
>>> Chill = C.Hill_average(C, orientations=rotations)
|
|
106
|
+
|
|
96
107
|
Plotting Voigt, Reuss and Hill averages at once
|
|
97
108
|
===============================================
|
|
98
109
|
|
|
@@ -105,22 +116,19 @@ sections (see :ref:`here<plotting>` for details) for each of the aforementioned
|
|
|
105
116
|
from scipy.spatial.transform import Rotation
|
|
106
117
|
import numpy as np
|
|
107
118
|
from elasticipy.tensors.elasticity import StiffnessTensor
|
|
119
|
+
from elasticipy.crystal_texture import FibreTexture
|
|
120
|
+
|
|
108
121
|
C = StiffnessTensor.monoclinic(phase_name='TiNi',
|
|
109
122
|
C11=231, C12=127, C13=104,
|
|
110
123
|
C22=240, C23=131, C33=175,
|
|
111
124
|
C44=81, C55=11, C66=85,
|
|
112
125
|
C15=-18, C25=1, C35=-3, C46=3)
|
|
113
|
-
|
|
114
|
-
Phi = phi2 = np.zeros(10000)
|
|
115
|
-
Euler_angles = np.array([phi1, Phi, phi2]).T
|
|
116
|
-
rotations = Rotation.from_euler('ZXZ', Euler_angles) # Bunge-Euler angles
|
|
117
|
-
C_rotated = C * rotations
|
|
126
|
+
texture = FibreTexture.from_Euler(Phi=0, phi2=0)
|
|
118
127
|
for method in ['Reuss', 'Hill', 'Voigt']:
|
|
119
|
-
C_avg =
|
|
128
|
+
C_avg = C.average(method, orientations = texture)
|
|
120
129
|
if method == 'Reuss':
|
|
121
130
|
fig, axs = C_avg.Young_modulus.plot_xyz_sections(label='Reuss') # Create fig and axes (sections)
|
|
122
131
|
else:
|
|
123
132
|
fig, axs = C_avg.Young_modulus.plot_xyz_sections(fig=fig, axs=axs, label=method) # Use existing axes
|
|
124
133
|
axs[-1].legend()
|
|
125
|
-
fig.tight_layout()
|
|
126
134
|
fig.show()
|
|
@@ -40,7 +40,7 @@ shear and bulk moduli
|
|
|
40
40
|
Hyperspherical function
|
|
41
41
|
Min=83999.99999999991, Max=84000.00000000007
|
|
42
42
|
|
|
43
|
-
>>> C.bulk_modulus
|
|
43
|
+
>>> print(C.bulk_modulus)
|
|
44
44
|
140000.0
|
|
45
45
|
|
|
46
46
|
.. note::
|
|
@@ -51,7 +51,7 @@ shear and bulk moduli
|
|
|
51
51
|
One can check that both approaches yield the same tensor:
|
|
52
52
|
|
|
53
53
|
>>> C2 = StiffnessTensor.isotropic(G=84e3, K=140e3)
|
|
54
|
-
>>> C2 == C
|
|
54
|
+
>>> print(C2 == C)
|
|
55
55
|
True
|
|
56
56
|
|
|
57
57
|
|
|
@@ -84,7 +84,7 @@ let's see its value along the x, y and z directions:
|
|
|
84
84
|
>>> Ey = E.eval([0,1,0])
|
|
85
85
|
>>> Ez = E.eval([0,0,1])
|
|
86
86
|
>>> print((Ex, Ey, Ez))
|
|
87
|
-
(124.52232440357189, 120.92120854784433, 96.13750721721384)
|
|
87
|
+
(np.float64(124.52232440357189), np.float64(120.92120854784433), np.float64(96.13750721721384))
|
|
88
88
|
|
|
89
89
|
.. note::
|
|
90
90
|
|
|
@@ -113,7 +113,7 @@ deviation of the Young modulus:
|
|
|
113
113
|
|
|
114
114
|
Another way to evidence anisotropy is to use the universal anisotropy factor [Ranganathan]_:
|
|
115
115
|
|
|
116
|
-
>>> C.universal_anisotropy
|
|
116
|
+
>>> print(C.universal_anisotropy)
|
|
117
117
|
5.141009551641412
|
|
118
118
|
|
|
119
119
|
Shear moduli and Poisson ratios
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
.. _textures:
|
|
2
|
+
|
|
3
|
+
Working with crystallographic textures
|
|
4
|
+
---------------------------------------
|
|
5
|
+
|
|
6
|
+
With the help of `orix <https://orix.readthedocs.io/en/stable/index.html>`_, Elasticipy allows to compute averages based
|
|
7
|
+
on crystallographic texture (in addition to single orientations; see :ref:`rotations`).
|
|
8
|
+
|
|
9
|
+
Define and compose textures
|
|
10
|
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
11
|
+
|
|
12
|
+
Discrete textures
|
|
13
|
+
=================
|
|
14
|
+
A series of "usual" texture components (e.g. Goss, cube, Brass etc.) are already implemented in Elasticipy:
|
|
15
|
+
|
|
16
|
+
.. doctest::
|
|
17
|
+
|
|
18
|
+
>>> from elasticipy.crystal_texture import DiscreteTexture
|
|
19
|
+
>>> goss = DiscreteTexture.Goss()
|
|
20
|
+
>>> goss
|
|
21
|
+
Crystallographic texture
|
|
22
|
+
φ1=0.00°, ϕ=45.00°, φ2=0.00°
|
|
23
|
+
|
|
24
|
+
This texture actually consists in a single orientation (as opposed to fibre textures, see below). It can be used to
|
|
25
|
+
rotate a stiffness tensor as follows:
|
|
26
|
+
|
|
27
|
+
>>> from elasticipy.tensors.elasticity import StiffnessTensor
|
|
28
|
+
>>> C = StiffnessTensor.cubic(C11=186, C12=134, C44=77) # Copper, mp-30
|
|
29
|
+
>>> C * goss
|
|
30
|
+
Stiffness tensor (in Voigt mapping):
|
|
31
|
+
[[ 1.86000000e+02 1.34000000e+02 1.34000000e+02 0.00000000e+00
|
|
32
|
+
0.00000000e+00 0.00000000e+00]
|
|
33
|
+
[ 1.34000000e+02 2.37000000e+02 8.30000000e+01 1.42108547e-14
|
|
34
|
+
0.00000000e+00 0.00000000e+00]
|
|
35
|
+
[ 1.34000000e+02 8.30000000e+01 2.37000000e+02 -7.10542736e-15
|
|
36
|
+
0.00000000e+00 0.00000000e+00]
|
|
37
|
+
[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 2.60000000e+01
|
|
38
|
+
0.00000000e+00 0.00000000e+00]
|
|
39
|
+
[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
|
|
40
|
+
7.70000000e+01 0.00000000e+00]
|
|
41
|
+
[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
|
|
42
|
+
0.00000000e+00 7.70000000e+01]]
|
|
43
|
+
|
|
44
|
+
Fibre textures
|
|
45
|
+
==============
|
|
46
|
+
Fibre textures are defined as uniformly distributed orientations around a given axis, leading to a single line when
|
|
47
|
+
plotting an Orientation Distribution Function (ODF), hence the name. Therefore, there are three ways to define such
|
|
48
|
+
textures.
|
|
49
|
+
|
|
50
|
+
The first one consists in defining the *uvw* direction to align with a given axis (related to the sample coordinate
|
|
51
|
+
system). For instance, let's consider the texture such that the <111> direction is aligned with the Z axis:
|
|
52
|
+
|
|
53
|
+
>>> from elasticipy.crystal_texture import FibreTexture
|
|
54
|
+
>>> from orix.crystal_map import Phase
|
|
55
|
+
>>> from orix.vector.miller import Miller
|
|
56
|
+
>>>
|
|
57
|
+
>>> phase = Phase(point_group='m-3m') # Cubic symmetry
|
|
58
|
+
>>> m = Miller(uvw=[1,1,1], phase=phase)
|
|
59
|
+
>>> fibre_111 = FibreTexture.from_Miller_axis(m, [0,0,1])
|
|
60
|
+
>>> fibre_111
|
|
61
|
+
Fibre texture
|
|
62
|
+
<1. 1. 1.> || [0, 0, 1]
|
|
63
|
+
|
|
64
|
+
Actually, this texture is usually referred to as the γ fibre; therefore, a quicker way to define it is to use:
|
|
65
|
+
|
|
66
|
+
>>> gamma = FibreTexture.gamma()
|
|
67
|
+
|
|
68
|
+
This kind of shortcut also exists for alpha and epsilon textures
|
|
69
|
+
(see `here <http://pajarito.materials.cmu.edu/lectures/L23-Metal_Textures-Torsion_BCC-part2.pdf>`_) for details).
|
|
70
|
+
|
|
71
|
+
The third way is to use two (out of the three) Bunge-Euler angles to define the fix angles (assuming that the
|
|
72
|
+
orientations are uniformly distributed over the remaining angle). E.g.:
|
|
73
|
+
|
|
74
|
+
>>> fibre_phi2 = FibreTexture.from_Euler(phi1=0., Phi=0.)
|
|
75
|
+
>>> fibre_phi2
|
|
76
|
+
Fibre texture
|
|
77
|
+
φ1= 0.0°, ϕ= 0.0°
|
|
78
|
+
|
|
79
|
+
Then, the average stiffness resulting from such orientation distribution can be estimated from Voigt, Reuss or Hill
|
|
80
|
+
method by integration over the all possible rotations. E.g.:
|
|
81
|
+
|
|
82
|
+
>>> Chill = C.Hill_average(orientations=fibre_phi2)
|
|
83
|
+
|
|
84
|
+
One can check that this results in a transversely isotropic behaviour by plotting the values of the Young modulus in
|
|
85
|
+
planar sections. The full code is:
|
|
86
|
+
|
|
87
|
+
.. plot::
|
|
88
|
+
|
|
89
|
+
>>> from elasticipy.tensors.elasticity import StiffnessTensor
|
|
90
|
+
>>> from elasticipy.crystal_texture import FibreTexture
|
|
91
|
+
>>>
|
|
92
|
+
>>> C = StiffnessTensor.cubic(C11=186, C12=134, C44=77)
|
|
93
|
+
>>> fibre_phi2 = FibreTexture.from_Euler(phi1=0., Phi=0.)
|
|
94
|
+
>>> Chill = C.Hill_average(orientations=fibre_phi2)
|
|
95
|
+
>>> E = Chill.Young_modulus
|
|
96
|
+
>>> fig, ax = E.plot_xyz_sections()
|
|
97
|
+
>>> fig.show()
|
|
98
|
+
|
|
99
|
+
Composite textures
|
|
100
|
+
==================
|
|
101
|
+
Different textures can be composed together to create a ``CompositeTexture`` object. For instance, if we consider a
|
|
102
|
+
a cubic material which exhibits 40% of uniform texture, 30% of <111>||[0,0,1] and balanced copper texture, we can do the
|
|
103
|
+
following:
|
|
104
|
+
|
|
105
|
+
>>> from elasticipy.crystal_texture import UniformTexture
|
|
106
|
+
>>> t = 0.4 * UniformTexture() + 0.3 * fibre_111 + 0.3 * DiscreteTexture.copper()
|
|
107
|
+
>>> t
|
|
108
|
+
Mixture of crystallographic textures
|
|
109
|
+
Wgt. Type Component
|
|
110
|
+
------------------------------------------------------------
|
|
111
|
+
0.40 uniform Uniform distribution over SO(3)
|
|
112
|
+
0.30 fibre <1. 1. 1.> || [0, 0, 1]
|
|
113
|
+
0.30 discrete φ1=90.00°, ϕ=35.26°, φ2=45.00°
|
|
114
|
+
|
|
115
|
+
Again, the Hill average can be computed as follows:
|
|
116
|
+
|
|
117
|
+
>>> C.Hill_average(orientations=t)
|
|
118
|
+
Stiffness tensor (in Voigt mapping):
|
|
119
|
+
[[ 2.29927005e+02 1.15004605e+02 1.09068390e+02 8.38850529e-16
|
|
120
|
+
1.68295444e-01 -1.42501837e-15]
|
|
121
|
+
[ 1.15004605e+02 2.24466802e+02 1.14528593e+02 -2.58759922e-15
|
|
122
|
+
6.02903899e+00 9.94342227e-16]
|
|
123
|
+
[ 1.09068390e+02 1.14528593e+02 2.30403016e+02 -2.87690846e-16
|
|
124
|
+
-6.19733443e+00 -2.35261749e-15]
|
|
125
|
+
[ 9.65499494e-16 -2.35273493e-15 -1.02889997e-15 3.85692073e+01
|
|
126
|
+
-7.04774156e-17 5.34392791e+00]
|
|
127
|
+
[ 1.68295444e-01 6.02903899e+00 -6.19733443e+00 -5.84888929e-16
|
|
128
|
+
3.50396705e+01 -8.30517047e-16]
|
|
129
|
+
[ 5.75037319e-16 3.35378009e-15 -2.73847961e-16 5.34392791e+00
|
|
130
|
+
2.89814218e-16 3.85229349e+01]]
|
|
131
|
+
|
|
132
|
+
Random sampling
|
|
133
|
+
~~~~~~~~~~~~~~
|
|
134
|
+
Sample of orientations can be drawn from all kind of textures. While a "random" sample from a single discrete texture
|
|
135
|
+
does not make any sense, it can be of great interest for fibres or composite textures.
|
|
136
|
+
|
|
137
|
+
For instance, a sample of 10 orientations can be drawn from the composite texture defined above as follows:
|
|
138
|
+
|
|
139
|
+
>>> sample = t.sample(num=10, seed=123) # Seed here is used to ensure reproducibility
|
|
140
|
+
>>> sample
|
|
141
|
+
Orientation (10,) 1
|
|
142
|
+
[[ 0.1157 0.5901 0.2194 -0.7683]
|
|
143
|
+
[ 0.3954 -0.6714 -0.421 0.4644]
|
|
144
|
+
[ 0.9571 -0.1986 -0.2022 0.0609]
|
|
145
|
+
[ 0.0802 -0.7012 0.3947 -0.5883]
|
|
146
|
+
[ 0.1952 -0.8854 0.3814 0.1802]
|
|
147
|
+
[-0.4814 0.4494 0.097 0.7463]
|
|
148
|
+
[ 0.3647 -0.2798 -0.1159 -0.8805]
|
|
149
|
+
[ 0.3647 -0.2798 -0.1159 -0.8805]
|
|
150
|
+
[ 0.3647 -0.2798 -0.1159 -0.8805]
|
|
151
|
+
[ 0.3647 -0.2798 -0.1159 -0.8805]]
|
|
152
|
+
|
|
153
|
+
One may note that here, the 4 last orientations are the same. This is because it relates to the copper texture:
|
|
154
|
+
|
|
155
|
+
>>> DiscreteTexture.copper().orientation
|
|
156
|
+
Orientation (1,) 1
|
|
157
|
+
[[ 0.3647 -0.2798 -0.1159 -0.8805]]
|
|
158
|
+
|
|
159
|
+
Plotting
|
|
160
|
+
~~~~~~~~
|
|
161
|
+
Pole figures can be drawn to evidence how each texture works. For instance, the (pure) Goss texture results in the
|
|
162
|
+
following pole figure:
|
|
163
|
+
|
|
164
|
+
.. plot::
|
|
165
|
+
|
|
166
|
+
>>> from elasticipy.crystal_texture import DiscreteTexture
|
|
167
|
+
>>> from orix.crystal_map import Phase
|
|
168
|
+
>>> from orix.vector.miller import Miller
|
|
169
|
+
>>>
|
|
170
|
+
>>> phase = Phase(point_group='m-3m') # Cubic symmetry
|
|
171
|
+
>>> m = Miller(uvw=[1,0,0], phase=phase)
|
|
172
|
+
>>> Goss = DiscreteTexture.Goss()
|
|
173
|
+
>>> fig, ax = Goss.plot_as_pole_figure(m.symmetrise(unique=True))
|
|
174
|
+
>>> fig.show()
|
|
175
|
+
|
|
176
|
+
Fibre textures can be drawn in a simular way. E.g.:
|
|
177
|
+
|
|
178
|
+
.. plot::
|
|
179
|
+
|
|
180
|
+
>>> from elasticipy.crystal_texture import FibreTexture
|
|
181
|
+
>>> from orix.crystal_map import Phase
|
|
182
|
+
>>> from orix.vector.miller import Miller
|
|
183
|
+
>>>
|
|
184
|
+
>>> gamma = FibreTexture.gamma()
|
|
185
|
+
>>> point_group = 'm3m' # BCC symmetry
|
|
186
|
+
>>> m = Miller(uvw=[1,0,0], phase=Phase(point_group=point_group))
|
|
187
|
+
>>> fig, ax = gamma.plot_as_pole_figure(m.symmetrise(unique=True))
|
|
188
|
+
>>> fig.show()
|
|
@@ -3,7 +3,7 @@ Elasticipy Documentation
|
|
|
3
3
|
|
|
4
4
|
.. |binder| image:: https://mybinder.org/badge_logo.svg
|
|
5
5
|
:alt: Binder
|
|
6
|
-
:target: https://mybinder.org/v2/gh/DorianDepriester/
|
|
6
|
+
:target: https://mybinder.org/v2/gh/DorianDepriester/elasticipy-notebook/HEAD?urlpath=%2Fdoc%2Ftree%2FElasticipy.ipynb
|
|
7
7
|
|
|
8
8
|
.. |joss| image:: https://joss.theoj.org/papers/10.21105/joss.07940/status.svg
|
|
9
9
|
:alt: doi:10.21105/joss.07940
|
|
@@ -49,7 +49,7 @@ Elasticipy Documentation
|
|
|
49
49
|
|
|
50
50
|
|pypi| |pypi-downloads| |conda| |conda-downloads|
|
|
51
51
|
|github-commit| |github-stars| |license|
|
|
52
|
-
|doc| |coverage| |pypi-version| |joss|
|
|
52
|
+
|doc| |coverage| |pypi-version| |joss| |binder|
|
|
53
53
|
|
|
54
54
|
|
|
55
55
|
Purpose of this package
|
|
@@ -26,7 +26,8 @@ dependencies = [
|
|
|
26
26
|
"matplotlib",
|
|
27
27
|
"qtpy",
|
|
28
28
|
"pyqt5",
|
|
29
|
-
"pandas"
|
|
29
|
+
"pandas",
|
|
30
|
+
"orix"
|
|
30
31
|
]
|
|
31
32
|
requires-python = ">=3.9"
|
|
32
33
|
|
|
@@ -56,15 +57,8 @@ addopts = "--cov=src/Elasticipy --cov-report=xml"
|
|
|
56
57
|
|
|
57
58
|
[tool.coverage.run]
|
|
58
59
|
omit = [
|
|
59
|
-
"src/elasticipy/gui
|
|
60
|
+
"src/elasticipy/gui/*",
|
|
60
61
|
]
|
|
61
62
|
|
|
62
|
-
[tool.poetry]
|
|
63
|
-
name = "jupyter-notebook-tutorial"
|
|
64
|
-
version = "0.1.0"
|
|
65
|
-
description = "Short tutorial for Elasticipy"
|
|
66
|
-
authors = ["Dorian DEPRIESTER <dorian.dep@gmail.com>"]
|
|
67
|
-
readme = "README.md"
|
|
68
|
-
|
|
69
63
|
[project.gui-scripts]
|
|
70
|
-
elasticipy-gui = "elasticipy.gui:crystal_elastic_plotter"
|
|
64
|
+
elasticipy-gui = "elasticipy.gui:crystal_elastic_plotter"
|