Friction simulations based on "GMatElastoPlasticQPot" and "GooseFEM"
Additionally, consistency against earlier runs can be checked as follows.
cd build
cmake .. -DBUILD_TESTS=1 -DBUILD_EXAMPLES=1
make
./examples/PNAS-2019 ../examples/PNAS-2019_N=3\^2_id=000.h5
cd build
cmake .. -DBUILD_TESTS=1 -DBUILD_EXAMPLES=1
make
./examples/UniformSingleLayer2d_System
cp ../examples/UniformSingleLayer2d_System.py .
python UniformSingleLayer2d_System.py ../examples/UniformSingleLayer2d_System.txt
cd build
cmake .. -DBUILD_TESTS=1 -DBUILD_EXAMPLES=1
make
./examples/UniformSingleLayer2d_HybridSystem
cp ../examples/UniformSingleLayer2d_HybridSystem.py .
python UniformSingleLayer2d_HybridSystem.py ../examples/UniformSingleLayer2d_HybridSystem.txt
cd build
cmake .. -DBUILD_TESTS=1 -DBUILD_EXAMPLES=1
make
./examples/LoadCycle
cp ../examples/LoadCycle.py .
python LoadCycle.py ../examples/LoadCycle.txt
cd docs
doxygen
For example using conda
cd docs
( cat Doxyfile ; echo "INPUT += ${CONDA_PREFIX}/include/GooseFEM" ; echo "INPUT += ${CONDA_PREFIX}/include/GMatElastoPlasticQPot" ) | doxygen -
conda install -c conda-forge frictionpotfem
# Download FrictionQPotFEM
git checkout https://github.com/tdegeus/FrictionPotFEM.git
cd FrictionQPotFEM
# Install headers and CMake support
cmake -Bbuild .
cd build
make install
conda install -c conda-forge python-frictionpotfem
Note that xsimd and hardware optimisations are not enabled. To enable them you have to compile on your system, as is discussed next.
You need xtensor, xtensor-python and optionally xsimd as prerequisites. Additionally, Python needs to know how to find them. The easiest is to use conda to get the prerequisites:
conda install -c conda-forge xtensor-python conda install -c conda-forge xsimdIf you then compile and install with the same environment you should be good to go. Otherwise, a bit of manual labour might be needed to treat the dependencies.
# Download FrictionQPotFEM
git checkout https://github.com/tdegeus/FrictionPotFEM.git
cd FrictionQPotFEM
# Only if you want to use hardware optization:
export CMAKE_ARGS="-DUSE_SIMD=1"
# Compile and install the Python module
# (-vv can be omitted as is controls just the verbosity)
python -m pip install . -vv
- Deprecating
boundcheck_right
. - Flipping default:
nmargin = 0
(having a non-zeronmargin
gives a false sense of security: nothing is thrown in reality). - Deprecating
timeSteps_residualcheck(n)
. Replace byminimise(max_iter=n, max_iter_is_error=False)
.minimise
now returns0
if convergence is successfully found. - Adding
nmargin
,time_activity
, andmax_iter_is_error
tominimise
. Deprecatingminimise_boundcheck
. - Adding
nmargin
toflowSteps
. DeprecatingflowSteps_boundcheck
. - Adding
nmargin
option totimeStepsUntilEvent
. - Adding
nmargin
option totimeSteps
. DeprecatingtimeSteps_boundcheck
. - Converting
plastic_Epsdot
to pointer - In case one really needs: adding
refresh
; makingupdate_u
,update_v
public - Adding
inc
andsetInc
(internally usingm_inc
instead ofm_t
) - Adding free-function
epsy_initelastic_toquad
,moduli_toquad
,getuniform
to simplify transition to new API. - Removing copies of
m_conn
,m_dofs
,m_iip
. - Removing unused defaults.
- Forcing constructors to take all parameters, removing obsolete
all_set
. Note that the 'old' 'constructor' functions likesetMassMatrix
can still be called after the constructor if customisation is needed. - Adding
alpha
to set background damping density homogeneous. - Adding homogeneous
rho
(non-zero if system is homogeneous). setEta
now disables the strain-gradient terms at the interface if argument is zero.- Using GMatTensor to get version strings.
- Loading xtensor-python version (#153).
- [Python] Converting
setU
,setV
,setA
,setFext
to properties. - [Python] Using properties. Updating to python-goosefem >=1.3.0
- [dependencies] gmatelastoplasticqpot >=0.17.0
- [dependencies] goosefem >=1.3.0
- [dependencies] catch2 >=3.0.0
- [Python] Using NumPy-arrays everywhere.
- Merging implementation in headers for maintainability.
flowSteps
: assure that return is non-negative ifnmargin > 0
.minimise
: assure that return is zero for normal operation.system.plastic_CurrentIndex()
->system.plastic.i
in Python (orsystem.plastic().i()
in C++).system.boundcheck_right(n)
->np.all(system.plastic.i < system.plastic.epsy.shape[-1] - n)
.
- Adding function to truncate minimization at a certain A (#130)
- [BREAKING CHANGE] eventDriven: adding iterative search (replaces "fallback" that is immediately deprecated) (#129)
- Fixing GH pages (#129)
- initEventDriven: Removing assertion that makes no sense (c depends on the realization)
- Bugfix initEventDriven: adding missing references (#127)
- eventDriven: add "yield_element" option
- eventDriven: override with additional update to UniformMultiLayerLeverDrive2d (#126)
- eventDriven: choosing lowest scale factor (rather than shortest distance in eq. strain space) (#125)
- Adding assertions (#124)
- eventDriven: fixing incorrect check (#123)
- UniformMultiLayerIndividualDrive2d: adding convenience function (deprecated integrated functions)
- [docs] Fixing typo
- Removing deprecated eventDriven code. The API is kept in deprecated mode, but "dry_run == true" it removed immediately.
- Identifying error in deprecated eventDriven protocol
- UniformSingleLayer2d: adding "typical_plastic_h", "typical_plastic_dV", "affineSimpleShear", "affineSimpleShearCentered"
- Adding "timeSteps_boundcheck" and "flowSteps_boundcheck"
- Add "timeSteps" and "flowSteps" (#119)
- Adding event driven protocol to all systems (#118)
- Improving version_dependencies(). Various minor clean-ups (#115)
- Adding "reset_epsy"
- Adding "minimise_boundcheck".
- Bugfix "minimise" return the number of iterations (not the iteration index)
- [Python] Removing unnecessary imports
- Formatting updates (#113)
- [clang-format] Adding formatting suggestion
- [pre-commit] Applying pre-commit (#112)
- Version list: sorting alphabetically
- [Python] Minor bugfix: wrong import
- Fixing missing version string.
- [Python] Switching to scikit-build
- Renaming "test" -> "tests"
- Updating GooseFEM::Iterate -> minor stopping criterion change (#109)
- Fixing 'bug': computing forces only when possible (#108)
- HybridSystem: dealing with empty elastic or plastic definitions (#106)
- Improving assertion messages (#106)
- Minor bugfixes in UniformSingleLayer2d::LocalTrigger (#100)
- [CI] Using assertions
- [tests] Minor bugfixes (#106)
- [setup.py] Improve verbosity
- [CMake] Add CMake options USE_ASSERT, USE_DEBUG, USE_SIMD (#102)
- [CMake] Enable Python (deprecation) warnings
Multi-layer: overhaul, adding drive with a lever (#95, #96)
-
Simplifying tests
-
Adding "UniformMultiLayerLeverDrive2d"
-
Changing protected functions "UniformMultiLayerIndividualDrive2d":
- Splitting "computeForceDrive" -> "computeLayerUbarActive"/"computeForceFromTargetUbar"
- Adding "updated_target_ubar"
-
Changing API "UniformMultiLayerIndividualDrive2d":
- Renaming "layerSetTargetUbarAndDistribute" -> "layerSetUbar"
- Renaming "setDriveStiffness" -> "layerSetDriveStiffness"
- Adding "layerSetTargetActive" to activate driving springs
- Adding "layerTargetActive"
- Adding "layerTagetUbar_addAffineSimpleShear" that only affects the driving frame
- "addAffineSimpleShear" (only affects body)
- "layerSetTargetUbar" (activation of springs now in "layerSetTargetActive")
-
Internal renaming
-
Code-style update
- Avoiding setuptools_scm dependency if SETUPTOOLS_SCM_PRETEND_VERSION is defined
- Multi-layer: add shear without distributing it
- setup.py: use CMAKE_ARGS environment variable; removing pyxtensor dependency
- timeStepsUntilEvent: allow using a maximum number of iterations
- Bugfix & API extension: initializing target ubar and returning its value
- API change: renaming "fdrivespring" -> "layerFdrive"
- API change: renaming "layerSetUbar" -> "layerSetTargetUbar" and "layerSetDistributeUbar" -> "layerSetTargetUbarAndDistribute"
- API change: renaming "nlayers" -> "nlayer"
- API change: returning isplastic for all layers
- Minor efficiency update: avoiding temporary (#89)
addSimpleShearToFixedStress
: making assertion on elastic step optional inaddElasticSimpleShearToFixedStress
(#88)- Using GMatElastoPlasticQPot::version() (#87)
- Removing myargsort workaround (#86)
- Bugfix: bug manifesting itself only in the Python API (#85)
- Adding function to set time
- Adding code to get the number of layers
- Doxystyle update
- Function to run time-steps until the next plastic event (#82)
- Wider application of xt::pytensor (#81)
- Removing deprecated GooseFEM functions from tests (#80)
- Using xtensor-python (#79)
- Multi-layers: skipping of computations where possible
- Multi-layers: return ubar
- Multi-layers: Allow asymmetric drive spring
- Multi-layers: Get driving force per layer
- Multi-layers: apply simple shear drive
- Multi-layers: distribute drive displacement
- Integrating Python API in CMake (#73)
- Minor update multi-layer example. Temporarily switch off trigger test on GCC (#72)
- Adding multi-layered simulations (#69)
- Updating doxygen-awesome
- Minor CMake updates
- Branching common methods from UniformSingleLayer2d to Generic2d (UniformSingleLayer2d now only has one class based on the HybridSystem).
- Making returned references explicit.
- Adding deprecation warnings Energy() to Python API.
- Class members: pass by reference (instead of copy); works also in Python API
- Python API: forcing copy of certain objects (#62)
- Using CMake for Doxygen (#61, #62)
- Adding dependencies to docs
- Adding convenience method "Energy"
- Removing namespace aliases
- Getting mass and damping matrix
- Updating versioning. Python API: auto-overloading (#57)
- Using setuptools_scm to manage version (#56)
- Documenting version information. Adding eigen to version string.
- Renaming "versionInfo" -> "version_dependencies"
- Adding fdamp and setV/setA
- [CI] Switching to GCC 8 for the moment (#51)
- Examples: modifying to API change, removing namespace abbreviation.
- Removing GoosFEM alias
- Adding addAffineSimpleShearCentered (#41)
- [CI] Removing travis and appveyor
- Adding possibility to restart (#40)
- Clang/Windows switching-off xtensor::optimize (#39)
- Getting plastic strain (#38)
- Reformatting CI: using clang on Windows
- Compute sign of displacement perturbation
- Add affine shear step
- Adding "currentYield*" offset overload
- LocalTrigger: adding option to evaluate only small slice; making energy relative to the volume of a plastic element (not to that of the system); adding simple-shear search
- Splitting tests in several sources, enable Windows CI
- Trigger: most output
- Triggering: optimisations & minimal search (#34)
- Trigger: Optimizations
- Adding minimal search
- Changing call of parent constructor
- Deprecated local energy barriers (#33)
- Implementation triggering of smallest energy barrier (#31)
- API Change: Removing "init" functions, using constructors directly. Adding stiffness matrix.
- Adding triggering protocol
- Exploring energy barrier upon trigger (#30)
- Adding plastic_ElementYieldBarrierForSimpleShear (#28)
- Exploring energy landscape to local simple shear perturbation (#24)
- Temporarily excluding Windows from GitHub CI
- Adding GitHub CI
- Adding Python API
- Amplifying trigger