Table of Contents
- It's been a while since I needed to look into why the Tm2 elements were not working properly when I tried them in my tests. As it turns out it was simply a small error in “Tm2FluxElement.inl” and “Tm2ConvectionElement.inl”, the “external forces” where only written on the dofs related to the geometrical nodes. So I think the heat flux was never working with Tm2 elements (and no test cases were using them anyway).
Implement a volumic heat source:
- In the literature, the heat source in additive manufacturing simulations are usually implemented as volumic heat sources. I thus implemented a new “volumic heat flux” boundary condition: “Tm(2)VolFlux2D(3D)Element”. The implementation is similar to the surfacic heat flux “TmFlux2D(3D)Element” but with the quad (hexa) shape functions.
- LoadingInteraction.cpp now also has a “isVol(Type)” check to create the correct type of element.
- Interaction.cpp now contains functions “create4NodedQuadLinear2DElement”, “create8NodedQuadLinear2DElement”, “create8NodedHexaLinear3DElement”, and “create20NodedHexaLinear3DElement” that respectively create normal linear quadrangle, Tm2 linear quadrangle, normal linear hexa and Tm2 linear hexa on the Gobject given.
Example of bad results previously obtained in the battery with the Tm2FluxElements(right) compared to TmFluxElements(left):
After the fix the battery test gives good results with Tm2:
I then wanted to compare the use of TmFlux and Tm2Flux elements in an AM simulation, for now I only compared in my battery test which has a very coarse mesh and we can see that the use of tm2Flux elements tend to reduce the amplitude of the peaks in temperature:
However, the computation time has risen from 51s to 122s for this simple case.
Here are some comparison results obtained with a surfacic heat flux(blue) compared to a volumic heat flux(red) on a simple battery test. One can see that the difference is very small here, probably because the volume is here fixed as 1 element only so the load is actually very similar to the surfacic flux. Here 1 layer = 1 element = ~5% of the base plate thickness:
If I increase the size of the layers added the difference becomes bigger so I can imagine that in cases where the heat flux must be applied on larger volumes (big laser penetration) the use of volumic heat flux will be required, but if the laser penetration is low than it gives the same results as with a corresponding surface heat flux. Here 1 layer = 1 element = ~50% of the base plate thickness:
Addition of battery tests
I added battery tests in monosThermoMeca and monosThermoMeca2 to test the volumic flux both for tm and tm2: volFlux2dAxi/volFlux2dEpe/volFlux3d.
I added battery tests for AM using a mix of Tm/Tm2, Flux/VolFlux, both in 3D pure thermal (Chiumenti), 3D thermomechanical (Chiumenti2) and 2D (Hashemi).
Added [a] / deleted [d] / modified [m] / renamed [m] files
[a] mtElements/boundaries/Tm2VolFlux2DElement.cpp [a] mtElements/boundaries/Tm2VolFlux2DElement.h [a] mtElements/boundaries/Tm2VolFlux3DElement.cpp [a] mtElements/boundaries/Tm2VolFlux3DElement.h [a] mtElements/boundaries/TmVolFlux2DElement.cpp [a] mtElements/boundaries/TmVolFlux2DElement.h [a] mtElements/boundaries/TmVolFlux3DElement.cpp [a] mtElements/boundaries/TmVolFlux3DElement.h [m] mtElements/boundaries/Tm2ConvectionElement.inl [m] mtElements/boundaries/Tm2Flux2DElement.cpp [m] mtElements/boundaries/Tm2Flux3DElement.cpp [m] mtElements/boundaries/Tm2FluxElement.h [m] mtElements/boundaries/Tm2FluxElement.inl [m] mtElements/boundaries/TmFlux2DElement.cpp [m] mtElements/boundaries/TmFlux3DElement.cpp [m] mtElements/boundaries/TmFluxElement.h [m] mtElements/boundaries/TmFluxElement.inl [m] mtElements/LoadingInteraction.cpp [m] mtElements/LoadingInteraction.h [m] mtFEMBase/Interaction.cpp [m] mtFEMBase/Interaction.h [m] mtShapeFunctions/SfIntegrationPointTemplate.cpp
[a] apps/monosThermoMeca2/volFlux2dAxi.py [a] apps/monosThermoMeca2/volFlux2dEpe.py [a] apps/monosThermoMeca2/volFlux3d.py [a] apps/monosThermoMeca/volFlux2dAxi.py [a] apps/monosThermoMeca/volFlux2dEpe.py [a] apps/monosThermoMeca/volFlux3d.py [a] additiveM/battery/withAM/Chiumenti2Lobatto.py [a] additiveM/battery/withAM/Chiumenti2Tm2.py [a] additiveM/battery/withAM/Chiumenti2VolFlux.py [a] additiveM/battery/withAM/Chiumenti2VolFluxTm2.py [a] additiveM/battery/withAM/ChiumentiTm2.py [a] additiveM/battery/withAM/ChiumentiVolFlux.py [a] additiveM/battery/withAM/ChiumentiVolFluxLobatto.py [a] additiveM/battery/withAM/ChiumentiVolFluxTm2.py [a] additiveM/battery/withAM/HashemiTm2.py [a] additiveM/battery/withAM/HashemiVolFlux.py [a] additiveM/battery/withAM/HashemiVolFluxTm2.py [r] additiveM/battery/withAM/Chiumenti.py (previously "ChiumentiMwe") [r] additiveM/battery/withAM/Chiumenti2.py (previously "TmChiumentiMwe") [r] additiveM/battery/withAM/ChiumentiLobatto.py (previously "ChiumentiMweLobatto") [r] additiveM/battery/withAM/Hashemi.py (previously "HashemiMwe")
— Cédric Laruelle 2019/08/21