MaterialLaw keywords;
keyword@Author keyword@Bounds keyword@Constant keyword@DSL keyword@Date keyword@Description
keyword@Function keyword@Import keyword@Includes keyword@Input keyword@Interface keyword@Law keyword@Library keyword@Link keyword@MFront keyword@Material keyword@MaterialLaw
keyword@Output keyword@Parameter keyword@Parser keyword@PhysicalBounds
keyword@StateVariable
keyword@StaticVar keyword@StaticVariable
keyword@UnitSystem
keyword@UseQt keyword; keywordThe keyword ; is not documented yet
@Author keywordThe @Author keyword is used to give the name of the
person who wrote the mfront file.
All the following words are appended to the author’s name up to a final semicolon.
Note: The name of the person who formulated the material property,
behaviour or model shall be given in the description section (see the
@Description keyword).
@Author Éric Brunon;@Bounds keywordThe @Bounds keyword let the user define the domain of
validity of the law.
The @Bounds keyword is followed by a variable name, the
keyword in and an interval. The interval may contain the infinity,
represented by the ’*’ character.
What happens if a variable is found to be out of its bounds depends on the interface used. Most interfaces let the user choose one of three following policies:
None, which means that nothing is done.Warning, which means that a message is displayed, but
computations are not stopped.Strict, which means that computations are stopped with
an error message.@Bounds T in [293.15:873.15];@Constant keywordThe @Constant keyword let the user define a constant
value. This keyword is a synonym of @StaticVariable for a
real variable.
This keyword must be followed by the name of the constant and its value.
@Constant A 1.234e56;@DSL keywordThe @DSL keyword specify the domain specific language
(dsl) used.
The list of available dsl’s is returned by the
--list-dsl option of mfront:
$ mfront --list-dslAs the time of writing this notice, the following dsl’s are available:
DefaultDSL: this parser is the most generic one as it
does not make any restriction on the behaviour or the integration method
that may be used.DefaultCZMDSL: this parser is the most generic one as
it does not make any restriction on the behaviour or the integration
method that may be used.DefaultFiniteStrainDSL: this parser is the most generic
one as it does not make any restriction on the behaviour or the
integration method that may be used.Implicit: this parser provides a generic integrator
based on an implicit scheme. The elastic strain is automatically defined
as a state variableImplicitII: this parser provides a generic integrator
based on a theta method. Unlike Implicit, the elastic
strain is not automatically defined as a state variable.ImplicitFiniteStrain: this parser provides a generic
integrator based on a theta method.IsotropicMisesCreep: this parser is used for standard
creep behaviours of the form \(\dot{p}=f(s)\) where \(p\) is the equivalent creep strain and
\(s\) the equivalent mises stress.IsotropicPlasticMisesFlow: this parser is used for
standard plastics behaviours with yield surface of the form \(f(s,p)=0\) where \(p\) is the equivalent creep strain and
\(s\) the equivalent mises stress.IsotropicStrainHardeningMisesCreep: this parser is used
for standard strain hardening creep behaviours of the form \(\dot{p}=f(s,p)\) where \(p\) is the equivalent creep strain and
\(s\) the equivalent mises stress.MaterialLaw: this parser is used to define material
properties.Model: this parser is used to define simple material
models.MultipleIsotropicMisesFlows: this parser is used to
define behaviours combining several isotropic flows. Supported flow type
are ‘Creep’ (\(\dot{p}=f(s)\))
‘StrainHardeningCreep’ (\(\dot{p}=f(s,p)\)) and ‘Plasticity’ (\(f(p,s)=0\)) where \(p\) is the equivalent plastic strain and
\(s\) the equivalent mises stress.RungeKutta: this parser provides a generic integrator
based on one of the many Runge-Kutta algorithm.A DSL’s behaviour may be changed using options defined either in the
MFront file using a JSON-like syntax or as a command line
argument.
The options related to a specific DSL can be retrieved
using the --list-dsl-options command line argument, as
follows:
$ mfront --list-dsl-options=Model
- parameters_as_static_variables: boolean stating if the parameter shall be treated as static variables.
- build_identifier : string specifying a build identifier. This option shall only be specified on the command line.DSL options in the MFront fileOptions can be passed to a DSL as follows:
@DSL Default{
parameters_as_static_variables : true
};DSL options on the command line:MFront have various command line arguments to define
options passed to DSLs:
--dsl-option, which allows to define options passed to
domain specific languages.--behaviour-dsl-option, which allows to define options
passed to domain specific languages related to behaviours.--material-property-dsl-option, which allows to define
options passed to domain specific languages related to material
properties.--model-dsl-option, which allows to define options
passed to domain specific languages related to models.For example, the --dsl-option can be used as
follows:
$ mfront --obuild --interface=cyrano --dsl-option=build_identifier:\"Cyrano-3.2\" Elasticity.mfrontThis example illustrates that special care must be taken when defining an option expecting a string value.
The following options are available for all DSLs:
build_identifier (string), which must be associated to
a string value. However, the build_identifier is not meant
to be directly specified in the MFront source file. It
shall rather be defined on the command line.parameters_as_static_variables (boolean), which states
if parameters shall be treated as static variables.parameters_initialization_from_file (boolean), which
states if parameters can be modified from an external state file. This
feature is only implemented by a few interfaces and is enabled by
default.default_out_of_bounds_policy (string), which selects
the default out of bounds policy. Allowed values ar None
(the default), Warning or Strict.out_of_bounds_policy_runtime_modification (boolean),
which states if the out-of-bounds policy can be changed at runtime. By
default, this option is true.automatic_declaration_of_the_temperature_as_first_external_state_variable
(boolean), which states if the temperature shall be automatically
declared as an external state variable.overriding_parameters, which allows to specify
overriding parameters. This parameters must be a map associating
variables names and default values of the overriding parameters.@DSL Implicit;@Date keywordThe @Date keyword allows the user to precise when the
mfront file was written.
All the following words are appended to the date up to a final semicolon.
@Date 2008-11-17;@Description
keywordThe @Description describes the material property,
behaviour or model which is implemented in a mfront file.
This keyword is followed by a block containing all the relevant piece of information including:
@Description
{
Corrélation établie sur la nuance V-4Cr-4Ti.
Propriétés extraites du document :
Propriétés et comportement mécanique d alliages
de Vanadium avant, après et sous irradiation
Marion Le Flem, Jean-Luc Bechade, Annick Bougault,
Aurore Michaux, Lionel Gosmain, Jean-Louis Seran
DMN/SRMA/LA2M/NT/2008-2967/A
}@Function keywordThe @Function keyword introduces the C++ code computing
the value the material property.
Note: the default output is called res. This is changed
by the @Output keyword.
Although most interfaces use double for floating point operations,
this may not be always the case. A special typedef named
real is thus introduced by the interfaces. We advise the
user to use this typedef to define their local
variables.
@Function
{
const real C0 = 575.57;
const real C1 = -21094.;
Cp = C0+C1/T;
}@Import keywordThe @Import keyword allows the inclusion of one or
several (external) mfront files. This keyword is followed by a string or
an array of strings. Each string stands for a mfront file name that is
meant to be imported.
This instruction interrupts the treatment of the current file and starts the sequential treatment of each file to be imported.
Files to be imported are searched, in that order:
--search-path or the --include
(-I) mfront’ command line options.MFRONT_INCLUDE_PATH environment variable.@Import "SlidingSystemsCC.mfront";@Includes keywordThe @Includes introduces a block were the user may
define some preprocessor directives, typically #include directives
(hence the name).
@Includes{
#include<fstream>
}@Input keywordThe @Input keyword specifies one or several inputs of a
material law. This keyword is followed by the names of the inputs,
separated by commas.
The following characters are legal as the first character of an identifier, or any subsequent character:
_ a b c
d e f g
h i j k
l m n o
p q r s
t u v w
x y z A
B C D E
F G H I
J K L M
N O P Q
R S T U
V W X Y
Z
The following characters are legal as any character in an identifier except the first:
0 1 2 3
4 5 6 7
8 9
It is recommended to associate to an input a glossary or an entry
name through the methods setGlossaryName or
setEntryName respectively.
@Input T,p;
T.setGlossaryName("Temperature");
p.setGlossaryName("Porosity");@Interface keywordThe @Interface keyword let the user specify interfaces
to be used. The keyword is followed by a list of interface name,
separated by commas.
Using this keyword is considered a bad practice. The user shall use
the --interface command line argument to specify which
interface shall be used.
@Interface castem;@Law keywordThe @Law keyword allows the user to associate a name to
the material law being treated. This keyword is followed by a name.
This name must be a valid C++ identifier. The following characters are legal as the first character of an identifier, or any subsequent character:
_ a b c
d e f g
h i j k
l m n o
p q r s
t u v w
x y z A
B C D E
F G H I
J K L M
N O P Q
R S T U
V W X Y
Z
The following characters are legal as any character in an identifier except the first:
0 1 2 3
4 5 6 7
8 9
The names of the generated functions or classes depend on the law
name as specified with the @Law keyword but may also
include the material name, as specified by the @MaterialLaw
keyword.
@Law ThermalExansionCoefficient_SRMA;@Library keywordThe @Library keyword let the user specify part of the
generated library name. This keyword is followed by the name of
library.
This name must be a valid C++ identifier. The following characters are legal as the first character of an identifier, or any subsequent character:
_ a b c
d e f g
h i j k
l m n o
p q r s
t u v w
x y z A
B C D E
F G H I
J K L M
N O P Q
R S T U
V W X Y
Z
The following characters are legal as any character in an identifier except the first:
0 1 2 3
4 5 6 7
8 9
@Library AlcyoneLibrary;@Link keywordThe @Link keyword let the user specify additional linker
flags used to build their shared library/executables. This keyword must
be followed by a string or an array of strings.
Usage of the @Link keyword is deprecated a linker flags
are not portable. The user may prefer using the LDFLAGS
environment variable.
// explicit link with libm.so
// (not necessary in pratice)
@Link "-lm";@MFront keywordThe @MFront keyword leads to the generation of sources
from some mfront files as a subprocess of the current file treatment.
This keyword is followed by a pair of strings or array of strings. The
first member of the pair describes which a list of files to be treated.
The second member of the pair describes a list of interfaces.
@MFront {"YoungModulus.mfront",{"c","excel"}};@Material keywordThe @Material keyword let the user specify which
material is treated by the current file. This keyword is followed by the
name of the material.
This name must be a valid C++ identifier. The following
characters are legal as the first character of an identifier, or any
subsequent character:
_ a b c
d e f g
h i j k
l m n o
p q r s
t u v w
x y z A
B C D E
F G H I
J K L M
N O P Q
R S T U
V W X Y
Z
The following characters are legal as any character in an identifier except the first:
0 1 2 3
4 5 6 7
8 9
@Material UO2;@MaterialLaw
keywordThe @MaterialLaw keyword imports the definition of a
material law defined in a mfront file and compiles, as part of the
current library, a function using the mfront interface.
This function is available in every standard code blocks.
The @MaterialLaw keyword is followed by a string or an
array of string identifying mfront files.
Files to be imported are searched, in that order:
--search-path or the --include
(-I) mfront’ command line options.MFRONT_INCLUDE_PATH environment variable.The mfront interface has been created to avoid names
conflict.
For internal reasons, mfront reports the creation of an
auxiliary library which is of no use.
@MaterialLaw "UO2_YoungModulus.mfront";@Output keywordThe Output keyword changes the name of the output
variable. By default, this name is res. This keyword is
followed by the new name of the output variable.
@Output b ;@Parameter keywordThe @Parameter keyword declares a new parameter or a
list of new parameters. Optionally, the default value of the declared
parameters may also be given following various C++ standard assignment
syntaxes.
The default value of a parameter can also be declared after its
declaration using the setDefaultValue method.
@Parameter R0 = 500;
@Parameter Q1{1000000000},b1{0.000001};
@Parameter Q2(0),b2(0);
@Parameter fc;
fc.setDefaultValue(1.e-2);@Parser keywordThe @Paser keyword is a deprecated synonymous of
@DSL.
@PhysicalBounds
keywordThe @PhysicalBounds keyword let the use define the
physical domain of a variable.
The @PhysicalBounds keyword is followed by a variable
name, the keyword in and an interval. The interval may contain the
infinity, represented by the ’*’ character.
In implicit schemes, if physical bounds are set on an integration variable, this variable is bounded to satisfy them during the internal iterations.
If a variable is found to be out of its physical bounds, the computations are stopped. The tests are performed at different stages of the integration depending on the nature of the variable.
// a temperature (in Kelvin) can't be negative
@PhysicalBounds T in [0:*[;@StateVariable
keywordThe StateVariable keyword introduces one or several new
state variables. It is followed by a type name and the name(s) of the
variable(s) declared, separated by commas.
The state variables names must be valid C++
identifiers.
The following characters are legal as the first character of an identifier, or any subsequent character:
_ a b c
d e f g
h i j k
l m n o
p q r s
t u v w
x y z A
B C D E
F G H I
J K L M
N O P Q
R S T U
V W X Y
Z
The following characters are legal as any character in an identifier except the first:
0 1 2 3
4 5 6 7
8 9
One may declare an array of state variables by specifying the array size after the state variable name.
It is recommended to associate to a state variable a glossary or an
entry name through the methods setGlossaryName or
setEntryName respectively.
// scalar state variable
@StateVariables strain p;
// symmetric tensors state variable
@StateVariables StrainStensor evp,evp2;@StaticVar keywordThe @StaticVar keyword is a deprecated synonymous of
@StaticVariable.
@StaticVariable
keywordThe @StaticVariable keyword let the user define a
constant value. Unlike parameters (see the @Parameter
keyword), static variables’ values can’t be changed after
compilation.
This keyword must be followed by the type of the constant, its name, an equal sign and its value.
@StaticVariable real A = 1.234e56;@UnitSystem
keywordThe @UnitSystem keyword declares that the state
variables, external state variables and parameters are expressed in a
given unit system. In the current version of MFront, the
only supported unit system is the international system of units, denoted
SI.
One advantage of declaring a unit system is that physical bounds of
variables associated with a glossary entry can automatically be declared
by MFront.
For instance the declaration of the physical bounds for the
temperature and the porosity is automatic if the SI unit
system is used.
@UnitSystem SI;@UseQt keywordThe UseQt keyword (use quantities) specify if the
behaviour compilation should perform compile-time units checks. It is
followed by a boolean.
This feature is still experimental and is disabled in most cases.
@UseQt true;