This document gives an overview of the CMake infrastructure of the
MFrontGallery and MFrontMaterials
projects.
This infrastructure is fully contained in the
cmake/modules directory, the file
cmake/modules/mfm.cmake being the main entry point.
Section 1 describes the main cmake functions provided by
this infrastructure from the point of view of the maintainer and
developper of a material knowledge management project. It mostly
convers:
MFront files related to
material properties, behaviours and models.mfront_properties_library functionThe mfront_behaviours_library function adds shared
libraries to the project related to MFront’ behaviours. The
number of added shared libraries depends on the number of (material
properties) interfaces selected when the project is configured (see the
install page for
details).
The following example shows how to create libraries associated with a
material called VanadiumAlloy from a single
MFront source file named
VanadiumAlloy_YoungModulus_SRMA.mfront:
mfront_properties_library(VanadiumAlloy
VanadiumAlloy_YoungModulus_SRMA)Note that the .mfront suffix has been omitted in this
declaration.
Internally, the mfront_properties_library function
forward is arguments to the parse_mfront_library_sources
function and use its results to add the shared libraries properly. See
Section 1.3 for the available options.
The output generated by this function during the cmake
configuration process is similar to the following:
-- Treating interface cyrano
-- Adding library : VanadiumAlloyMaterialProperties-cyrano (/home/th202608/codes/MFrontGallery/master/src/build/materials/VanadiumAlloy/properties/cyrano/src/VanadiumAlloy_YoungModulus_SRMA-mfront.cxx)
-- Treating interface castem
-- Adding library : VanadiumAlloyMaterialProperties-castem (/home/th202608/codes/MFrontGallery/master/src/build/materials/VanadiumAlloy/properties/castem/src/VanadiumAlloy_YoungModulus_SRMA-mfront.cxx)
....which lists the shared libraries that will be compiled and the
sources that will be generated by MFront. One may notice
that each shared library is compiled in its own directory.
Internally, the mfront_properties_library relies on the
mfront-query to get the list generated sources and handle
dependencies to other MFront files and so on.
Regarding dependencies to other MFront files, the
current directory
${CMAKE_SOURCE_DIR}/materials/${mat}/properties is
automatically added to the MFront search paths, where:
${CMAKE_SOURCE_DIR} denotes the top level directory of
the project${mat} is the name of the material passed as first
argument to the mfront_properties_library.Other search paths can be added by using any of the keywords
SEARCH_PATH or SEARCH_PATHS, as described in
Section 1.3.
mfront_behaviours_library functionThe mfront_behaviours_library function adds shared
libraries to the project related to MFront’ behaviours. The
number of added shared libraries depends on the number of (behaviour)
interfaces selected when the project is configured (see the install page for details).
A typical usage of the mfront_behaviours_library is the
following:
mfront_behaviours_library(Concrete
ConcreteBurger_EDF_CIWAP_2021
ConcreteBurger_EDF_CIWAP_2021_v2)which declares a set of shared libraries associated with the
Concrete material. Those shared libraries are generated
using two MFront files named respectively
ConcreteBurger_EDF_CIWAP_2021.mfront and
ConcreteBurger_EDF_CIWAP_2021_v2.mfront (See Section 1.3.1
for details).
Note that the .mfront suffix has been omitted in this
declaration.
-- ConcreteBurger_EDF_CIWAP_2021 has been discarded for interface calculix (behaviours with external state variable other than the temperature are not supported)
-- ConcreteBurger_EDF_CIWAP_2021_v2 has been discarded for interface calculix (behaviours with external state variable other than the temperature are not supported)
-- No sources selected for library CONCRETECALCULIXBEHAVIOURS for interface calculix
-- ConcreteBurger_EDF_CIWAP_2021 has been discarded for interface ansys (behaviours with external state variable other than the temperature are not supported)
-- ConcreteBurger_EDF_CIWAP_2021_v2 has been discarded for interface ansys (behaviours with external state variable other than the temperature are not supported)
-- No sources selected for library CONCRETEANSYSBEHAVIOURS for interface ansys
-- Adding library : CONCRETEABAQUSBEHAVIOURS (/home/th202608/codes/MFrontGallery/master/src/build/materials/Concrete/behaviours/abaqus/src/abaqusConcreteBurger_EDF_CIWAP_2021.cxx;/home/th202608/codes/MFrontGallery/master/src/build/materials/Concrete/behaviours/abaqus/src/ConcreteBurger_EDF_CIWAP_2021.cxx;/home/th202608/codes/MFrontGallery/master/src/build/materials/Concrete/behaviours/abaqus/src/abaqusConcreteBurger_EDF_CIWAP_2021_v2.cxx;/home/th202608/codes/MFrontGallery/master/src/build/materials/Concrete/behaviours/abaqus/src/ConcreteBurger_EDF_CIWAP_2021_v2.cxx)
-- Adding library : ConcreteBehaviours-cyrano (/home/th202608/codes/MFrontGallery/master/src/build/materials/Concrete/behaviours/cyrano/src/cyranoConcreteBurger_EDF_CIWAP_2021.cxx;/home/th202608/codes/MFrontGallery/master/src/build/materials/Concrete/behaviours/cyrano/src/ConcreteBurger_EDF_CIWAP_2021.cxx;/home/th202608/codes/MFrontGallery/master/src/build/materials/Concrete/behaviours/cyrano/src/cyranoConcreteBurger_EDF_CIWAP_2021_v2.cxx;/home/th202608/codes/MFrontGallery/master/src/build/materials/Concrete/behaviours/cyrano/src/ConcreteBurger_EDF_CIWAP_2021_v2.cxx)
-- ConcreteBurger_EDF_CIWAP_2021 has been discarded for interface epx (small strain behaviours are not supported)
-- ConcreteBurger_EDF_CIWAP_2021_v2 has been discarded for interface epx (small strain behaviours are not supported)
-- No sources selected for library ConcreteBehaviours-epx for interface epx
-- ConcreteBurger_EDF_CIWAP_2021 has been discarded for interface dianafea (behaviours with external state variable other than the temperature are not supported)
-- ConcreteBurger_EDF_CIWAP_2021_v2 has been discarded for interface dianafea (behaviours with external state variable other than the temperature are not supported)
-- No sources selected for library ConcreteDianaFEABehaviours for interface dianafea
-- Adding library : ConcreteBehaviours-aster (/home/th202608/codes/MFrontGallery/master/src/build/materials/Concrete/behaviours/aster/src/asterConcreteBurger_EDF_CIWAP_2021.cxx;/home/th202608/codes/MFrontGallery/master/src/build/materials/Concrete/behaviours/aster/src/ConcreteBurger_EDF_CIWAP_2021.cxx;/home/th202608/codes/MFrontGallery/master/src/build/materials/Concrete/behaviours/aster/src/asterConcreteBurger_EDF_CIWAP_2021_v2.cxx;/home/th202608/codes/MFrontGallery/master/src/build/materials/Concrete/behaviours/aster/src/ConcreteBurger_EDF_CIWAP_2021_v2.cxx)
-- Adding library : ConcreteBehaviours (/home/th202608/codes/MFrontGallery/master/src/build/materials/Concrete/behaviours/castem/src/umatConcreteBurger_EDF_CIWAP_2021.cxx;/home/th202608/codes/MFrontGallery/master/src/build/materials/Concrete/behaviours/castem/src/ConcreteBurger_EDF_CIWAP_2021.cxx;/home/th202608/codes/MFrontGallery/master/src/build/materials/Concrete/behaviours/castem/src/umatConcreteBurger_EDF_CIWAP_2021_v2.cxx;/home/th202608/codes/MFrontGallery/master/src/build/materials/Concrete/behaviours/castem/src/ConcreteBurger_EDF_CIWAP_2021_v2.cxx)
....which lists the shared libraries that will be compiled and the
sources that will be generated by MFront. One may notice
that each shared library is compiled in its own directory.
One may also notice that the behaviours considered are not compatible with some of the selected behaviour interfaces and are thus discarded:
dianafea,
calculix and ansys interfaces because it
declares an external state variable which is not the temperature and
this is not supported by those interfaces.epx
(Europlexus) interface because this solver only supports finite strain
behaviours.In this example, no shared libraries for the Concrete
material will be generated for the interfaces dianafea,
calculix, ansys and epx
interfaces since no MFront are compatible with them.
Internally, the mfront_behaviours_library function
forward is arguments to the parse_mfront_library_sources
function and use its results to add the shared libraries properly. See
Section 1.3 for the available options.
parse_mfront_library_sources functionThe parse_mfront_library_sources function set the
following variables on output:
mfront_sources: list of sources to be processed (see
below). In practice, this is the list of arguments which are not
specifically introduced by a keyword (see below).mfront_search_paths: list of search paths, i.e. list of
directories where MFront shall search for auxiliary files
(imported files, external material properties, external models.).mfront_include_directories: list of include
directories. The include directories are added the compiler include
directories.mfront_link_libraries: list of link libraries. Those
link libraries are meant to be linked to the generated shared
libraries.The parse_mfront_library_sources function allows the
following keywords:
SOURCES (the default): this option introduces new
sources for the generated libraries. All subsequent arguments are
treated as sources, up to the next option.LINK_LIBRARY: this option allows to define one link
library by the next argument passed to the
parse_mfront_library_sources function.LINK_LIBRARIES: all subsequent arguments are treated as
link libraries, up to the next option.SEARCH_PATH: the next argument passed to the
parse_mfront_library_sources function is added to the list
of search paths.SEARCH_PATHS: all subsequent arguments are treated as
MFront search path, up to the next option.INCLUDE_DIRECTORY: the next argument passed to the
parse_mfront_library_sources function is added to the list
of include directories.INCLUDE_DIRECTORIES: the next argument passed to the
parse_mfront_library_sources function is added to the list
of include directories.For each shared library to be added, each source returned in the
mfront_sources variable by the
parse_mfront_library_sources is treated as follows:
@source@ in the
following, starts with the mdnx: prefix, it is considered
as a path in a madnex file.@source@.mdnx (or
@source@.madnex) exists in the current source directory,
then it is treated as an madnex source file. All the
material knowledge of the considered kind (material property, behaviour,
model) contained in this file is added to the library.@source@.mfront exists in the current source
directory or in the current source directory, this file is treated as an
MFront source file.@source@.mfront.in (where
@source@ is the name of the considered source) exists in
the current source directory, then it is automatically configured using
̀CMake’ configure_file command and the
resulting file is treated as an MFront source file.@source@ is added in the list of sources for the treated
shared library. This file can be given by its full path, and is searched
in the current source directory or the the current binary
directory.MFront source files are treated by the
generate_mfront_doc function which will generate a web page
for this source file using the mfront-doc utility if the
enable-website option has been choosen at the
CMake configuration stage (see the install page for details).
MTestadd_mtest
function (defined in behaviours.cmake)The add_mtest function allows to declare a test on
behaviours based on the MTest solver. The
add_mtest function is used by wrappers such as
genericmtest (for tests associated with the
generic interface) or castemmest (for tests
associated with the Cast3M interface) and not used directly
(see below).
This function takes two mandatory arguments:
This function may take optional arguments introduced by the following keywords:
TEST_NAME (default): this keyword introduces the base
name of one or several tests. The full test name is created by adding:
Release, Debug, etc.)
for build systems that support multiple configurations in the same
buildMTEST_FILE: this keyword introduces one or several base
names to declare MTest scripts (i.e. the name of a file
without extension). For each base name, the add_mtest
function proceeds as follows:
.mtest.in exists, the configure_file function
is called to generate a script file in the current directory. This file
will be called by MTest..mtest is expected to exist in the current source
directory.BEHAVIOUR: this keyword introduces the name of the
behaviour. This name used to replace all occurences of
@behaviour@ in the MTest scripts.LIBRARY: this keyword introduces the path to the
library containing the behaviour to be tested. This name used to replace
all occurences of @library@ in the MTest
scripts. By default, this location is deduced from the name of the
second argument of the function.INTERFACE: this keyword introduces the name of the
interface used to generate the library. This name used to replace all
occurences of @interface@ in the MTest
scripts.REFERENCE_FILE: this keyword introduces the name of the
file containing the reference results. This name used to replace all
occurences of @reference_file@ in the MTest
scripts.ACCELERATION_ALGORITHM: this keyword introduces the
name of an acceleration algorithm (see the MTest
documentation for a list of acceleration algorithms).STIFFNESS_MATRIX_TYPE: this keyword introduces the type
of stiffness matrix type to be used for the test (see the
MTest documentation for a list of available stiffness
matrix types).MATERIAL_PROPERTIES_LIBRARIES: this keyword introduces
a list of libraries whose locations are requested. This keyword is only
meaningful if an mtest.in file is to be used.Several test names and several MTest scripts can be
declared through the TEST_NAME and MTEST_FILE
keywords respectively. The number of test names must match the number of
scripts.
A script is generally run several times with different rounding modes
(see the MTest documentation for details).
add_mtest functionsThe add_mtest function does not check if the interface
used by the test has been selected and is not able to deduce the name of
the library associated with an interface from the name of a material
(Bentonite for instance) or the name of the class of
behaviours considered (Plasticity for instance).
MFrontGallery thus provides several wrappers, such as:
castemmtest, astermtest,
europlexusmtest abaqusmtest,
abaqusexplicitmtest, ansysmtest,
calculixmtest dianafeamtest,
cyranomtest and genericmtest.
For instance, one can call the castemmtest function even
if the Cast3M interface for behaviours has not been
selected: in this case, the associated test is just not declared.
The following code declares a test based on the
asteriwan.mtest script if the aster interface
has been selected:
mfront_behaviours_library(Plasticity
${MFRONT_BEHAVIOURS_PLASTICITY_SOURCES})
astermtest(Plasticity asteriwan)tfel-checkThe tfel_check function declares a test based on
[tfel-check]](https://thelfer.github.io/tfel/web/tfel-check.html).
This function takes one mandatory argument named file,
which must contain the base name for the input file passed to
tfel-check. A file named ${file}.check or
${file}.check.in must exist in the current source
directory. If the ${file}.check.in exists, the
configure_file function is called to generate a file named
${file}.check in the current directory.
The configuration file mfm-tfel-check.config is
automatically used. This configuration file is generated at the top
level directory of the build tree by the
create_tfel_check_config_file. This configuration file
declares a component for each interface selected. For an interface
${interface} associated with a material property, the
component mfm::material_property_interface::${interface} is
declared. A similar declaration is performed for interfaces associated
with behaviours and models.
If a python interpreter is detected, the substitution variable
python is automatically defined and contains the path to
the python interpreter.
If the castem tests are enabled (see the
enable-castem-tests option), the substitution variable
castem is automatically defined and contains the path to
the Cast3M executable.
Additional configuration files may be added by derived projects to
the mfm-tfel-check-configuration-files list.
The following substitution variables are automatically defined:
current_src_dir: points to the current source
directorycurrent_binary_dir: points to the current directory in
the build treepandoc_html
functionThe pandoc_html function can be used to generate an
html page from a markdow file using pandoc. This function takes
the name of a markdown file a argument. All the other options are passed
verbatim to pandoc.
The following options are automatically passed to
pandoc:
--mathjax: This option forces the use of the
MathJax library to display embedded (La)TeX
formulae.--highlight-style=tango: This option selects the
tango style to display code snippets.--email-obfuscation=javascript: This option modifies
how emails are displayed.--default-image-extension=svg: This option chooses
SVG as the default image extension.If a file named mfm-template.html is found in the
directory docs/web (from the root of the sources of the
project), this file is used as a template for generating the web pages
(see pandoc’s --template option).
If a biblatex file named bibliography.bib is found in
the directory docs/web (from the root of the sources of the
project), the generation of a bibliography is automatically enabled (see
pandoc’s --bibliography option).
If a file named iso690-numeric-en.csl is found in the
directory docs/web (from the root of the sources of the
project), this file is used to define the reference style used (see
pandoc’s --csl option).