There are many possible solutions and options for a custom Pythonic material library. The basic idea is to be able to store and later on read a set of materials as an alternative to copy and paste the dictionary into the code.
A data structure to store all materials could for example be another dictionary or a list. Since there is no obvious need for having an associated array, a list will work just fine.
Copy the following into a python file:
# matlib.py
materials=[]
materials.append( {"name": "E-glass/Epoxy", "units": "MPa-mm-Mg", "type": "UD", "fiber": "E-glass",
"Vf": 0.55, "rho": 2000E-12,
"description": "Typical UD E-glass/Epoxy from TMM4175",
"E1": 40000, "E2": 10000, "E3": 10000,
"v12": 0.3, "v13": 0.3, "v23": 0.4,
"G12": 3800, "G13": 3800, "G23": 3400,
"a1": 7e-06, "a2": 2.2e-05, "a3": 2.2e-05,
"XT": 1000, "YT": 40, "ZT": 40,
"XC": 700, "YC": 120, "ZC": 120,
"S12": 70, "S13": 70, "S23": 40,
"f12":-0.5, "f13":-0.5, "f23":-0.5} )
materials.append( {"name": "S-glass/Epoxy", "units": "MPa-mm-Mg", "type": "UD", "fiber": "S-glass",
"Vf": 0.55, "rho": 2000E-12,
"description": "Typical UD S-glass/Epoxy from TMM4175",
"E1": 48000, "E2": 11000, "E3": 11000,
"v12": 0.3, "v13": 0.3, "v23": 0.4,
"G12": 4200, "G13": 4200, "G23": 3600,
"a1": 4e-06, "a2": 2.0e-05, "a3": 2.0e-05,
"XT": 1300, "YT": 40, "ZT": 40,
"XC": 800, "YC": 140, "ZC": 140,
"S12": 70, "S13": 70, "S23": 40,
"f12":-0.5, "f13":-0.5, "f23":-0.5} )
materials.append( {"name": "Kevlar-49/Epoxy", "units": "MPa-mm-Mg", "type": "UD", "fiber": "Kevlar-49",
"Vf": 0.55, "rho": 1400E-12,
"description": "Typical UD Kevlar-49/Epoxy from TMM4175",
"E1": 73000, "E2": 5000, "E3": 5000,
"v12": 0.35, "v13": 0.35, "v23": 0.45,
"G12": 2200, "G13": 2200, "G23": 1700,
"a1": -1e-06, "a2": 5.0e-05, "a3": 5.0e-05,
"XT": 1400, "YT": 20, "ZT": 20,
"XC": 300, "YC": 120, "ZC": 120,
"S12": 40, "S13": 40, "S23": 20,
"f12":-0.5, "f13":-0.5, "f23":-0.5} )
materials.append( {"name": "Carbon/Epoxy(a)", "units": "MPa-mm-Mg", "type": "UD", "fiber": "Carbon",
"Vf": 0.55, "rho": 1600E-12,
"description": "Typical low modulus carbon/Epoxy from TMM4175",
"E1": 130000, "E2": 10000, "E3": 10000,
"v12": 0.28, "v13": 0.28, "v23": 0.5,
"G12": 4500, "G13": 4500, "G23": 3500,
"a1": -0.5e-06, "a2": 3.0e-05, "a3": 3.0e-05,
"XT": 1800, "YT": 40, "ZT": 40,
"XC": 1200, "YC": 180, "ZC": 180,
"S12": 70, "S13": 70, "S23": 40,
"f12":-0.5, "f13":-0.5, "f23":-0.5} )
materials.append( {"name": "Carbon/Epoxy(b)", "units": "MPa-mm-Mg", "type": "UD", "fiber": "Carbon",
"Vf": 0.55, "rho": 1700E-12,
"description": "Typical high modulus carbon/Epoxy from TMM4175",
"E1": 330000, "E2": 8000, "E3": 8000,
"v12": 0.28, "v13": 0.28, "v23": 0.5,
"G12": 4000, "G13": 4000, "G23": 2700,
"a1": -0.7e-06, "a2": 3.0e-05, "a3": 3.0e-05,
"XT": 1000, "YT": 40, "ZT": 40,
"XC": 800, "YC": 100, "ZC": 100,
"S12": 70, "S13": 70, "S23": 40,
"f12":-0.5, "f13":-0.5, "f23":-0.5} )
def get(matname):
for m in materials:
if m['name']==matname:
return m
return False
def printlist():
for m in materials:
print(m['name'])
def newMaterial(**kwargs):
m={}
for key in kwargs:
m.update({key:kwargs[key]})
return m
Then, in your notebook:
import matlib
Listing of all materials:
matlib.printlist()
A specific material by name:
m1 = matlib.get('Carbon/Epoxy(a)')
print(m1)
Comparing properties, for example longitudinal modulus:
for m in matlib.materials:
print(m['name'], m['E1'])
Writing the list of materials to a file using json
:
import json
with open('TMM4175Matlib.txt', 'w') as file:
file.write(json.dumps(matlib.materials))
The file written above contains now the data structure matlib.materials
which is the list of materials. It can be read into a new variable using json
:
with open('TMM4175Matlib.txt', "r") as file:
read_materials = json.load(file)
Verifying:
for m in read_materials:
print(m['name'])
Disclaimer:This site is about polymer composites, designed for educational purposes. Consumption and use of any sort & kind is solely at your own risk.
Fair use: I spent some time making all the pages, and even the figures and illustrations are my own creations. Obviously, you may steal whatever you find useful here, but please show decency and give some acknowledgment if or when copying. Thanks! Contact me: nils.p.vedvik@ntnu.no www.ntnu.edu/employees/nils.p.vedvik
Copyright 2021, All right reserved, I guess.