LOADING&OUTPUTS¶
MECHANICAL LOADING¶
Example 1 : creep loading¶
Here is an example of a loading.xml file where the loading and the stress-strain fields output are defined. This loading reproduces an experimental creep procedure : at first the load is applied proportionnaly (tensile test) and then the macroscopic stress is kept constant (creep test):
<?xml version="1.0" encoding="UTF-8"?>
<Loading_Output>
<!-- ADDITIONNAL OUPUT QUANTITIES -->
<!-- specify the quantities of interest -->
<Output>
<!-- Stress output (stress= "1") -->
<vtk_StressStrain Strain = "0" Stress = "1"/>
<vtk_IntVarList numM="1">
1
</vtk_IntVarList>
<Zone numM="1">
<VarIntList> 1 </VarIntList>
</Zone>
</Output>
<!-- SUCCESSIVE LOADINGS AND OUTPUT TIMES -->
<!-- Partial loading 1 -->
<Loading Tag="1">
<!-- User defined time discretization, 10 increments -->
<Time_Discretization Discretization="User" Nincr="10" />
<!-- Increment times (user definition) -->
<Time_List>
32832 83808 143424 211680 289440 380160 483840 604800 738720 898560
</Time_List>
<Output_zone Number ="10"/>
<!-- No field output required -->
<!-- Strain driven on xx component -->
<xx Driving="Strain" Evolution="Linear" Value="-5e-4"/>
<yy Driving="Stress" Evolution="Constant" />
<zz Driving="Stress" Evolution="Constant" />
<xy Driving="Stress" Evolution="Constant" />
<xz Driving="Stress" Evolution="Constant" />
<yz Driving="Stress" Evolution="Constant" />
<!-- For finite strains simulations -->
<yx Driving="Strain" Evolution="Constant" />
<zx Driving="Strain" Evolution="Constant" />
<zy Driving="Strain" Evolution="Constant" />
</Loading>
<!-- Partial loading 2 -->
<Loading Tag="2">
<!-- Linear time discretization -->
<Time_Discretization Discretization="Linear" Nincr="22" Tfinal="25920000" />
<Output_zone Number ="5"/>
<Output_cell Number="10"/> <!-- usefull for very high number of increments -->
<!-- Field output for the last increment (22) -->
<Output_vtkList>
22
</Output_vtkList>
<!-- Full stress driving -->
<xx Driving="Stress" Evolution="Constant" />
<yy Driving="Stress" Evolution="Constant" />
<zz Driving="Stress" Evolution="Constant" />
<xy Driving="Stress" Evolution="Constant" />
<xz Driving="Stress" Evolution="Constant" />
<yz Driving="Stress" Evolution="Constant" />
<!-- For finite strains simulations -->
<yx Driving="Strain" Evolution="Constant" />
<zx Driving="Strain" Evolution="Constant" />
<zy Driving="Strain" Evolution="Constant" />
</Loading>
</Loading_Output>
Note
This loading.xml file example is designed for a finite strain simulation and must be consistent with Standard parameters.
In case of a Small Perturbation assumption, discard the yx
, zx
and zy
components.
Example 2 : loading with a stress direction¶
This second example imposes a xx
strain loading while maintaining a constant stress direction given by DirStress.
Here it corresponds to a constant triaxiality ratio of 2.5.
<!-- OUPUT QUANTITIES -->
<Output>
<vtk_StressStrain Strain = "0" Stress = "0"/>
</Output>
<!-- SUCCESSIVE LOADINGS AND OUTPUT TIMES -->
<Loading Tag="1">
<Time_Discretization Discretization="Linear" Nincr="40" Tfinal="40"/>
<xx Driving="Stress" DirStress="1." />
<yy Driving="Stress" DirStress="1.3" />
<zz Driving="Strain" Evolution="Linear" Value="0.004" DirStress="1.6" />
<xy Driving="Stress" DirStress="0" />
<xz Driving="Stress" DirStress="0" />
<yz Driving="Stress" DirStress="0" />
<!-- below : Finite Strain specific -->
<yx Driving="Stress" DirStress="0" />
<zx Driving="Stress" DirStress="0" />
<zy Driving="Stress" DirStress="0" />
<DirStress Type="cauchy" /> <!-- Cauchy or PK1 -->
</Loading>
Begin and End¶
The file must begin and end with
<?xml version="1.0" encoding="UTF-8"?>
<Loading_Output>
.
.
</Loading_Output>
Default Output¶
The section <output> … </Output> should be optionnal. Up to now, the minimum requested is
<Output>
<vtk_StressStrain Strain = "0" Stress = "0"/>
</Output>
In that context, the default output reduces to three ouput files :
- .std file : stress and strains average and standard deviations within the whole unit-cell.
- .mstd file : per material stress and strains average and standard deviations.
- .log file : informations on the simulation (number of iterations, criterion values, computation times etc…).
These quantities are output for each loading increment (= time step).
Additional Outputs¶
The section <output> … </Output> allows to specify two types of additionnal output : fields (vtk files) and per zone statistical quantities (zstd). Because these files can be very heavy (and their writing time consuming), the times to write these outputs files must be limited and chosen carefully. This is done in the section <Loading> … </Loading>.
.vtk files - Strain and/or stress fields (VTK files) can be chosen through the
<vtk_StressStrain>
node. If no field are required, simply complete “0” and “0” for Strain and Stress. Similarly, the<vtk_IntVarList>
node, gives the possibility to write in VTK files different fields of internal variables for each material numM. One<vtk_IntVarList>
node per material node can be added, if necessary. The example below asks for .vtk output fields for the internal variables “1” and “5” of material “1”<vtk_IntVarList numM="1"> 1 5 </vtk_IntVarList>
.zstd files - If the Zone node is present, per zone average and standard deviations of the stress, strain and requested internal variables, are printed for the material associated to the numM value. If nothing else is precised, only the means and standard deviations of the stress and strain tensors will be printed. However, a
<VarIntList>
node can be added to choose the list of internal variables to be output. One<Zone>
node per material can be added, if necessary. The example below asks for per zone output .zstd files for the stress, strain and internal variable “3” of material “2”, and only for the stress and strain of material “1”<Zone numM="1"> </Zone> <Zone numM="2"> <VarIntList> 3 </VarIntList> </Zone>
The .std, .mstd and .zstd files are written so that the value of each variable is given in column. Comments at the beginning of these files describe the variable associated to each column. More details about how to plot these results are given in the Tools section.
Loading¶
The loading is defined by successive partial loadings, tagged 1, 2, 3, etc…
Time_Discretization within each partial loading can be chosen:
- linear (loading 1 in the example): the user gives the final time and the number of increments,
- user defined (loading 2): the user gives a time list, excluding the initial time.
In both cases, the initial time is the final time of the previous loading or equal to 0 for the first partial loading (i.e. Tag=”1”).
Output_vtkList is the list of increment numbers, within the partial loading, for which stress, strain and/or internal variable fields (.vtk files) will be output (see the choice in the node <output>
).
Output_zone gives the number of loading steps in the partial loading for which per zone quantities (.zstd files) will be output. For each loading, the output increments are equally distributed among the increasing increments, including the final increment.
Output_cell gives the number of loading steps in the partial loading for which per unit-cell and per material quantities (.std and .mstd files) will be output. This is especially useful if the number of increment is very large.
xx, yy, zz, xy, xz, yz (and yx, zx, yz in finite strain) allows to define the loading, for each partial loading, and each component :
Driving=”Stress” or “Strain” if average stress or strain component is applied
Evolution=”Linear” Value=”val”: the component evolves linearly as a function of the time from the initial value until “val”. Voigt notation is assumed for small strains : the shear components of the strain tensor are multiplied by 2.
Evolution=”Constant”: the component is constant and equal to its initial value
DirStress=”val”(optional): if present must be present on all the components to impose a constant stress direction. At finite strains, an additional node must be given to specify wether the Cauchy or PK1 stress tensor is considered
<DirStress Type="cauchy" /> <!-- Cauchy or PK1 -->
For “Constant” and “Linear” evolutions, the initial value is the final value of the previous partial loading, or equal to 0 for the first partial loading i.e. Tag=”1”.
Warning
With the small perturbation hypothesis (see Standard parameters), the “Strain” and “Stress” components are related to the component of :
- the average linearized strain tensor,
- the average Cauchy stress tensor.
Since the Voigt notation is used (in the inputs, the outputs and within the code itself), the value given for xy, xz or yz must be the double of the xy, xz or yz strain components.
Without the small perturbation hypothesis (see Standard parameters), corresponding to the finite strain framework, the “Strain” and “Stress” components are related to the components of :
- the average first Piola-Kirchoff stress tensor,
- the average displacement gradient (which is not strictly speaking a measure of the strain).
EXTERNAL LOADING¶
If the user wishes to use a material behaviour law depending on the temperature and/or external parameters, he has to implement it in the UMAT compatible procedure (see BEHAVIORS). Then, it is possible to impose the evolution of the temperature and external parameters (assumed constants on the whole unit-cell) during the loading. The temperature corresponds to the scalar UMAT variable TEMP. The other external parameters are gathered within the vector UMAT variable PREDEF. These external parameters must be indexed continuously starting from 1.
Here is an example of a loading.xml file where the temperature and two other external parameters are imposed:
<?xml version="1.0" encoding="UTF-8"?>
<Loading_Output>
<!-- ADDITIONNAL OUPUT QUANTITIES (optionnal) -->
<!-- <Output> </Output> -->
<!-- Initialization of the temperature and the external parameters -->
<InitLoadExt>
<T Value="20" />
<Param Index ="1" Value="0" />
<Param Index ="2" Value="10" />
</InitLoadExt>
<!-- SUCCESSIVE LOADINGS AND OUTPUT TIMES -->
<!-- Partial loading 1 -->
<Loading Tag="1">
<Time_Discretization Discretization="Linear" Nincr="40" Tfinal="40"/>
<xx Driving="Strain" Evolution="Linear" Value="-5e-4"/>
<yy Driving="Stress" Evolution="Linear" Value="0." />
<zz Driving="Stress" Evolution="Linear" Value="0." />
<xy Driving="Stress" Evolution="Linear" Value="0" />
<xz Driving="Stress" Evolution="Linear" Value="0" />
<yz Driving="Stress" Evolution="Linear" Value="0" />
<!-- Temperature is constant, equal to the initial value -->
<T Evolution="Constant" />
<!-- External parameters 1 and 2 have a linear evolution -->
<Param Index="1" Evolution="Linear" Value ="50"/>
<Param Index="2" Evolution="Linear" Value ="0"/>
</Loading>
</Loading_Output>
In order to be imposed during the loading the temperature and each external parameter must :
be initialized inside the section <InitLoadExt> … </InitLoadExt>
<InitLoadExt> <T Value="20" /> <Param Index ="1" Value="0" /> <Param Index ="2" Value="10" /> </InitLoadExt>
be described within each section <Loading Tag=”i”> as described in the example. The Evolution can be linear or constant as a function of time. In both cases, the initial value is the final value of the previous partial loading or equal to the value defined in the InitLoadExt tag for the first partial loading (i.e. Tag=”1”).
<!-- Temperature is constant, equal to the initial value --> <T Evolution="Constant" /> <!-- External parameters 1 and 2 have a linear evolution --> <Param Index="1" Evolution="Linear" Value ="50"/> <Param Index="2" Evolution="Linear" Value ="0"/>
BEAM & PLATE LOADINGS¶
AMITEX_FFTP can be use to apply flexion and torsion loadings which is especially usefull for the the homogenization of beams and plates.
WARNING : when considering the homogenization of beams or plates, to account for traction-free boundary conditions :
- the unit-cell must consist of the beam/plate Volume Element embedded in an enlarged unit-cell with a buffer zone,
- the behavior of the buffer zone surrounding the VE must have null elastic propoerties,
- the beam/plate volume element must be centered within the enlarged unit-cell,
- for plane plates, the enlarged unit-cell consists of the plate VE with two aditionnal layers on each side.
The additionnal loadings nodes (in addition to the average applied stress or strain components in <xx
, <yy
, etc… ) are the following:
<Flexion_yy_x Evolution="Linear" Value="xx" /><!-- WARNING : ONLY implemented for "Linear" Evolution -->
<Flexion_zz_x Evolution="Linear" Value="xx" />
<Flexion_xx_y Evolution="Linear" Value="xx" />
<Flexion_zz_y Evolution="Linear" Value="xx" />
<Flexion_xx_z Evolution="Linear" Value="xx" />
<Flexion_yy_z Evolution="Linear" Value="xx" />
<Torsion_zx_y Evolution="Linear" Value="xx" /> <!-- WARINING : Voigt notation is used -->
<Torsion_yx_z Evolution="Linear" Value="xx" />
<Torsion_xy_z Evolution="Linear" Value="xx" />
<Torsion_zy_x Evolution="Linear" Value="xx" />
<Torsion_xz_y Evolution="Linear" Value="xx" />
<Torsion_yz_x Evolution="Linear" Value="xx" />
Each loading is associated to prescribed strain gradient components \(\varepsilon_{ij,k}\) as described below. Other components are assigned to 0.
Loading of plates (example below with normal vector \(e_k\) ):¶
For a flexion loading <Flexion_ii_k .. />
(with i and k different) :
- \(\varepsilon_{ii,k}\) (bending) is assigned the given Value xx
- \(\varepsilon_{jj,k}\) (‘transverse’ bending) is assigned to 0
- \(\varepsilon_{kk,k}\) (‘through tickness strain gradient’) is assigned to \(-\lambda_0 \varepsilon_{ii,k}/(\lambda_0+2\mu_0)\)
Note that \(\varepsilon_{kk,k}\), applied to the enlarged unit-cell, will differ from its corresponding value on the plate volume element.
For a torsion loading <Torsion_ij_k .. />
(with i,j and k all different) :
- \(\varepsilon_{ij,k}\) is assigned the given Value xx/2 because the Voigt notation is assumed
Loading of beams (example below with beam axis \(e_i\) ) :¶
When considering beam simulations, the flexion loadings can be advantageously modified
(better convergence) with the optional parameter Beam_transverse_ratio
= \(K\) (for example with the value of 1.) as follows:
<Flexion_ii_k Evolution="Linear" Value="1." Beam_transverse_ratio="1."/>
If not given, this parameter is set to 0 (see the case above for the flexion of plates). The choice for \(K\) essentially modifies the initialization of the transverse strain gradients within the beam.
For a flexion loading <Flexion_ii_k .. />
(with i and k different):
- \(\varepsilon_{ii,k}\) (bending) is assigned the given Value xx
- \(\varepsilon_{jj,k}\) = \(K \varepsilon_{kk,k}\) or \(\varepsilon_{jj,k}=\varepsilon_{kk,k}\) if \(K=1\) : the two transverse strain gradients are assumed equal
- \(\varepsilon_{kk,k}\) is assigned to \(-\lambda_0 \varepsilon_{ii,k} / (\lambda_0(1+K)+2\mu_0)\) or \(\varepsilon_{jj,k}=\varepsilon_{kk,k}=-\lambda_0 \varepsilon_{ii,k} / 2(\lambda_0+\mu_0)\) if \(K=1\)
For torsion loading, the user must prescribe two shear components with opposite values as follows
<Torsion_ji_k Evolution="Linear" Value="xx" />
<Torsion_ki_j Evolution="Linear" Value="-xx" />
In this example :
- \(\varepsilon_{ji,k}\) is assigned the given Value xx/2 because the Voigt notation is assumed
- \(\varepsilon_{ki,j}\) is assigned the given Value xx/2 because the Voigt notation is assumed
Note
For beam cross-sections not aligned with the grid (for example a disk cross-section), using composite voxels with the Voigt homogenization rule is an efficient way to improve the quality of the simulation
DIFFUSION¶
Since version 4.0.0, one variable stationnary diffusion problems, such as thermal diffusion, can be solved with amitex_fftp.
As the concepts used to describe the inputs of the code in mechanics are similar for diffusion, we only explain below some typical xml files.
Important
As the development of AMITEX_FFTP is focusing on ‘mechanics’, our feedback on ‘diffusion’ is less important. Contact us if you observe problems.
Material properties¶
<?xml version="1.0" encoding="UTF-8"?>
<Materials>
<!-- REFERENCE MATERIAL -->
<Reference_MaterialD K0="14"/>
<!-- MATERIAL 1 -->
<Material numM="1" LibK="/home/gelebart/amitex_fftp/libAmitex/src/materiauxK/libUmatAmitexK.so" LawK="Fourier_iso">
<CoeffK Index="1" Type="Constant_Zone" File="materiaux/coefficients/coeffK.txt" Format="ASCII"/>
</Material>
</Materials>
After defining the reference material property <Reference_MaterialD K0="14"/>
, the material behavior is given by the fields LibK
and LawK
.
Here the simple isotropic Fourier behaviour is used and its coefficients are constant per zone, given in an ASCII file.
Algorithm parameters¶
<?xml version="1.0" encoding="UTF-8"?>
<Algorithm_Parameters>
<!-- GENERAL CASE -->
<Algorithm Type="Basic_Scheme"> <!-- "Default" (Basic_Scheme) or "user" -->
<Convergence_Criterion Value="Default"/> <!-- "Default" (1e-4) or positive value <1e-3 -->
<Convergence_Acceleration Value="True"/> <!-- "True" ou "False" -->
</Algorithm>
<!-- DIFFUSION -->
<Diffusion>
<Filter Type="Default"/> <!-- "Default" (hexa) or "no_filter" or "hexa" or "octa" -->
<Stationary Value="true"/> <!-- "Tue" ("False" not implemented yet) -->
</Diffusion>
</Algorithm_Parameters>
No comment, reading is enough.
Loading and output¶
<?xml version="1.0" encoding="UTF-8"?>
<Loading_Output>
<!-- OUPUT QUANTITIES -->
<Output>
<vtk_FluxDGradD FluxD = "1" GradD="1"/>
<Zone numM="1">
</Zone>
</Output>
<!-- SUCCESSIVE LOADINGS AND OUTPUT TIMES -->
<Loading Tag="1">
<Time_Discretization Discretization="User" Nincr="1" />
<Time_List>1</Time_List>
<Output_vtkList>1</Output_vtkList>
<Output_zone Number="1"/>
<x0 Driving="GradD" Evolution="Linear" Value="0.1"/>
<y0 Driving="FluxD" Evolution="Linear" Value="2" />
<z0 Driving="FluxD" Evolution="Linear" Value="3" />
</Loading>
</Loading_Output>
Here, the loading is made in one increment with a prescribed average temperature gradient in x direction and a prescribed average flux in y and z directions.
The default output are the same as in Mechanics, replacing the stress and strain tensors by the flux and temperature gradient vectors.
In addition, here, the specific outputs are : the flux and temperature gradient fields (vtk files), per zone statistical quantities for temperature gradient and flux.