AMB2018-02-B Single Track
AMB2018-02-B is the baseline single-track case and the starting point for the quick-start instructions. It represents the NIST AM-Bench 2018 IN625 experiment with calibrated absorption, radius, and depth.
Physical setup
- IN625 properties from
$ADDITIVEFOAM_ETC/materials/IN625.cfg. - One
superGaussiansource withk 2,radius (85 85)µm,depth 30µm,definition secondMoment, and absorptivity0.33. tolerance 1e-3andnPoints (10 10 10).- A 179.2 W, 0.8 m/s scan path.
- Optional refinement configuration, disabled by default.
- Fluid flow disabled by
nOuterCorrectors 0in the tutorial case. - Eight MPI ranks.
The calibration is described by Knapp et al., “Calibrating uncertain parameters in melt pool simulations of additive manufacturing”.
Run
cp -r "$ADDITIVEFOAM_TUTORIALS/AMB2018-02-B" "$FOAM_RUN/AMB2018-02-B"
cd "$FOAM_RUN/AMB2018-02-B"
./Allrun
The solver log should report approximately 33% of the active incident power as absorbed when the constant model is used and the source is fully contained by the domain.
Important inputs
| File | Purpose |
|---|---|
constant/heatSourceDict |
Absorption, source distribution, sampling, and optional AMR |
constant/scanPath |
Beam position, power, and speed |
constant/dynamicMeshDict |
OpenFOAM topology changer |
system/blockMeshDict |
Base mesh |
system/fvSchemes |
Defaults to Euler |
system/fvSolution |
Defaults to the explicit temperature path |
system/decomposeParDict |
Eight-rank domain decomposition |
Workflow
Allrun generates the mesh, decomposes the case, runs additiveFoam in parallel, reconstructs the OpenFOAM fields, and invokes the ExaCA and solidification-data reconstruction utilities. The latter utilities produce output only when their corresponding Function Objects are enabled in system/controlDict.
Outputs
Open the reconstructed case in ParaView to visualize temperature, phase fraction, velocity, pressure, and heat-source fields. The same case supplies the quantitative outputs below.
Plot absorbed power
additiveFoam writes the volume-integrated absorbed power to log.additiveFoam at every time step. From the case directory, plot that history with:
plotPower
The utility reads the time and absorbed power entries from the solver log and creates power.png. For the constant absorption model used by this case, the plotted value is approximately \(0.33(179.2\ \mathrm W)=59.136\ \mathrm W\) while the heat source is fully contained within the domain.
plotPower. The constant-absorption model deposits approximately 59.1 W while the 179.2 W source is active and fully contained by the domain.Write and plot melt-pool dimensions
To obtain melt-pool length, width, and depth as functions of time, enable meltPoolDimensions in system/controlDict before running a fresh case copy:
meltPoolDimensions
{
libs ("libadditiveFoamFunctionObjects.so");
type meltPoolDimensions;
enabled true;
scanPathAngle 0;
}
With no isoValues entry, the Function Object writes both the IN625 solidus and liquidus isosurfaces from thermoPath. Run the case:
./Allrun
The CSV time histories are written under postProcessing/meltPoolDimensions/. Create the dimension plot from the case directory:
plotDimensions
The resulting melt_pool_dimensions.png contains length, width, and depth for each recorded isovalue.
plotDimensions. Blue denotes the 1410 K solidus isotherm and orange denotes the 1620 K liquidus isotherm.Write solidification data and plot CET curves
To record cooling rate, thermal gradient, and isotherm velocity as material cools through the liquidus, enable solidificationData in system/controlDict. Set box to the region in which events should be collected:
solidificationData
{
libs ("libadditiveFoamFunctionObjects.so");
type solidificationData;
enabled true;
box (-1 -1 -1) (1 1 1);
isoValue 1620;
}
Run the case with ./Allrun. Each MPI process writes its events separately, and the final reconstructSolidificationData call in Allrun combines them into:
solidificationData/solidification-data.csv
Plot thermal-gradient magnitude against isotherm velocity from the case directory:
plotCET
plotCET creates CET_curve.png. The axes are thermal-gradient magnitude and isotherm velocity, the two inputs used to evaluate columnar-to-equiaxed transition criteria.
plotCET. Each point is a liquidus-crossing event written by the solidificationData Function Object.Create ExaCA temperature histories
To generate explicit temperature histories for an ExaCA microstructure simulation, enable ExaCA in system/controlDict before running a fresh case copy:
ExaCA
{
libs ("libadditiveFoamFunctionObjects.so");
type ExaCA;
enabled true;
box (-5e-5 -0.00025 -0.0002) (0.0025 0.00025 0);
dx 2.5e-6;
isoValue 1620;
}
box defines the microstructure-sampling region, dx is the Cartesian sampling spacing, and isoValue is the temperature used to identify melting and solidification. Run ./Allrun; its reconstructExaCAData step creates:
ExaCA/time-temperature.csv
ExaCA/input.json reads that file through TemperatureData.TemperatureFiles. From the AdditiveFOAM case directory, launch an installed ExaCA executable with the desired MPI process count:
mpirun -np <nProcs> /path/to/ExaCA ExaCA/input.json
ExaCA reads the reconstructed melt and solidification events and writes the explicit microstructure result under ExaCA/. Runtime mesh redistribution must remain disabled while the ExaCA Function Object is active.