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.
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:
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.
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.).
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”.
“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).
“withAdditiveManager/battery/testAdditiveManagerSin.py” is a test using AdditiveManager where the element are activated according to a point following a sine function.
[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
[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
— Cédric Laruelle 2018/09/18