(tl;dr: download the latest version from github.)
The purpose of this program is to calculate some properties of fiber-reinforced composite laminates. It calculates:
- engineering properties like Ex, Ey, Gxy
- thermal properties αx and αy
- physical properties like density (ρ) and laminate thickness (t)
- in-plane stiffness (ABD) and transverse stiffness (H) matrix
- 3D stiffness tensor for use in FEA.
Although these properties are not very difficult to calculate, (the relevant equations and formulas can be readily found in the available composite literature) the calculation is time-consuming and error-prone when done by hand.
Below is a sample of the program’s output, formatted with LaTeX.
N.B.: This program can not calculate the strength of composite laminates. Because there are many different failure modes, strengths of composite laminates cannot readily be calculated from the strengths of the separate materials that form the laminate. These strengths have to be determined from tests.
The precursor for this program was a spreadsheet that I wrote because of the aforementioned tedium in doing laminate properties caclulations by hand. This worked, but had significant limitations in the sense that it could only handle a fixed number of layers, and that the spreadsheet calculations sometimes did not yield the correct result!
So I wrote lamprop in C. By design the output was printed by a single function, so it was easy to implement e.g. LaTeX and HTML output next to plain text.
As an exercise in learning the language, the author ported the program to the Python programming language. This proved to be a much cleaner, more maintainable and shorter implementation.
Additionally, the generally hard to obtain transverse fiber properties were replaced with properties derived from the matrix.
In 2015, the source repository was published on github.
Changes in version 2
In version 2.0 the software was ported to Python 3. Also the internal API was
completely reworked. The different output formats were made more consistent.
Text output on ms-windows avoids using unicode output since
doesn’t handle that well. Output in rich text format (“RTF”) was added.
From version 2.1, the laminae in the output are numbered from 1 instead of 0.
Changes in version 3
Support for old style fiber properties (which also specified properties in the radial direction of the fiber) has been removed from the code. The reason for that is that such radial properties are generally not specified for anisotropic fibers.
Changes to versioning
On 2020-10-03, lamprop has switched to using the release date as the version. So 4.2 became 2020-03-13.
Changes in version 2020.12.22
The internals have been updated to use
- Halpin-Tsai approximation for E2 and to help calculate Ez,
- periodic micromechanics model for single plies and
- first order shear deformation theory for laminates.
This helps yield better data for FEA.
The current version is written in python, and requires at least version 3.6. It is not compatible with Python 2! It has no library requirments outside of the Python standard library. As of end of 2020 it is being developed and tested using Python 3.9.
The installed scripts are an archive of compiled Python bytecode. This was done to make the installation on non-UNIX platforms easier. This means that you have to re-install lamprop after updating Python to a new version.
The following references were used in creating this program;
- L.J. Hart-Smith, The ten-percent rule for preliminary sizing of fibrous composite structures, Weight Engineering, 52, 29-45, 1992
- M. W. Hyer, Stress Analysis of Fiber Reinforced Composite Materials, McGraw-Hill, Boston, USA, 1997
- Stephen W. Tsai, Theory of composites design, Think Composites, Dayton, USA, 1992
- J.R. Vinson and R.L. Sierakowski, The Behavior of Structures Composed of Composite Materials, Martinus Nijhoff Publishers, Dordrecht, The Netherlands, 1987
The latest version is found on github.
- On the nature of GUI programs
- Have Python log to syslog
- Including binary data in Python scripts
- A simple feed reader for Youtube
- Attempting a conky replacement in Python (part 2)