====== 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 //