A shortcut to material model discovery without solving optimization problems.
Project description
We propose Material Fingerprinting, a new method for the rapid discovery of mechanical material models from direct or indirect data that avoids solving potentially non-convex optimization problems. The core assumption of Material Fingerprinting is that each material exhibits a unique response when subjected to a standardized experimental setup. This response can be interpreted as the material's fingerprint, essentially a unique identifier that encodes all pertinent information about the material's mechanical characteristics. Consequently, if a database containing fingerprints and their corresponding mechanical models is established during an offline phase, an unseen material can be characterized rapidly in an online phase. This is accomplished by measuring its fingerprints and employing a pattern recognition algorithm to discover the best matching fingerprint in the database.
The figure above illustrates the concept of Material Fingerprinting in both direct and indirect experimental setups. The supervised case involves homogeneous deformation fields, yielding direct strain-stress data pairs. The unsupervised case, in contrast, uses complex specimen geometries that produce heterogeneous deformation fields and only provide indirect displacement and force measurements.
At the core of Material Fingerprinting is a straightforward pattern recognition algorithm. The figure above demonstrates how a new measurement is compared against all fingerprints in the database, correctly discovering the underlying material model — in this case, the Ogden model.
Installation
This repository provides the actively maintained, pip-installable package for Material Fingerprinting. The package requires Python version 3.10 or greater. To install the latest version, run the following in your Python environment:
pip install material-fingerprinting
If you have already installed Material Fingerprinting and want to upgrade to the latest version, run the following:
pip install --upgrade --force-reinstall material-fingerprinting
Example
After installing Material Fingerprinting, run the following Python script to test the installation:
import numpy as np
import material_fingerprinting as mf
# experimental data - this can be replaced by the user
F11 = np.array([0.7, 0.731578947368421, 0.763157894736842, 0.7947368421052632, 0.8263157894736842, 0.8578947368421053, 0.8894736842105263, 0.9210526315789473, 0.9526315789473685, 0.9842105263157894, 1.0157894736842106, 1.0473684210526315, 1.0789473684210527, 1.1105263157894738, 1.1421052631578947, 1.1736842105263159, 1.2052631578947368, 1.236842105263158, 1.2684210526315791, 1.3])
P11 = np.array([-514.4903790087465, -432.4853727035757, -361.07919497406556, -298.0450562094262, -241.6387671319149, -190.47903319886626, -143.46051524390043, -99.68990192707167, -58.43836225134238, -19.105803736164418, 18.806261662160683, 55.715507549699275, 91.97486010059563, 127.88501566129888, 163.7042672666993, 199.65627382279067, 235.93624412319468, 272.71589046790206, 310.1474205804502, 348.36677287209835])
F12 = np.array([0.0001, 0.026410526315789475, 0.05272105263157895, 0.07903157894736842, 0.1053421052631579, 0.13165263157894735, 0.15796315789473683, 0.1842736842105263, 0.2105842105263158, 0.23689473684210527, 0.2632052631578947, 0.2895157894736842, 0.3158263157894737, 0.3421368421052632, 0.36844736842105263, 0.39475789473684214, 0.4210684210526316, 0.44737894736842104, 0.47368947368421055, 0.5])
P12 = np.array([0.04000000020003427, 10.567894878723784, 21.117728784805728, 31.711357676748666, 42.37063751285542, 53.11742425142862, 63.97357385077116, 74.96094226918581, 86.10138546497544, 97.4167593964426, 108.9289200218903, 120.65972329962132, 132.6310251879383, 144.86468164514412, 157.3825486295415, 170.2064820994333, 183.35833801312225, 196.85997232891114, 210.7332410051028, 225.00000000000006])
# let's make some noise
P11 += 20 * np.random.randn(*P11.shape)
P12 += 10 * np.random.randn(*P12.shape)
# prepare data for discovery
measurement1 = mf.Measurement("uniaxial tension/compression", F11, P11)
measurement2 = mf.Measurement("simple shear", F12, P12)
# discover model with Material Fingerprinting
mf.discover([measurement1, measurement2])
In less than a second, Material Fingerprinting discovers the material model and plots its response alongside the provided data.
References
-
Flaschel, Moritz; Martonová, Denisa; Veil, Carina; Kuhl, Ellen. Material Fingerprinting: A shortcut to material model discovery without solving optimization problems. arXiv preprint arXiv:2508.07831, 2025. DOI: 10.48550/arXiv.2508.07831
-
Martonová, Denisa; Kuhl, Ellen; Flaschel, Moritz. Material Fingerprinting for rapid discovery of hyperelastic models: First experimental validation. Available at SSRN, 2025. DOI: 10.2139/ssrn.5517672
How to cite the code
@software{flaschel2025python,
author = {Flaschel, Moritz and Martonová, Denisa and Veil, Carina and Kuhl, Ellen},
title = {Python package for Material Fingerprinting},
year = {2025},
publisher = {Zenodo},
doi = {10.5281/zenodo.17098250},
url = {https://github.com/Material-Fingerprinting/material-fingerprinting}
}
Release Notes
| Version | Changes |
|---|---|
| 0.1.4 | print cosine similarity |
| 0.1.3 | save data as pickle; added pure shear and equibiaxial tension/compression |
| 0.0.3 | added pure uniaxial tension, compression and pure simple shear |
| 0.0.2 | initial release for supervised Material Fingerprinting for uniaxial tension, compression and simple shear data |
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file material_fingerprinting-0.1.4.tar.gz.
File metadata
- Download URL: material_fingerprinting-0.1.4.tar.gz
- Upload date:
- Size: 49.3 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9c399e090821efe486e3d6e724a5472ca641277b7cbb8d0967a0c326d335be99
|
|
| MD5 |
0a8a69fe1472c59919d0cc83888c067e
|
|
| BLAKE2b-256 |
197516a6591c8cbc5a294d97e3d01da2845e09d141e4ae8620b4f42be9472964
|
File details
Details for the file material_fingerprinting-0.1.4-py3-none-any.whl.
File metadata
- Download URL: material_fingerprinting-0.1.4-py3-none-any.whl
- Upload date:
- Size: 49.3 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
376fa46f2ff5535b44a5c433ef1fc74fa325ece86dd742c63961ec508c6ed377
|
|
| MD5 |
06a11788e4d579ec14da6eec17924d4f
|
|
| BLAKE2b-256 |
4d549986af177fc7047599d136b6d1df9498991f9bded350ca534c9dc811b8ab
|