Multi-beam strategies¶
Introduction¶
Numerical simulation gives us full control of the energy source power, shape, and position. Multiple energy sources of various types are possible in the simulation. The beam paths are independent, with any number of beams, any distance between beams.
Preheating or Postheating¶
For preheating or postheating, an additional laser beam travels directly before or after the main beam.
In this sample simulation, we hatch a square layer, 2x2 mm, on a substrate with SS316L powder. The powder layer height is 60 μm.
First, let us hatch the layer with left-to-right laser passes with a single source. The full input file for this simulation is
{
"outputDir": "./drop/",
"ScanStrategy": {
"Type": "SquareLayer",
"SquareLayer": {
"startPosX": 1e-3,
"startPosY": 1e-3,
"dimX" : 2e-3,
"dimY" : 2e-3,
"hatchX" : 0,
"hatchY" : 84e-6,
"snakeScan": false,
"delayBetweenTracks": 0.00015
},
"Beam": {
"type" : "Laser",
"Shape" : "Gauss",
"Power" : 200.0,
"Width" : 90e-6,
"Speed" : 2.0
}
},
"PowderBedGenerator": {
"Type": "PowDEM",
"KnifeZposition": 0.00506,
"GroundSurface": "",
"PSDsizes": [ [ 0, 18e-06 ],
[ 10, 2.2e-05 ],
[ 50, 3e-05 ],
[ 90, 4e-05 ],
[ 100, 4.5e-5 ] ]
},
"NumericalParams": {
"dr": 4e-06,
"dt": 50e-09
},
"config": {
"MemoryAllocation": "managed",
"AllowToRunoutXYbox": true,
"DumpDataRate": 10000,
"IterationSubstepsRate": 1000,
"DumpARR": false,
"DumpVTK": false,
"calcBubbles": false,
"AutoTermination": true
},
"Substrate": {
"preheating": 300
},
"Powder": {
"initSpheresVDBfile": "init_spheres.vdb",
"components" : null
},
"licenseFile": "/licences/license.lic",
"sizes": {
"substrate": 0.005,
"FullXapprox": 0.004,
"FullYapprox": 0.004,
"FullZapprox": 0.0055
},
"Visual": {
"RenderOnlyMeltpool" : false,
"3DrenderedDomainSize": [5e-3, 1.0e-3, 0.5e-3]
},
"Material": "SS316L"
}
After the simulation, first, we clean up the resulting geometry file. We remove the powder that was not melted in the simulation with the removePowder script, and we remove the isolated droplets that were ejected in the melting process with the removeIsolated script.
Using the cleaned up file, we plot the height and depth maps with the surfaceAnalyzer script:
The surface is uneven and there is a bump on the left side of the layer.
In the second experiment, we alternate left-to-right and right-to-left hatch passes. The change in the input file is:
...
"ScanStrategy": {
"Type": "SquareLayer",
"SquareLayer": {
...
"snakeScan": false,
...
In the result, the surface is still uneven, with bumps in the middle:
After this, let us add additional beam source. Here is the sample input file for two-beams strategy with left-to right scanning. Note that the ScanStrategy field is a list with two entries:
{
"outputDir": "./drop/",
"ScanStrategy":
[
{
"StartDelayTime": 0,
"Type": "SquareLayer",
"SquareLayer": {
"startPosX": 1e-3,
"startPosY": 1e-3,
"dimX" : 2e-3,
"dimY" : 2e-3,
"hatchX" : 0,
"hatchY" : 84e-6,
"snakeScan": false,
"delayBetweenTracks": 0.00045
},
"Beam": {
"type" : "Laser",
"Shape" : "Gauss",
"Power" : 200.0,
"Width" : 90e-6,
"Speed" : 2.0
}
},
{
"StartDelayTime": 225e-6,
"Type": "SquareLayer",
"SquareLayer": {
"startPosX": 1e-3,
"startPosY": 1e-3,
"dimX" : 2e-3,
"dimY" : 2e-3,
"hatchX" : 0,
"hatchY" : 84e-6,
"snakeScan": false,
"delayBetweenTracks": 0.00045
},
"Beam": {
"type" : "Laser",
"Shape" : "Gauss",
"Power" : 200.0,
"Width" : 380e-6,
"Speed" : 2.0
}
}
],
"PowderBedGenerator": {
"Type": "PowDEM",
"KnifeZposition": 0.00506,
"GroundSurface": "",
"PSDsizes": [ [ 0, 18e-06 ],
[ 10, 2.2e-05 ],
[ 50, 3e-05 ],
[ 90, 4e-05 ],
[ 100, 4.5e-5 ] ]
},
"NumericalParams": {
"dr": 4e-06,
"dt": 50e-09
},
"config": {
"MemoryAllocation": "managed",
"AllowToRunoutXYbox": true,
"DumpDataRate": 10000,
"IterationSubstepsRate": 1000,
"DumpARR": false,
"DumpVTK": false,
"calcBubbles": false,
"AutoTermination": true
},
"Substrate": {
"preheating": 300
},
"Powder": {
"initSpheresVDBfile": "init_spheres.vdb",
"components" : null
},
"licenseFile": "/licences/license.lic",
"sizes": {
"substrate": 0.005,
"FullXapprox": 0.004,
"FullYapprox": 0.004,
"FullZapprox": 0.0055
},
"Visual": {
"RenderOnlyMeltpool" : false,
"3DrenderedDomainSize": [5e-3, 1.0e-3, 0.5e-3]
},
"Material": "SS316L"
}
In the beam description, the new parameter StartDelayTime defines the offset between the two beams, in seconds.
The result is more smooth:
Finally, when the zig-zag scanning is used, the snake field is set to true in both beams. Here is the resulting picture:
To conclude, the simulation shows that the post-heating beam makes the top surface, as well as the bottom of the melted region smoother. Without post-heating, lack-of-fusion regions are observed. In real applications, users may test different parameters of the post-heating beam in simulation, before installing the beam in the real-life machine.
Multiple tiles build¶
In this example, several tiles are built at the same time to increase build productivity. The numerical simulation shows the dynamics of heat interation between different tiles.
Fig. 63 Click on the image to play video¶
The four beams are set with independent strategies. Here is an example input:
...
"ScanStrategy":
[
{
"Type": "SquareLayer",
"PitchDelayTime": 0,
"StartDelayTime": 0,
"SquareLayer": {
"startPosX": 1e-3,
"startPosY": 1e-3,
"dimX" : 1e-3,
"dimY" : 1e-3,
"hatchX" : 0,
"hatchY" : 100e-6,
"delayBetweenTracks": 0.0
},
"Beam": {
"type" : "Laser",
"Shape" : "Gauss",
"Power" : 200.0,
"Width" : 100e-6,
"Speed" : 1.0
}
},
{
"Type": "SquareLayer",
"PitchDelayTime": 0,
"StartDelayTime": 0.001,
"SquareLayer": {
"startPosX": 1e-3,
"startPosY": 2.1e-3,
"dimX" : 1e-3,
"dimY" : 1e-3,
"hatchX" : 0,
"hatchY" : 100e-6,
"delayBetweenTracks": 0.0
},
"Beam": {
"type" : "Laser",
"Shape" : "Gauss",
"Power" : 200.0,
"Width" : 100e-6,
"Speed" : 1.0
}
},
{
"Type": "SquareLayer",
"PitchDelayTime": 0,
"StartDelayTime": 0,
"SquareLayer": {
"startPosX": 2.1e-3,
"startPosY": 1e-3,
"dimX" : 1e-3,
"dimY" : 1e-3,
"hatchX" : 0,
"hatchY" : 100e-6,
"delayBetweenTracks": 0.0
},
"Beam": {
"type" : "Laser",
"Shape" : "Gauss",
"Power" : 200.0,
"Width" : 100e-6,
"Speed" : 1.0
}
},
{
"Type": "SquareLayer",
"PitchDelayTime": 0,
"StartDelayTime": 0.001,
"SquareLayer": {
"startPosX": 2.1e-3,
"startPosY": 2.1e-3,
"dimX" : 1e-3,
"dimY" : 1e-3,
"hatchX" : 0,
"hatchY" : 100e-6,
"delayBetweenTracks": 0.0
},
"Beam": {
"type" : "Laser",
"Shape" : "Gauss",
"Power" : 200.0,
"Width" : 100e-6,
"Speed" : 1.0
}
}
],
...