External
Compile an external plugin
Simcoon offers the possibility to develop your own User Material plugin. Note that you can devlop such external plugin using the Simcoon API, but this is not of course mandatory. You can utilize other libraries or API. Two examples are provided in the folder ‘External’.
There is two formats to define your User Material plugin. The first one is based on Armadillo vectors and matrices, and correspond to the classical parameters
void umat_(double *stress, double *statev, double *ddsdde, double &sse, double &spd, double &scd, double &rpl, double *ddsddt, double *drplde, double &drpldt, const double *stran, const double *dstran, const double *time, const double &dtime, const double &temperature, const double &Dtemperature, const double &predef, const double &dpred, char *cmname, const int &ndi, const int &nshr, const int &ntens, const int &nstatev, const double *props, const int &nprops, const double &coords, const double *drot, double &pnewdt, const double &celent, const double *dfgrd0, const double *dfgrd1, const int &noel, const int &npt, const double &layer, const int &kspt, const int &kstep, const int &kinc)
The format of the external User Material plugin is similar to that of the Finite Element Analysis software Abaqus. It accepts the following arguments:
void umat_(double *stress, double *statev, double *ddsdde, double &sse, double &spd, double &scd, double &rpl, double *ddsddt, double *drplde, double &drpldt, const double *stran, const double *dstran, const double *time, const double &dtime, const double &temperature, const double &Dtemperature, const double &predef, const double &dpred, char *cmname, const int &ndi, const int &nshr, const int &ntens, const int &nstatev, const double *props, const int &nprops, const double &coords, const double *drot, double &pnewdt, const double &celent, const double *dfgrd0, const double *dfgrd1, const int &noel, const int &npt, const double &layer, const int &kspt, const int &kstep, const int &kinc)
parameter |
definition |
---|---|
stress |
array containing the components of the stress tensor (dimension ntens) |
statev |
array containing the evolution variables (dimension nstatev) |
ddsdde |
array containing the mechanical tangent operator (dimension ntens*ntens) |
sse |
unused |
spd |
unused |
scd |
unused |
rpl |
unused |
ddsddt |
array containing the thermal tangent operator |
drple |
unused |
drpldt |
unused |
stran |
array containing total strain component (dimension ntens) at the beginning of increment |
dstran |
array containing the component of total strain increment (dimension ntens) |
time |
two compoenent array : first component is the value of step time at the beginning of the current increment and second component is the value of total time at the beginning of the current increment |
dtime |
time increment |
temperature |
temperature avlue at the beginning of increment |
Dtemperature |
temperature increment |
predef |
unused |
dpred |
unused |
cmname |
user-defined material name |
ndi |
number of direct stress components |
nshr |
number of shear stress components |
ntens |
number stress and strain components |
nstatev |
number of evolution variables |
props |
array containing material properties |
nprops |
number of material properties |
coords |
coordinates of the considered point |
drot |
rotation increment matrix (dimension 3*3) |
pnewdt |
ratio of suggested new time increment |
celent |
characteristic element length |
dfgrd0 |
array containing the deformation gradient at the beginning of increment (dimension 3*3) |
dfgrd1 |
array containing the deformation gradient at the end of increment (dimension 3*3) |
noel |
element number |
npt |
integration point number |
layer |
layer number - not used |
kspt |
section point number within the current layer - not used |
kstep |
step number |
kinc |
increment number |
To compile them you can utilize the following commands (I have used clang as a compiler)
clang++ -c -fPIC -std=c++14 umat_plugin_aba.cpp
clang++ -std=c++14 -shared -lsimcoon -larmadillo -o libumat_plugin_aba.dylib umat_plugin_aba.o
The first example is a replica of the