GooseEPM v0.11.0
|
System loaded using a spring. More...
#include <GooseEPM/System.h>
Public Member Functions | |
SystemDepinningSpringLoading (const array_type::tensor< double, Dim > &propagator, const std::vector< array_type::tensor< ptrdiff_t, 1 > > &distances, const array_type::tensor< double, Dim > &sigmay_std, uint64_t seed, double kframe, double failure_rate=1, double alpha=1.5, bool random_stress=true) | |
Important | |
System loaded using a spring.
If a block \( f \) fails:
Which block fails is determined based on the 'temperature', as follows:
"Thermal": The blocks with the smallest time to failure fails. For unstable blocks the time to failure is \( \tau \), for stable blocks it is \( \tau \exp( x^\alpha / T ) \).
(Only available for thermal systems.)
The dimensionality of the system is the template parameter Dim
. In the Python API the system is pre-compiled in all available dimensions. For example:
// C++ GooseEPM::SystemStressControl<2> system(...); # Python system = GooseEPM.SystemStressControl2(...)
By default the stress is chosen randomly (from normal distribution with mean 0 and standard deviation 0.1) according to compatibility, and the system is relaxed to being stable. For customisation you can (in Python code):
system = System(..., random_stress=False) system.sigma = ... ...
Since initialisation can be a expensive, you can also use the above to re-use the same initial stress distribution in multiple simulations.
Elastic loading: SystemBase::shiftImposedShear
Internal details: Equilibrium is preserved during elastic loading. As such \( k_{frame} (\Delta \varepsilon_{frame} - \Delta \varepsilon_i) = \mu \Delta \varepsilon_i \) for all \( i \). The frame is therefore advanced by \( \Delta \varepsilon_{frame} = (k_{frame} + \mu) / k_{frame} \Delta \varepsilon_i \), where \( \Delta \varepsilon_i = (\sigma_f^y - \sigma_f + \epsilon) / \mu \), with \( f \) the index of the softest block.
Energy minimisation: SystemBase::relaxAthermal
Internal details: The propagator \( G \) is modified to be stress-preserving: \( \sum\limits_{i = 1}^N G_i = 0 \) and \( G(\Delta \vec{r} = \vec{0}) = -1 \).
Consequently, if a block fails, the average strain changes by \( \Delta \bar{\varepsilon} = 1 / N \sum\limits_{i = 1}^N (\Delta \varepsilon_i^p + \Delta \sigma_i / \mu) \). Since \( \sum\limits_{i = 1}^N \Delta \sigma_i = 0 \) by construction and \( \Delta \varepsilon_i^p \) is non-zero only for the failing block, the change in average strain is \( \Delta \bar{\varepsilon} = \Delta \varepsilon_f^p / N \). Consequently, the stress due to driving reduces by \( \Delta \bar{\sigma} = k_{frame} \Delta \bar{\varepsilon} = k_{frame} \Delta \varepsilon_f^p / N \).
|
inline |
Important
Difference compared to the regular elasto-plastic model:
sigmay_std
.propagator | The propagator [shape] . |
distances | The distance of each row, column, ... of the propagator [shape(0), ...] . |
sigmay_std | Standard deviation of the yield stress for every block [shape] . |
seed | Seed of the random number generator. |
failure_rate | Failure rate \( f_0 \). |
alpha | Exponent characterising the shape of the potential. |
random_stress | Initialise the stress: random, zero mean, no unstable blocks. |
kframe | Stiffness of the driving 'spring'. |