MaterialDataManagerInitializer classMaterialDataManager classAPI
versioningC
bindings
mgis_behaviour module
python bindings
Julia bindingsThis version is compatible with behaviours generated by Version 3.4.1
of the TFEL/MFront project using the generic
interface. More precisely, one expects that the behaviour must conform
to the generic behaviour API Version 1 (See
Section 2.5).
Reflecting the changes made to the data structures used by the
generic behaviour in Version 3.4.1 of the
TFEL/MFront project, the API and
ABI of MGIS is changed in this version.
Most changes are hidden to the user in the
MaterialDataManager and BehaviourData classes.
However, at low level, two main changes are worth noting:
rdt member of the BehaviourDataView is
now a pointer.BehaviourDataView now has a
speed_of_sound member (See Section 2.1). This member can be
set to nullptr if the computation of the speed of sound is
not requested.BehaviourDataView now has an
error_message member.K data member of
the BehaviourDataView slightly changed. If
K[0] is greater than 50, the speed of sound is
computed. In this case, the type of behaviour integration to be
performed is given by K[0]-50. If K[0] is
lower than 50, it is interpreted as in previous versions.
See Section 2.4.1 for details.The speed of sound can now be computed by the behaviour. The
computation of this value can be requested using the
BehaviourIntegrationOptions class (See Section 2.4.2).
If requested during the behaviour integration, the speed of sound can be retrieved using:
speed_of_sound data member of the
BehaviourData class.speed_of_sound data member of the
MaterialDataManager class.MaterialDataManagerInitializer classThe speed_of_sound data member can point ot to an
externally allocated memory which will be used to store the speed of
sound. If empty, the material data manager will initialize the required
memory internally if required.
MaterialDataManager classThe following methods has been added to the
MaterialDataManager class:
setThreadSafe: set if the
MaterialDataManager must take care of thread-safety. This
mostly affects member functions allocating memory. Note that
thread-safety mostly refers to the standard way of handling threads, so
no thread-safety guarantees are provided if other threading
libraries/frameworks (such as OpenMP) are used.allocateArrayOfTangentOperatorBlocks: allocate the
memory associated with the tangent operator blocks.useExternalArrayOfTangentOperatorBlocks: use an
externally allocated memory to store the tangent operator blocks.releaseArrayOfTangentOperatorBlocks: release the memory
associated with the tangent operator blocks.allocateArrayOfSpeedOfSounds: allocate the memory
associated with thespeed of sounds.useExternalArrayOfSpeedOfSounds: use an externally
allocated memory to store thespeed of sounds.releaseArrayOfSpeedOfSounds: release the memory
associated with thespeed of sounds.getBehaviourIntegrationWorkSpace: return a workspace
associated with the behaviour. This method returns a object per thread
if thread-safety is ensured by the MaterialDataManager
class. This workspace is hold internally. Memory associated with this
workspace can be released by the
releaseBehaviourIntegrationWorkspaces method.releaseBehaviourIntegrationWorkspaces: clear behaviour
integration workspaces.BehaviourDataView
directlyIf K[0] is greater than 50, the speed of sound must be
computed.
Let Ke be equal to:
K[0] - 100 if K[0] is greater than 50K[0] otherwise.If Ke is negative, only the prediction operator is
computed and no behaviour integration is performed.
Ke has the following meaning:
Ke is lower than -2.5, the tangent operator must be
computed.Ke is in [-2.5:-1.5]: the secant operator must be
computed.Ke is in [-1.5:-0.5]: the elastic operator must be
computed.Ke is in [-0.5:0.5]: the behaviour integration is
performed, but no stiffness matrix is computed.Ke is in [0.5:1.5]: the behaviour integration is
performed and the elastic operator must be computed.Ke is in [1.5:2.5]: the behaviour integration is
performed and the secant operator must be computed.Ke is in [2.5:3.5]: the behaviour integration is
performed and the secant operator must be computed.Ke is greater than 3.5, the behaviour integration is
performed and the consistent tangent operator must be computed.BehaviourIntegrationOptions classNew overloads of the integrate functions (See Section
2.4.4) use a new data structure called
BehaviourIntegrationOptions to specify the kind of
integration to be used, rather than specifying an enumeration of the
IntegrationType type.
The BehaviourIntegrationOptions currently has two data
members:
integration_type which is an enumeration of the
IntegrationType type.compute_speed_of_sound (boolean). This boolean is
false by default.BehaviourIntegrationResult and
MultiThreadedBehaviourIntegrationResult classesThe new overloads of the integrate functions (See
Section 2.4.4) may return an object of the type
BehaviourIntegrationResult or and of the type
MultiThreadedBehaviourIntegrationResult.
The BehaviourIntegrationResult contains the result of
the integration on a single thread and contains the following data
members:
exit_status. This data member may have the following:
1: the integration is successful0: the integration is successful, but a least one Gauss
point reported that its result is not reliable. The meaning of
unreliable results depends on the behaviour used.-1: the behaviour integration has failed.time_step_increase_factor. This data member gives a
factor that can be used to increase or decrease the time step. This is
mostly useful in case of behaviour integration failure.n, which gives the number of the integration point that
failed or number of the last integration point that reported unreliable
results. This information can be useful what element leads to
difficulties regarding the behaviour integration.error_message. This data member contains an error
message returned by the behaviour in case of failure of the behaviour
integration, if any.The MultiThreadedBehaviourIntegrationResult contains the
result of the integration on multiple threads and contains the following
data members:
exit_status. This value is the minimum of the exit
statuses of all threads.results which gives the behaviour integration results
returned by the resolution on the various threads.integrate functionsThe following overloads of the integrate functions are
now available:
/*!
* \brief integrate the behaviour for a range of integration points.
* \return the result of the behaviour integration.
* \param[in,out] m: material data manager
* \param[in] c: description of the operation to be performed
* \param[in] dt: time step
* \param[in] b: first index of the range
* \param[in] e: last index of the range
*
* \note if required, the memory associated with the tangent operator blocks
* is automatically allocated.
*/
BehaviourIntegrationResult
integrate(MaterialDataManager&,
const BehaviourIntegrationOptions&,
const real,
const size_type,
const size_type);
/*!
* \brief integrate the behaviour over all integration points using a thread
* pool to parallelize the integration.
* \return the result of the behaviour integration.
* \param[in,out] p: thread pool
* \param[in,out] m: material data manager
* \param[in] c: description of the operation to be performed
* \param[in] dt: time step
*
* \note if required, the memory associated with the tangent operator blocks
* is automatically allocated.
*/
MultiThreadedBehaviourIntegrationResult
integrate(mgis::ThreadPool&,
MaterialDataManager&,
const BehaviourIntegrationOptions&,
const real);API
versioningVersion 3.4.1 of TFEL changed the API and
ABI of the generic interface. This change may lead to
conflicts with the API used by MGIS, notably
errors of segmentation.
The API introduced in Version 3.4.1 of TFEL
is said to match Version 1 of the generic behaviour
interface. By convention, previous versions are associated with Version
0.
The behaviours generated by the generic interface now
exports their API version. This piece of information can be
retrieved by the getAPIVersion of the
LibrariesManager class.
The load function uses this feature to check if the
API of the behaviour conforms with the one expected by
MGIS.
C bindingsmgis_bv_MaterialDataManagerInitializer data structureThe
mgis_bv_material_data_manager_initializer_bind_speed_of_sound
has been added. It allows to associate a memory area to the computation
of the speed of the sound in the
mgis_bv_MaterialDataManagerInitializer data structure.
mgis_bv_MaterialDataManager data structureNew functions mirroring the new methods introduced in Section 2.3 has been added:
mgis_bv_material_data_manager_set_thread_safemgis_bv_material_data_manager_allocate_array_of_tangent_operator_blocksmgis_bv_material_data_manager_use_external_array_of_tangent_operator_blocksmgis_bv_material_data_manager_release_array_of_tangent_operator_blocksmgis_bv_material_data_manager_allocate_array_of_speed_of_soundsmgis_bv_material_data_manager_use_external_array_of_speed_of_soundsmgis_bv_material_data_manager_release_array_of_speed_of_soundsmgis_behaviour moduleMaterialDataManagerInitializer data structureThe
material_data_manager_initializer_bind_speed_of_sound has
been added. It allows to associate a memory area to the computation of
the speed of the sound in the
mgis_bv_MaterialDataManagerInitializer data structure.
### New functions related to theMaterialDataManager` data
structure
New functions mirroring the new methods introduced in Section 2.3 has been added:
material_data_manager_set_thread_safematerial_data_manager_allocate_array_of_tangent_operator_blocksmaterial_data_manager_use_array_of_tangent_operator_blocks.
Note that this function names differs from its C
counterpart du to limitation to the length of Fortran
functions.material_data_manager_release_array_of_tangent_operator_blocksmaterial_data_manager_allocate_array_of_speed_of_soundsmaterial_data_manager_use_array_of_speed_of_sounds.
Note that this function names differs from its C
counterpart for consistency with the
material_data_manager_use_array_of_tangent_operator_blocks
function.material_data_manager_release_array_of_speed_of_soundspython bindingsMaterialDataManager classThe methods described in Section 2.3 has been wrapped to
python.
The following classes and functions are now available in
python:
BehaviourIntegrationOptions class, described in
Section 2.4.2.BehaviourIntegrationResult and
MultiThreadedBehaviourIntegrationResult classes, described
in Section 2.4.3.integrate functions describe in Section 2.4.4.mgis.fenics moduleset_internal_state_variables is now available to
update the values of internal state variables at the beginning of the
time step.linear_solver and preconditioner keywords
are now available when performing projection in the
̀get_flux,get_gradientandget_state_variable`
methods.Julia bindingsSupport for recent version of CxxWrap has been
added.
mgis.fenics: Missing update of external state variables
when seen as UFL expressionDeclaring external state variables as UFL expressions
were not properly updated between time steps.
The speed of sound can now be computed. See section 2.1.