.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "examples/LinearizedElasticity/Homog5.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note :ref:`Go to the end ` to download the full example code. .. rst-class:: sphx-glr-example-title .. _sphx_glr_examples_LinearizedElasticity_Homog5.py: Homog5 ====== Conduct 3d homogenization on a periodic mesh generated with `microgen `_. .. GENERATED FROM PYTHON SOURCE LINES 12-163 .. tab-set:: .. tab-item:: Static Scene .. image-sg:: /examples/LinearizedElasticity/images/sphx_glr_Homog5_001.png :alt: Homog5 :srcset: /examples/LinearizedElasticity/images/sphx_glr_Homog5_001.png :class: sphx-glr-single-img .. tab-item:: Interactive Scene .. offlineviewer:: /home/docs/checkouts/readthedocs.org/user_builds/easyfea/checkouts/latest/docs/examples/LinearizedElasticity/images/sphx_glr_Homog5_001.vtksz .. tab-set:: .. tab-item:: Static Scene .. image-sg:: /examples/LinearizedElasticity/images/sphx_glr_Homog5_002.png :alt: Homog5 :srcset: /examples/LinearizedElasticity/images/sphx_glr_Homog5_002.png :class: sphx-glr-single-img .. tab-item:: Interactive Scene .. offlineviewer:: /home/docs/checkouts/readthedocs.org/user_builds/easyfea/checkouts/latest/docs/examples/LinearizedElasticity/images/sphx_glr_Homog5_002.vtksz .. tab-set:: .. tab-item:: Static Scene .. image-sg:: /examples/LinearizedElasticity/images/sphx_glr_Homog5_003.png :alt: Homog5 :srcset: /examples/LinearizedElasticity/images/sphx_glr_Homog5_003.png :class: sphx-glr-single-img .. tab-item:: Interactive Scene .. offlineviewer:: /home/docs/checkouts/readthedocs.org/user_builds/easyfea/checkouts/latest/docs/examples/LinearizedElasticity/images/sphx_glr_Homog5_003.vtksz .. tab-set:: .. tab-item:: Static Scene .. image-sg:: /examples/LinearizedElasticity/images/sphx_glr_Homog5_004.png :alt: Homog5 :srcset: /examples/LinearizedElasticity/images/sphx_glr_Homog5_004.png :class: sphx-glr-single-img .. tab-item:: Interactive Scene .. offlineviewer:: /home/docs/checkouts/readthedocs.org/user_builds/easyfea/checkouts/latest/docs/examples/LinearizedElasticity/images/sphx_glr_Homog5_004.vtksz .. tab-set:: .. tab-item:: Static Scene .. image-sg:: /examples/LinearizedElasticity/images/sphx_glr_Homog5_005.png :alt: Homog5 :srcset: /examples/LinearizedElasticity/images/sphx_glr_Homog5_005.png :class: sphx-glr-single-img .. tab-item:: Interactive Scene .. offlineviewer:: /home/docs/checkouts/readthedocs.org/user_builds/easyfea/checkouts/latest/docs/examples/LinearizedElasticity/images/sphx_glr_Homog5_005.vtksz .. tab-set:: .. tab-item:: Static Scene .. image-sg:: /examples/LinearizedElasticity/images/sphx_glr_Homog5_006.png :alt: Homog5 :srcset: /examples/LinearizedElasticity/images/sphx_glr_Homog5_006.png :class: sphx-glr-single-img .. tab-item:: Interactive Scene .. offlineviewer:: /home/docs/checkouts/readthedocs.org/user_builds/easyfea/checkouts/latest/docs/examples/LinearizedElasticity/images/sphx_glr_Homog5_006.vtksz .. tab-set:: .. tab-item:: Static Scene .. image-sg:: /examples/LinearizedElasticity/images/sphx_glr_Homog5_007.png :alt: Homog5 :srcset: /examples/LinearizedElasticity/images/sphx_glr_Homog5_007.png :class: sphx-glr-single-img .. tab-item:: Interactive Scene .. offlineviewer:: /home/docs/checkouts/readthedocs.org/user_builds/easyfea/checkouts/latest/docs/examples/LinearizedElasticity/images/sphx_glr_Homog5_007.vtksz .. tab-set:: .. tab-item:: Static Scene .. image-sg:: /examples/LinearizedElasticity/images/sphx_glr_Homog5_008.png :alt: Homog5 :srcset: /examples/LinearizedElasticity/images/sphx_glr_Homog5_008.png :class: sphx-glr-single-img .. tab-item:: Interactive Scene .. offlineviewer:: /home/docs/checkouts/readthedocs.org/user_builds/easyfea/checkouts/latest/docs/examples/LinearizedElasticity/images/sphx_glr_Homog5_008.vtksz .. tab-set:: .. tab-item:: Static Scene .. image-sg:: /examples/LinearizedElasticity/images/sphx_glr_Homog5_009.png :alt: Homog5 :srcset: /examples/LinearizedElasticity/images/sphx_glr_Homog5_009.png :class: sphx-glr-single-img .. tab-item:: Interactive Scene .. offlineviewer:: /home/docs/checkouts/readthedocs.org/user_builds/easyfea/checkouts/latest/docs/examples/LinearizedElasticity/images/sphx_glr_Homog5_009.vtksz .. tab-set:: .. tab-item:: Static Scene .. image-sg:: /examples/LinearizedElasticity/images/sphx_glr_Homog5_010.png :alt: Homog5 :srcset: /examples/LinearizedElasticity/images/sphx_glr_Homog5_010.png :class: sphx-glr-single-img .. tab-item:: Interactive Scene .. offlineviewer:: /home/docs/checkouts/readthedocs.org/user_builds/easyfea/checkouts/latest/docs/examples/LinearizedElasticity/images/sphx_glr_Homog5_010.vtksz .. tab-set:: .. tab-item:: Static Scene .. image-sg:: /examples/LinearizedElasticity/images/sphx_glr_Homog5_011.png :alt: Homog5 :srcset: /examples/LinearizedElasticity/images/sphx_glr_Homog5_011.png :class: sphx-glr-single-img .. tab-item:: Interactive Scene .. offlineviewer:: /home/docs/checkouts/readthedocs.org/user_builds/easyfea/checkouts/latest/docs/examples/LinearizedElasticity/images/sphx_glr_Homog5_011.vtksz .. rst-class:: sphx-glr-script-out .. code-block:: none Warning: The file contains tag data that couldn't be processed. Successfully imported the mesh in EasyFEA. Element type: TETRA4 Ne = 11112, Nn = 3826 TETRA4 -> Ne = 11112 C_hom = 7.977e-02 3.394e-02 3.390e-02 2.593e-05 5.758e-06 1.544e-05 3.394e-02 7.973e-02 3.389e-02 4.211e-05 3.200e-05 7.147e-05 3.390e-02 3.389e-02 7.977e-02 -8.281e-06 2.238e-05 1.388e-05 2.593e-05 4.211e-05 -8.281e-06 6.687e-02 -2.169e-05 -2.921e-05 5.758e-06 3.200e-05 2.238e-05 -2.169e-05 6.698e-02 -6.466e-05 1.544e-05 7.147e-05 1.388e-05 -2.921e-05 -6.466e-05 6.694e-02 | .. code-block:: Python :lineno-start: 13 import matplotlib.pyplot as plt import numpy as np from EasyFEA import Display, Folder, Models, Simulations, MeshIO, PyVista from EasyFEA.FEM import FeArray from Homog4 import Compute_ukl, Get_nodes, Get_pairedNodes if __name__ == "__main__": Display.Clear() # ---------------------------------------------- # Configuration # ---------------------------------------------- # use Periodic boundary conditions ? usePBC = True plotPBC = False plotSurfaces = False folderResults = Folder.Results_Dir() meshes_dir = Folder.Join(Folder.Dir(n=2), "_meshes") # ---------------------------------------------- # Mesh # ---------------------------------------------- gmshFile = Folder.Join(meshes_dir, "octet_truss.msh") mesh = MeshIO.Gmsh_to_EasyFEA(gmshFile) mesh.Translate(*-mesh.center) # center mesh on 0,0,0 plotter = PyVista.Plot_Mesh(mesh) plotter.show_grid() plotter.add_title("RVE") plotter.show() # ---------------------------------------------- # Get paired nodes # ---------------------------------------------- tuple_nodes = Get_nodes(mesh, plotSurfaces=plotSurfaces) if usePBC: nodesKUBC = None pairedNodes = Get_pairedNodes(mesh, *tuple_nodes, plotPBC=plotPBC) else: nodesKUBC = set(np.concatenate(tuple_nodes)) nodesKUBC = list(nodesKUBC) pairedNodes = None # ---------------------------------------------- # Material and Simulation # ---------------------------------------------- material = Models.Elastic.Isotropic(3, E=1, v=0.3) simu = Simulations.Elastic(mesh, material) # ---------------------------------------------- # Homogenization # ---------------------------------------------- r2 = np.sqrt(2) E1 = np.array( [ [1, 0, 0], [0, 0, 0], [0, 0, 0], ] ) E2 = np.array( [ [0, 0, 0], [0, 1, 0], [0, 0, 0], ] ) E3 = np.array( [ [0, 0, 0], [0, 0, 0], [0, 0, 1], ] ) E12 = np.array( [ [0, 1 / r2, 0], [1 / r2, 0, 0], [0, 0, 0], ] ) E13 = np.array( [ [0, 0, 1 / r2], [0, 0, 0], [1 / r2, 0, 0], ] ) E23 = np.array( [ [0, 0, 0], [0, 0, 1 / r2], [0, 1 / r2, 0], ] ) u11 = Compute_ukl(simu, E1, nodesKUBC, pairedNodes, True) u22 = Compute_ukl(simu, E2, nodesKUBC, pairedNodes) u33 = Compute_ukl(simu, E3, nodesKUBC, pairedNodes) u12 = Compute_ukl(simu, E12, nodesKUBC, pairedNodes, True) u13 = Compute_ukl(simu, E13, nodesKUBC, pairedNodes) u23 = Compute_ukl(simu, E23, nodesKUBC, pairedNodes) u11_e = mesh.Locates_sol_e(u11, asFeArray=True) u22_e = mesh.Locates_sol_e(u22, asFeArray=True) u33_e = mesh.Locates_sol_e(u33, asFeArray=True) u12_e = mesh.Locates_sol_e(u12, asFeArray=True) u13_e = mesh.Locates_sol_e(u13, asFeArray=True) u23_e = mesh.Locates_sol_e(u23, asFeArray=True) # ---------------------------------------------- # Effective elasticity tensor (C_hom) # ---------------------------------------------- U_e = FeArray.zeros(*u11_e.shape, 6) U_e[..., 0] = u11_e U_e[..., 1] = u22_e U_e[..., 2] = u33_e U_e[..., 3] = u23_e U_e[..., 4] = u13_e U_e[..., 5] = u12_e matrixType = "mass" wJ_e_pg = mesh.Get_weightedJacobian_e_pg(matrixType) B_e_pg = mesh.Get_B_e_pg(matrixType) C_Mat = Models.Reshape_variable(material.C, *B_e_pg.shape[:2]) xMin, yMin, zMin = mesh.coord.min(axis=0) xMax, yMax, zMax = mesh.coord.max(axis=0) volume = (xMax - xMin) * (yMax - yMin) * (zMax - zMin) C_hom = (wJ_e_pg * C_Mat @ B_e_pg @ U_e).sum((0, 1)) / volume formatted_array = "" for i in range(6): formatted_array += "\n" for j in range(6): formatted_array += f"{C_hom[i,j]:10.3e} " print("C_hom =", formatted_array) plt.show() .. rst-class:: sphx-glr-timing **Total running time of the script:** (0 minutes 10.112 seconds) .. _sphx_glr_download_examples_LinearizedElasticity_Homog5.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: Homog5.ipynb ` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: Homog5.py ` .. container:: sphx-glr-download sphx-glr-download-zip :download:`Download zipped: Homog5.zip ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_