Vamsi - Assignment - Ipynb - Colab
Vamsi - Assignment - Ipynb - Colab
ipynb - Colab
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# Ensure that the data size matches the expected grid (15 x 18 = 270 nodes)
expected_num_coords = 15 * 18
if num_undeformed_coords != expected_num_coords or num_deformed_coords != expected_num_coords:
print("Warning: Number of coordinates does not match expected grid size!")
# Material parameters
material_params = {
'Ogden': {'mu': 0.0783, 'alpha': 2.5279},
'Mooney-Rivlin': {'C1': 0.1037, 'C2': -0.0613},
'Neo-Hookean': {'C1': 0.0886},
'Yeoh': {'C1': 0.1522, 'C2': -0.0048, 'C3': 0.0001},
}
# Edge vectors
V1 = X[1] - X[0]
V2 = X[3] - X[0]
v1 = x[1] - x[0]
v2 = x[3] - x[0]
# Deformation gradient
V = np.column_stack((V1, V2))
v = np.column_stack((v1, v2))
F = np.dot(v, np.linalg.inv(V))
F_all[e, :, :] = F
for e in range(num_elements):
lambda1, lambda2 = principal_stretches[e, :]
# Ogden Model
if 'Ogden' in material_params:
mu, alpha = material_params['Ogden']['mu'], material_params['Ogden']['alpha']
P1 = mu * (lambda1**(alpha - 1) - lambda1**(-0.5 * (alpha + 1)))
P2 = mu * (lambda2**(alpha - 1) - lambda2**(-0.5 * (alpha + 1)))
stresses['Ogden'][e, :] = [P1 / lambda1, P2 / lambda2]
# Mooney-Rivlin Model
if 'Mooney-Rivlin' in material_params:
C1, C2 = material_params['Mooney-Rivlin']['C1'], material_params['Mooney-Rivlin']['C2']
P1 = 2 * C1 * (lambda1 - 1 / lambda1**2) + 2 * C2 * (1 / lambda1 - lambda1**2)
P2 = 2 * C1 * (lambda2 - 1 / lambda2**2) + 2 * C2 * (1 / lambda2 - lambda2**2)
stresses['Mooney-Rivlin'][e, :] = [P1 / lambda1, P2 / lambda2]
# Neo-Hookean Model
if 'Neo-Hookean' in material_params:
C1 = material_params['Neo-Hookean']['C1']
P1 = 2 * C1 * (lambda1 - 1 / lambda1**2)
P2 = 2 * C1 * (lambda2 - 1 / lambda2**2)
stresses['Neo-Hookean'][e, :] = [P1 / lambda1, P2 / lambda2]
# Yeoh Model
if 'Yeoh' in material_params:
C1, C2, C3 = (material_params['Yeoh']['C1'],
material_params['Yeoh']['C2'],
material_params['Yeoh']['C3'])
P1 = 2 * (C1 * (lambda1 - 1 / lambda1**2) +
2 * C2 * (lambda1**2 - 3) * (lambda1 - 1 / lambda1**2) +
3 * C3 * (lambda1**2 - 3)**2 * (lambda1 - 1 / lambda1**2))
P2 = 2 * (C1 * (lambda2 - 1 / lambda2**2) +
2 * C2 * (lambda2**2 - 3) * (lambda2 - 1 / lambda2**2) +
3 * C3 * (lambda2**2 - 3)**2 * (lambda2 - 1 / lambda2**2))
stresses['Yeoh'][e, :] = [P1 / lambda1, P2 / lambda2]
return stresses
# Compute stresses
stresses = compute_stresses(principal_stretches, material_params)
# Visualization
fig, axes = plt.subplots(4, 2, figsize=(18, 16), dpi=200)
models = list(stresses.keys())
https://colab.research.google.com/drive/1MRdp9Rd1zlFwPkoIpUUSPqUnPpntCYi9#scrollTo=7xPoRngdN_ip&printMode=true 2/3
12/2/24, 12:00 AM vamsi_assignment.ipynb - Colab
Number of undeformed coordinates: 303
Number of deformed coordinates: 303
Warning: Number of coordinates does not match expected grid size!
https://colab.research.google.com/drive/1MRdp9Rd1zlFwPkoIpUUSPqUnPpntCYi9#scrollTo=7xPoRngdN_ip&printMode=true 3/3