Honeycomb Structures and Resolution in FEM

AI Thread Summary
The discussion centers on an engineering student's challenges with implementing wave propagation in honeycomb structures using Python, specifically through the finite element method (FEM) and Bloch's theory. The student has self-taught the concepts but lacks formal education in these areas, leading to difficulties in achieving accurate results. They provided a code snippet that initializes mass and stiffness matrices but noted that their results differ significantly from established research. The student seeks suggestions or assistance to improve their implementation and achieve more reliable outcomes. Overall, the thread highlights the complexities of applying FEM to periodic structures and the need for guidance in mastering these advanced topics.
ShashankanB
Messages
1
Reaction score
0
TL;DR Summary
I struggle to implement the perturbation of a wave in a Honeycomb structure : i can't have the results which can be find on internet.
Hi,
I am a engineering student and I am in apprenticeship with a mechanics lab : I am studying about Honeycomb propagation and periodic structures. I hadn't have any courses in FEM or in Bloch's theory, I've done all by myself : but there is the problem, i didn't practice or use viable courses. I tired to implement the propagation in 2D of a wave in these honeycombs, with the following code in Python :

[CODE lang="python" title="Honeycomb wave propagation (function names are in french)"]from Matrices import mass_matrix,stiffness_matrix
from Maillage import Elements_decoupe_unique
from Maillage import Affiche_elements_decoupe as AED
import numpy as np
import matplotlib.pyplot as plt
from scipy.linalg import eig

rayon = 0.01
element = Elements_decoupe_unique(2, 1, rayon, opt = False, offset = True)
periode = np.array([element[5]] + [element[7]] + [element[3]] + [element[6]] + [element[4]])
nb = len(periode) #Nombre d'elements
nn = nb + 1 #Nombre de noeuds

#Initialisation
h = rayon*np.array([0.5,0.5,0.5,0.5,1])
K = np.zeros((2*len(h)+2,2*len(h)+2)) #Matrice de Raideur
F = np.zeros(2*len(h)+2) #Matrice des forces
M = np.zeros((2*len(h)+2,2*len(h)+2)) #Matrice des masses

L = np.sqrt((periode[0,1] - periode[1,1])[0] ** 2 + (periode[0,1] - periode[1,1])[1] ** 2)
#Valeurs tabulées
E = 71e9
I_zz = 1e-6
r = 2700
s = 1e-4

for i in range(len(h)):
K[i*2 : 2*i + 4,2*i : 2*i + 4] += stiffness_matrix(E,I_zz,h)
M[i*2 : 2*i + 4,2*i : 2*i + 4] += mass_matrix(r,s,h)

def Porpagation2D():
"""
Effectue la méthode de Bloch-Floquet sur un maillage hexagonal avec une perturbation bidimensionnelle

Argument :

Retoune:
- plot : affichage de la courbe de dispersion

"""
a = h[-1]
t0,L0 = 0.005, rayon
w0 = np.pi**2*t0/L0**2*np.sqrt(E/(12*r))

# Reciprocal lattice basis vectors
b1 = (2 * np.pi / a) * np.array([1, -1 / np.sqrt(3)])
b2 = (2 * np.pi / a) * np.array([0, 2 / np.sqrt(3)])

# Define high-symmetry points in reduced coordinates
P_G = np.array([0, 0])
P_K = np.array([2/3, 1/3])
P_M = np.array([1/2, 0])

# Chemin de la zone de Brillouin
num_points = 100
path = np.vstack([
np.linspace(P_G, P_K, num_points),
np.linspace(P_K, P_M, num_points),
np.linspace(P_M, P_G, num_points)
])


kx_ky = path @ np.array([b1, b2])
omega_values = np.zeros((len(kx_ky), 2 * nn), dtype=complex)
for i,(k1, k2) in enumerate(kx_ky):
# Construct the transformation matrix T
T = np.eye(2 * nn, dtype = complex)

T[0,2] = np.exp(1j*(k1*L))
T[1,3] = np.exp(1j*(k1*L))
T[2,0] = np.exp(-1j*(k1*L))
T[3,1] = np.exp(-1j*(k1*L))

T[4,6] = np.exp(1j*(k2*L*np.sqrt(3)/2 + k1*L/2))
T[5,7] = np.exp(1j*(k2*L*np.sqrt(3)/2 + k1*L/2))
T[6,4] = np.exp(-1j*(k2*L*np.sqrt(3)/2 + k1*L/2))
T[7,5] = np.exp(-1j*(k2*L*np.sqrt(3)/2 + k1*L/2))

K_transformed = np.dot(np.conj(T).T, np.dot(K, T))
M_transformed = np.dot(np.conj(T).T, np.dot(M, T))

eigenvalues, _ = eig(K_transformed, M_transformed)
omega_values[i, :] = np.sqrt(eigenvalues)/w0

distances = np.sqrt(np.sum(np.diff(kx_ky, axis=0) ** 2, axis=1))
k_path = np.insert(np.cumsum(distances), 0, 0)
for i in range(omega_values.shape[1]):
plt.plot(k_path, np.real(omega_values[:, i]),'.', lw = 0, ms = 5, c = 'black')

plt.grid()
plt.xlabel(r"Vecteur d'onde réduit (k) $m^{-1}$")
plt.xticks([0, k_path[num_points-1], k_path[2*num_points-1], k_path[-1]], ["Γ", "K", "M", "Γ"])
plt.ylabel(r"Pulsation temporelle normalisée ($\Omega$) rad/s ")
plt.title("Courbe de dispersion")
plt.show()

Porpagation2D()[/CODE]

But the result is absurd (left, mine and right from a research paper):
1741268410707.png
VS
1741268425774.png

If you have any suggestion or help, I am thanking you in advance,

P.S. : Please don't mind any English errors.
 
Posted June 2024 - 15 years after starting this class. I have learned a whole lot. To get to the short course on making your stock car, late model, hobby stock E-mod handle, look at the index below. Read all posts on Roll Center, Jacking effect and Why does car drive straight to the wall when I gas it? Also read You really have two race cars. This will cover 90% of problems you have. Simply put, the car pushes going in and is loose coming out. You do not have enuff downforce on the right...
I'm trying to decide what size and type of galvanized steel I need for 2 cantilever extensions. The cantilever is 5 ft. The space between the two cantilever arms is a 17 ft Gap the center 7 ft of the 17 ft Gap we'll need to Bear approximately 17,000 lb spread evenly from the front of the cantilever to the back of the cantilever over 5 ft. I will put support beams across these cantilever arms to support the load evenly
Thread 'What's the most likely cause for this carbon seal crack?'
We have a molded carbon graphite seal that is used in an inline axial piston, variable displacement hydraulic pump. One of our customers reported that, when using the “A” parts in the past, they only needed to replace them due to normal wear. However, after switching to our parts, the replacement cycle seems to be much shorter due to “broken” or “cracked” failures. This issue was identified after hydraulic fluid leakage was observed. According to their records, the same problem has occurred...
Back
Top