Material data model/it

Finalità e principi
Per memorizzare le proprietà dei materiali in una struttura di dati unificata. Uno degli scopi è quello di facilitare il recupero dei dati che può essere effettuato in diversi contesti:
 * quando si costruisce un modello di elemento finito
 * quando si renderizza un modello 3D
 * per essere in grado di seguire i cambiamenti nel materiale di un componente realizzato in FreeCAD, per applicazioni PDM,
 * applicazioni BIM (architettura e edilizia)

Per gestire le proprietà dei materiali, si propone di creare un modello di dati specifico da istanziare (replicare) quando viene creato un nuovo materiale all'interno di FreeCAD.

Esso renderà possibile creare un materiale definendo a mano le sue proprietà mediante un Ambiente dei materiali, oppure leggendo le proprietà dei materiali in un file. I formati di questi file sono da definire (alcuni esistono già, come MatML, STEP AP235 e IGR45 ...).

Inoltre, sarà possibile salvare le proprietà del materiale in una collezione di file in un formato che ancora deve essere scelto. I file potranno essere memorizzati in una directory comune e formare il database dei materiali di FreeCAD.

Tramite questo modello di dati, i materiali possono essere definiti in FreeCAD senza la necessità di definire un componente.

Nel modello dei dati del componente verrà creato un nuovo puntatore, per collegarlo ad un materiale che è stato definito tramite il modello di dati dei materiali.

Risultati
Tramite questo modello di dati dei materiali, si propone di offrire uno strumento per gestire facilmente i dati dei materiale all'interno di FreeCAD.

Organizzazione
Per descrivere un materiale devono essere gestiti diversi tipi di dati. Più avanti viene proposto un modello di dati dei materiali. Sono anche forniti alcuni esempi dei dati che possono essere memorizzati all'interno di questa struttura.

Modello di dati dei materiali
Oltre alle classiche "stringhe" di attributi quali il nome e la famiglia, per descrivere un materiale in FreeCAD, devono essere gestiti 3 diversi tipi specifici di informazioni. Affinchè il materiale esista, non è necessario che tutti questi tipi di informazioni siano definiti.
 * proprietà: struttura generica per memorizzare i dati che descrivono le proprietà ingegneristiche (proprietà fisiche) del materiale
 * composizione chimica: composizione chimica del materiale
 * aspetto: le informazioni che descrivono come sarà mostrato il materiale in FreeCAD (colore, brillantezza ...)

Infine, di seguito è mostrato l'elenco degli attributi salvaguardati per descrivere un materiale in FreeCAD.

Nome
Una stringa che indica il nome del materiale. È la sua designazione.

Famiglia
Una stringa che indica la famiglia del materiale, quali ad esempio: Addizionalmente, si propone di creare una mappa tra le famiglie (ad esempio memorizzata in un file XML) in modo da poter sfogliare il database dei materiali di FreeCAD.
 * metallico
 * plastico

Tale mappa potrebbe ad esempio contenere un albero che presenta le relazioni tra famiglie, come:


 * metallo -> acciaio -> acciaio al carbonio -> acciaio ad alta resistenza
 * metallo -> alluminio -> alluminio pressofuso

Manufacturer
A string indicating the manufacturer of the material.

URL
A string indicating the web page presenting the material.

Description
The material data model includes a collection of properties. The size of such a collection is not fixed and may be extended with new user-defined properties.

A property contains the following attributes.
 * name: string
 * symbol: string to write the symbol of the properties (?in Latex math format?)
 * type: "scalar" or "array"
 * value: scalar (if it is a scalar)
 * values: array (if it is an array)
 * parameterNames: array of strings (for "array" type property)
 * parameterValues: array of scalars (for "array" type property)
 * unit & unitMagnitude (specific object described in Units) (to be noted: examples include unitMagnitude, while I am not completely sure that this should be defined at property level. The unit system may be defined at material level)
 * direction: a vector indicating in which direction is to be understood the property value. The vector is itself a FreeCAD object expressed in the global coordinate system or in a user-defined coordinate system
 * notes: string that can be used to describe a bit more the property like what is its meaning, how has it been measured... It can also help to understand the name of the properties

Material properties will be identified thanks to their name in order to process them, i.e. for instance writing the Yield strength in a finite element model. In order to ease material data creation within FreeCAD, a standardized list of property names along with their standard units will be proposed to the user. Nonetheless, the user is free to create new properties, with new names, new units, and so on...

