Material

Overview
This page is about the Material data system in FreeCAD.

It is currently being edited to reflect changes to the Material system currently under development.

Abstract
In a departure from how it was implemented in previous versions, materials are no longer implemented as a simple dictionary. The previous system had the advantage of simplicity with the disadvantage of a limited range when describing material properties.

In the new system properties are defined separately as a series of YAML files. Properties are then combined into a property description with values specified for the required properties. Newer data types, such as arrays, mean that this can no longer be accessed using simple dictionaries. Rather an API is used to access the material property and data values. This allows for greater capabilities than was previously possible.

Rules
Every property set has only one mandatory entry which is "Name". This is the primary key of the material. The rest of the material properties are optional or can be retrieved out of a material DB.

Property names (key) are ordered by strings separated by underscores. The first substring is named by the application or standard, the following can be used to further group the properties. The Values can also be grouped by underscores, e.g. to separate different sorts of steel. Examples:
 * Name=Steel_Cast
 * SpecificWeight=7.85 (at 20° in kg/mm3)
 * EN10027_name = S235JR+AR (steel standard EN 10027-1)
 * FEM_YoungsModulus = xx (in  mm−1·kg·s−2)
 * FEM_YoungsModulus_Z
 * FEM_YoungsModulus_X

Each property has a human readable description on this Material page, with links to further information (e.g. Wikipedia).

For each property a unit has to be defined, based on the FreeCAD internal unit mm-kg-s! That allows consistent usage and translation.

The key (name) and the value of the property uses only ASCII characters (7-bit). The keys are written in Camel-Case but interpreted case-insensitive.

The underscores allow later a tree view property editor/viewer which allow folding.

Tools
There are some good resources out there handle materials more easy:
 * Units calculator to get your material information in the Unit needed for FreeCAD
 * http://www.matweb.com/ free of charge Material database with thousands of material values

Material Database
Given that above standard is implemented, it would be stupid to store all the properties again and again to objects. Basically we can build up a Material DB with the Name as a primary key. So if you have no special needs for your material, you just define e.g. Name=Steel and FreeCAD can retrieve all properties from that DB. Every additional property you set in the map overrides the one from the DB.

In the future we can host that DB somwhere in the Web and build up a general OpenSource material DB.

At the moment I think of a compiled in mini dataset with a set of "basic" materials and its basic properties and a SQLite based full version.

Material.py
Since handling material-properties is a tedious work we should implement a Python front-end module called [source]. This will be the place to implement all kind of helper methods for material handling.
 * Calculation of Mass out of Volume and Density
 * Translation in different unit systems
 * Calculation needed in special application (e.g. FEM)
 * and anything else we don't know yet

The module should be implemented that way it can run in FreeCAD or stand alone on the command line (material-property-map has be given as python map).

The FreeCAD material card file format
Working with materials means often import/export material-definitions. Therefore a file format is needed. Since we have only key/value form, we can use a simple and easy to read and parse file format. Therefore the ini-file format is chosen. Its standardized and there are already parser available. E.g the Config parser module in python.

Each material definition resides in a file with the ending. Some of these files are part of the FreeCAD source and get compiled into the binary. This is to save overhead in distribution and access. But also files can be placed and searched on different places to allow additional non-standard material definitions.

Material properties
Here now the description of agreed material-properties. Feel free to add a subsection for the material-properties of you field of expertise.

General
ToDos: add some properties with an ordering system for materials (metal, alloy, mineral, wood, ....)

Mechanical
ToDos: further add properties needed for mechanical design.

Graphical
This section defines material-properties which are related to the visual appearance of the material. The

TODO

 * add sustainability & LEED properties