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.

IN625 top-surface temperature as the heat source traverses the AMB2018-02-B track. The black and white contours denote the 1410 K solidus and 1620 K liquidus, respectively.

Physical setup

  • IN625 properties from $ADDITIVEFOAM_ETC/materials/IN625.cfg.
  • One superGaussian source with k 2, radius (85 85) µm, depth 30 µm, definition secondMoment, and absorptivity 0.33.
  • tolerance 1e-3 and nPoints (10 10 10).
  • A 179.2 W, 0.8 m/s scan path.
  • Optional refinement configuration, disabled by default.
  • Fluid flow disabled by nOuterCorrectors 0 in 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.

Absorbed power versus time for the AMB2018-02-B tutorial. The power remains near 59 watts until the laser turns off at 2.5 milliseconds.
Output from 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.

Melt-pool length, width, and depth versus time for the 1410 kelvin solidus and 1620 kelvin liquidus isotherms in the AMB2018-02-B tutorial.
Output from 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.

Log-log scatter plot of thermal-gradient magnitude against solidification velocity for liquidus-crossing events in the AMB2018-02-B tutorial.
Output from 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.