Below is proposed the dictionary of standard properties. Feel free to add new ones.              Notes: "Mean Lankford coefficient is representative of the anisotropy of a thin metal sheet." "The Hardening coefficient is representative of the hardening capacity of a metal. It appears in Hollomon formula that can relates cumulated plastic strain to stress."

Example 1: Cost per tonne
A first example is given below to show how a Cost per tonne property can be stored.
 * name: Cost per tonne
 * symbol: not applicable
 * type: scalar
 * value: 500
 * values: not applicable (but could be: for instance different cost values per different countries)
 * parameterNames: not applicable (but could be: for instance different cost values for different countries)
 * parameterValues: not applicable (but could be: for instance different cost values for different countries)
 * parameterUnits: not applicable
 * unit & unitMagnitude: [[ 0, -3, 0, 0, 0, 0, 0], 1]
 * meaning m^(-3) (more details about unit & unit system specifications in Units page)
 * direction: not applicable

Example 2: Yield strength
A second example is given below to show how the Yield strength property can be stored.
 * name: Yield stress
 * symbol: YS
 * type: scalar
 * value: 450
 * values: not applicable
 * parameterNames: not applicable
 * parameterValues: not applicable
 * parameterUnits: not applicable
 * unit & unitMagnitude: [[ -1, 1, -2, 0, 0, 0, 0], 1]
 * meaning Pa (more details about unit & unit system specifications in Units page)
 * direction: [ 1, 0, 0] in global coordinate system
 * given a steel sheet, this means that the Yield strength given is expressed in x direction, that can be for instance the rolling direction

Example 3: Strain hardening
A third example is given below to show how the Strain hardening property can be stored. This is a more complex example because Strain hardening is represented by a serie of curves. The curves represent the stress evolution with respect to plastic strain. 3 curves have been obtained at different strain rates. All curves have been obtained at room temperature.


 * name: Strain hardening
 * symbol: not applicable
 * type: scalar
 * value: not applicable
 * values: 0., 100, 150, 200], [ 0., 120, 180, 210], [ 0., 140, 190, 220
 * parameterNames: [Plastic strain, Strain rate, Temperature]
 * parameterValues:
 * The 1st three arrays represents plastic strain evolutions
 * The 2nd serie of three arrays represents the strain rate evolutions. A single value is given in each of the arrays, meaning that the strain rate doesn't change for each the corresponding stress evolutions.
 * The last serie of a single array represents temperature evolutions. This time a single value is written in a single array, meaning that temperature doesn't change for a given array of stress, and this applies for all stress arrays.
 * 1st serie: [0., 0.4, 0.8, 1], [ 0, 0.4, 0.8, 1], [ 0, 0.4, 0.8, 1,
 * 2nd serie: [[0.]            , [100]            , [1000.]          ],
 * 3rd serie: [[18.]                                                  ],]
 * parameterUnits & parameterUnitMagnitudes: [ 0, 0, 0, 0, 0, 0, 0], 1], [[ 0, 0, -1, 0, 0, 0, 0], 1], [[ 0, 0, 0, 0, 1, 0, 0], 1
 * meaning none, s^(-1) and, K (more details about unit & unit system specifications in Units page)
 * unit & unitMagnitude: [[ -1, 1, -2, 0, 0, 0, 0], 1]
 * meaning Pa (more details about unit & unit system specifications in Units page)
 * direction: not applicable

Chemical composition
[Yet to be filled up]

Appearance
[Yet to be filled up]

Name
Brick masonry

Family
?string?

Properties

 * Weight: 1kg/m³
 * Cost per cubic meter: 1€/m³
 * Number of bricks por base unit: ?float?
 * Volume of mortar por base unit: ?float?
 * Mortar type: ?string?
 * Brick type: ?string?
 * Fire resistance class: ?string?
 * Thermal conductivity: 1 W/mK

Manufacturer
?string?

URL
?string?

Next actions

 * Define a set of names for classical properties, that we can define in a dictionary (FreeCAD configuration file). These properties will most notably be re-used in other contexts like the FEM module.
 * Fill up Chemical composition section.
 * Fill up Appearance section.
 * Define a set of default chemical components.
 * Review by other people.
 * Implement in C++ data model and ability to write/read in a file (ISO 10303-45 through SCL?)).
 * Implement XML dictionaries to store default properties, with their units, that can be used by the user.
 * Implement python GUI to handle this data.