====== Commit 2018-09-20 ======
===== Description =====
To try to model an additive manufacturing process I first tried to use Metafor as is. The activation of the elements over time can be done by using the StageManager and by activating/deactivating interactions at predetermined times. Like this, I managed to reproduce with accuracy the results of a test case from the literature. This method is however very tedious to use and requires to create an absurd number of interactions. It is also not CPU efficient. I had to implement the Verbose option for StageManager because of the very high number of text at every activation/deactivation of elements, which in my case took more time than the actual test cases.
One can realize that the previous method of activating/deactivating elements is not efficient enough and a new method has to be implemented. I thus implemented a new class called AdditiveManager that will manage the activation of elements in a more efficient way.
===== Verbose for Stage Manager =====
I added a verbose option for "StageManager" which allows not to print all of the info related to the activation/deactivation of stages.(I had to pass it as an argument to the setStage function, hence the number of modified files.
To use it:
stageManager.setVerbose(False)
===== AdditiveManager/PointAdditiveManager=====
I created a new class to manage the activation of elements. For now it only activates elements of a FieldApplicator (to set with "setTarget(...)") whenever a point (to set with "setActivator(...)") passes through it.
To use:
ptAM=PointAdditiveManager()
ptAM.setActivator(pointset(...))
ptAM.setTarget(...)
metafor.setAdditiveManager(ptAM)
For now it only works in 3D.
===== Tests: =====
==== AM tests using StageManager: ====
I added additive manufacturing tests.
The first tests are done using stages to Activate/Deactivate interactions. It is very tedious and long, both for the writing of the test case and CPU wise.
"withStageManager/tests/Chiumenti1.py" is the reproduction of a test case from the literature (Numerical simulation and experimental calibration of Additive Manufacturing by blown powder technology. Part I: thermal analysis, Rapid Prototyping Journal 23 (2017) 448–463.).
{{ :commit:2018:testCaseChiumenti1.png?600 |}} {{ :commit:2018:testCaseChiumenti2.png?600 |}}
{{ :commit:2018:Chiumenti1.png?600 |}}
The results were presented in a poster "https://orbi.uliege.be/handle/2268/227324".
"withStageManager/battery/Chiumenti1.py" is the battery version of this test (very coarse mesh, only 3 layers and 3 lines to reduce the CPU under 5 mins).
"withStageManager/battery/activationWithStages.py" is a test with the activation of 1 simple line of elements (and no boundary conditions), it is used to compare with "withAdditiveManager/battery/activationWithAdditiveManager.py".
==== AM tests using AdditiveManager: ====
"withAdditiveManager/battery/activationWithAdditiveManager.py" is a test with the activation of 1 simple line of elements (and no boundary conditions) using AdditiveManager, it is used to compare with "withStageManager/battery/activationWithStages.py". They correctly give the same results as shown here under (temperature at a point over time). Even for such a small test case, there is a **30% decrease of the computation time(30->20s)**.
{{ :commit:2018:activationWithAdditiveManager.png?600 |}}
{{ :commit:2018:activationWithStageManager.png?600 |}}
"withAdditiveManager/battery/testAdditiveManagerSin.py" is a test using AdditiveManager where the element are activated according to a point following a sine function.
===== Added [a] / deleted [d] / modified [m] / renamed [r] files ======
====Code:====
[a] mtFEM/AdditiveManager.h
[a] mtFEM/AdditiveManager.cpp
[a] mtElements/PointAdditiveManager.h
[a] mtElements/PointAdditiveManager.cpp
[m] mtALE/AleMethod.cpp
[m] mtALE/AleMethod.h
[m] mtALE/CurveReZoner.cpp
[m] mtALE/CurveReZoner.h
[m] mtALE/ReZoningStep.cpp
[m] mtALE/ReZoningStep.h
[m] mtContact/_src/mtContact.i
[m] mtElements/_src/mtElements.i
[m] mtElements/CMakeLists.txt
[m] mtFEM/_src/mtFEM.i
[m] mtFEM/AleMethodBase.h
[m] mtFEM/algos/IterationManager.h
[m] mtFEM/algos/TimeIntegration.cpp
[m] mtFEM/CMakeLists.txt
[m] mtFEM/Metafor.cpp
[m] mtFEM/Metafor.h
[m] mtFEM/StageManager.cpp
[m] mtFEM/StageManager.h
[m] mtFEMBase/Activable.cpp
[m] mtFEMBase/Activable.h
[m] mtFEMBase/DofFlagCmdSet.cpp
[m] mtFEMBase/DofFlagCmdSet.h
[m] mtFEMBase/Interaction.cpp
[m] mtFEMBase/Interaction.h
[m] mtFEMBase/InteractionSet.cpp
[m] mtFEMBase/InteractionSet.h
[m] mtFEMBase/LoadingSetBase.cpp
[m] mtFEMBase/LoadingSetBase.h
[m] mtFEMBase/StageDepValue.h
[m] mtFEMBase/StageDepValue.inl
[m] mtMain/battery.py
[m] mtViz/VTKManager.h
[m] mtWear/_src/mtWear.i
[m] mtXFEM/_src/mtXFEM.i
====Tests:====
[a] oo_meta/additiveM/
[a] additiveM/withAdditiveManager/
[a] additiveM/withAdditiveManager/battery/activationWithAdditiveManager.py
[a] additiveM/withAdditiveManager/battery/testAdditiveManagerSin.py
[a] additiveM/withAdditiveManager/tests/activationWithAdditiveManager.py
[a] additiveM/withAdditiveManager/tests/testAdditiveManagerDiag.py
[a] additiveM/withAdditiveManager/tests/testAdditiveManagerSin.py
[a] additiveM/withStageManager/
[a] additiveM/withStageManager/battery/activationWithStages.py
[a] additiveM/withStageManager/battery/Chiumenti1.py
[a] additiveM/withStageManager/tests/activationWithStages.py
[a] additiveM/withStageManager/tests/Chiumenti1.py
[a] additiveM/withStageManager/tests/Chiumenti1Coarse.py
[a] additiveM/withStageManager/tests/Chiumenti1MWE.py
[a] additiveM/withStageManager/tools/activationWithStages.py
[a] additiveM/withStageManager/tools/chiumenti.py
[a] additiveM/withStageManager/tools/Matlab
[a] additiveM/withStageManager/tools/Matlab/Data
--- //[[Cedric.Laruelle@ULiege.be|Cédric Laruelle]] 2018/09/18 //