HSS Boundary

HSSSimulations.HSSBoundModule

All additional boundary conditions requried to simulate a HSS build that are not already included in Boundary.

The main two exports of this module are HSSParams and HSSLoads, which combined create everything needed to simulate the boundaries of a standard HSS build. Each load used by HSSLoads and some additional utilities are also exported to allow for more custom builds to be setup.

source

Parameters

HSSSimulations.HSSBound.HSSParamsType
mutable struct HSSParams{T1, T2, T3, T4, T5, T6, T7, T8} <: AbstractProblemParams

The parameter struct for a standard HSS build. This is intended to proved the required parameters for the load sets produced by HSSLoads.

See HSSParams for the default constructor.

Note

If the fields below are not documented correctly in whatever method you are using to view this documentation, try looking directly at the source code.

Fields

  • name::String

  • pistonHeat::Any

  • pistonCool::Any

  • conductionCoef::Float64

  • airHeat::Any

  • airCool::Any

  • convectionCoef::Float64

  • surfaceHeat::Any

  • surfaceCool::Any

  • powderTemp::Any

  • sinterLamp::Vector{Float64}

  • recoatLamp::Vector{Float64}

  • lampWidth::Int64

  • lampOffset::Int64

  • carriageWidth::Int64

  • printCarriageWidth::Int64

  • printOffset::Int64

  • recoatOffset::Int64

  • surfaceTarget::Float64

  • surfaceTol::Float64

  • overheadHeatupFunc::Any

  • overheadLayerStep::Int64

  • overheadPowerStep::Float64

  • overheadMaxPower::Float64

  • percentOverhead::Float64

  • overheadPower::Float64: Current power input of overhead heaters, in watts

  • overheadTemp::Float64: Current temperature of overhead heaters, in °C

  • lastUpdatedOverhead::Int64: The last layer the overheads were updated on

  • coolStart::Float64: The time at the start of cooling loads, in seconds since the start of the build

  • pistonCoolStart::Float64: The offset time if the piston wasn't at max temp at start of cooling, in seconds after the start of the piston cooldown curve

  • airCoolStart::Float64: The offset time if the air wasn't at max temp at start of cooling, in seconds after the start of the air cooldown curve

  • surfaceCoolStart::Float64: The offset time if the machine's internal suraface wasn't at max temp at start of cooling, in seconds after the start of the surface cooldown curve

source

No Carriage Loads

HSSSimulations.HSSBound.loadOverheadsFunction
loadOverheads(
    tₗ,
    skip
) -> Load{SymetryBoundary, SymetryBoundary, SymetryBoundary, SymetryBoundary}

Returns a load that represents the case where there are no carriages over top the powder bed, and the overhead and piston heaters are both on. This assumes that a subset of the build is being simulated and the the edge boundaries can be approximated as symetrical (no heat flow).

Uses HSSBound.OverheadsBoundary for the top surface, HSSBound.PistonBoundary for the bottom surface and the default Boundary.SymetryBoundary functions for the sides.

source
HSSSimulations.HSSBound.loadCooldownFunction
loadCooldown(
    tₗ,
    skip
) -> Load{SymetryBoundary, SymetryBoundary, SymetryBoundary, SymetryBoundary}

Returns a load that represents the case where there are no carriages over top the powder bed, and the overhead and piston heaters have both been turned off. This assumes that a subset of the build is being simulated and the the edge boundaries can be approximated as symetrical (no heat flow).

Uses HSSBound.OverheadsCoolBoundary and HSSBound.PistonCoolBoundary for the bottom surface and the default Boundary.SymetryBoundary functions for the sides. It assumes that once cooling starts it doesn't stop.

source

Piston Boundaries

HSSSimulations.HSSBound.PistonBoundaryType
struct PistonBoundary <: HSSSimulations.HSSBound.AbstractPistonBoundary

Boundary for the bottom surface of a HSS build for loads where the heater is turned on. This boudnary assumes that the piston maintains a constant temperature at after the initial heat up.

Fields

  • piston::Float64: Piston temperature

  • h::Float64: Contact conduction coefficient

source
HSSSimulations.HSSBound.PistonCoolBoundaryType
struct PistonCoolBoundary <: HSSSimulations.HSSBound.AbstractPistonBoundary

Boundary for the bottom surface of a HSS build for cooldown loads. This boundary assumes that once cooling starts it doesn't stop.

Fields

  • piston::Float64: Piston temperature

  • h::Float64: Contact conduction coefficient

source

Overhead Boundaries

HSSSimulations.HSSBound.OverheadsBoundaryType
struct OverheadsBoundary <: HSSSimulations.HSSBound.AbstractOverheadsBoundary

Boundary for the top surface of a HSS build with no lamp or print carriage movement. This boundary assumes the heater controller is the same as our HSS machine where It only updates the overhead power every overheadLayerStep number of layers, and only once on that layer.

Fields

  • overheadTemp::Float64: Temperatur of overhead heater

  • surfaceTemp::Float64: Temperatur of machine internal surface

  • ε::Float64: Black Body Emmissivity

  • airTemp::Float64: Temperature of air above build bed

  • h::Float64: Convection coefficient

  • Po::Float64: Weighting of overhead heaters vs raditiation loss

source
HSSSimulations.HSSBound.OverheadsCoolBoundaryType
struct OverheadsCoolBoundary <: HSSSimulations.HSSBound.AbstractOverheadsBoundary

Like the OverheadsBoundary but it sets the overhead power to 0w (turning it off). This boundary assumes that once cooling starts it doesn't stop.

Fields

  • overheadTemp::Float64: Temperatur of overhead heater

  • surfaceTemp::Float64: Temperatur of machine internal surface

  • ε::Float64: Black Body Emmissivity

  • airTemp::Float64: Temperature of air above build bed

  • h::Float64: Convection coefficient

  • Po::Float64: Weighting of overhead heaters vs raditiation loss

source

Carriage Loads

Sinter Stroke

HSSSimulations.HSSBound.loadSinterStrokeFunction
loadSinterStroke(
    tₗ,
    skip
) -> Load{SymetryBoundary, SymetryBoundary, SymetryBoundary, SymetryBoundary}

Returns the compleate Types.Load struct for a HSS build with recoat/lamp carriage over the build and the sinter lamp set to sinter power. This assumes that a subset of the build is being simulated and the the edge boundaries can be approximated as symetrical (no heat flow).

Uses HSSBound.SinterBoundary for the top surface, HSSBound.PistonBoundary for the bottom surface and the default Boundary.SymetryBoundary for the sides.

source
HSSSimulations.HSSBound.SinterBoundaryType
struct SinterBoundary <: AbstractBoundary

Boundary for the top surface of a HSS build for when the recoat/lamp carriage is over the build bed and the lamp is set to sinter power.

Fields

  • overheadTemp::Float64: Temperatur of overhead heater

  • surfaceTemp::Float64: Temperatur of machine internal surface

  • eₗ::Array{Float64, 3}: Net absorbtivity relative to lamp

  • ε::Float64: Black Body Emmissivity

  • airTemp::Float64: Temperature of air above build bed

  • h::Float64: Convection coefficient

  • lamp::Vector{Float64}: Sinter lamp array

  • shadow::Vector{Bool}: Carriage shadow array

  • Po::Float64: Weighting of overhead heaters vs raditiation loss

source

Recoating Stroke

HSSSimulations.HSSBound.loadRecoatStrokeFunction
loadRecoatStroke(
    tₗ,
    skip
) -> Load{SymetryBoundary, SymetryBoundary, SymetryBoundary, SymetryBoundary}

Returns the compleate Types.Load struct for a HSS build with the recoat/lamp carriage over the build area, the lamp set to recoat power and new powder being deposited with the movement. This assumes that a subset of the build is being simulated and the the edge boundaries can be approximated as symetrical (no heat flow).

Uses HSSBound.RecoatBoundary for the top surface, HSSBound.PistonBoundary for the bottom surface and the default Boundary.SymetryBoundary functions for the sides.

source
HSSSimulations.HSSBound.RecoatBoundaryType
struct RecoatBoundary <: AbstractBoundary

Boundary for the top surface of a HSS build with the recoat/lamp carriage over the build area, the lamp set to recoat power and new powder being deposited.

Fields

  • overheadTemp::Float64: Temperatur of overhead heater

  • surfaceTemp::Float64: Temperatur of machine internal surface

  • eₗ::Array{Float64, 3}: Net absorbtivity relative to lamp

  • ε::Float64: Black Body Emmissivity

  • airTemp::Float64: Temperature of air above build bed

  • h::Float64: Convection coefficient

  • lamp::Vector{Float64}: Sinter lamp array

  • shadow::Vector{Bool}: Carriage shadow array

  • Po::Float64: Weighting of overhead heaters vs raditiation loss

source

Printing Stroke

HSSSimulations.HSSBound.loadInkStrokeFunction
loadInkStroke(
    tₗ,
    skip
) -> Load{SymetryBoundary, SymetryBoundary, SymetryBoundary, SymetryBoundary}

Returns the compleate Types.Load struct for a HSS build with the print head carriage over the build volume depositing ink. This assumes that a subset of the build is being simulated and the the edge boundaries can be approximated as symetrical (no heat flow).

Uses HSSBound.InkBoundary for the top surface, HSSBound.PistonBoundary for the bottom surface and the default Boundary.SymetryBoundary for the sides.

source
HSSSimulations.HSSBound.InkBoundaryType

Boundary for the top surface of a HSS build with the print head carriage over the build volume depositing ink.

Fields

  • overheadTemp::Float64: Temperatur of overhead heater

  • surfaceTemp::Float64: Temperatur of machine internal surface

  • ε::Float64: Black Body Emmissivity

  • airTemp::Float64: Temperature of air above build bed

  • h::Float64: Convection coefficient

  • shadow::Vector{Bool}: Carriage shadow array

  • Po::Float64: Weighting of overhead heaters vs raditiation loss

source

Printhead Shadow Only Stroke

HSSSimulations.HSSBound.loadBlankStrokeFunction
loadBlankStroke(
    tₗ,
    skip
) -> Load{SymetryBoundary, SymetryBoundary, SymetryBoundary, SymetryBoundary}

Returns the compleate Types.Load struct for a HSS build with the print head carriage over the build area but not on the ink deposition stroke. This assumes that a subset of the build is being simulated and the the edge boundaries can be approximated as symetrical (no heat flow).

Uses HSSBound.BlankBoundary for the top surface, HSSBound.PistonBoundary for the bottom surface and the default Boundary.SymetryBoundary functions for the sides.

source
HSSSimulations.HSSBound.BlankBoundaryType
struct BlankBoundary <: AbstractBoundary

Boundary for the top surface of a HSS build with the print head carriage over the build area but not on the ink deposition stroke.

Fields

  • overheadTemp::Float64: Temperatur of overhead heater

  • surfaceTemp::Float64: Temperatur of machine internal surface

  • ε::Float64: Black Body Emmissivity

  • airTemp::Float64: Temperature of air above build bed

  • h::Float64: Convection coefficient

  • shadow::Vector{Bool}: Carriage shadow array

  • Po::Float64: Weighting of overhead heaters vs raditiation loss

source

Utilities

HSSSimulations.HSSBound.lampMakerFunction
lampMaker(
    lampVector::Vector,
    lampWidth,
    geometry::Geometry
) -> Any

Returns a vector of heat flux density coefficients representing the lamp, with the same node spacing as the simulation. The returned vector can be multiplied by the lamp power, in watts, to get a vector of heat flux densities of the lamp.

Arguments

  • lampVector::Vector : A vector represeting the heat distribution of the lamp in the y axis
  • lampWidth : The total width represented by the lamp vector (in the y axis, in nodes).
  • geometry::Geometry : The simulation geometry
Note

If the lamp width divided by the length of the lamp vector is not equal to the Δy then linear interpolation is used to fill in the values.

Warn

This uses the Δx and Δy node spacings to calculate the area used to convert to heat flux density, because of this it is only applicable to the z₁ and z₂ boundaries.

source
HSSSimulations.HSSBound.overheadTempFuncFunction
overheadTempFunc(
    powerIn,
    powerOut,
    overheadHeatCapacity,
    Δt,
    prevOverheadTemp
) -> Any

Calculates the new temperature of a an overhead heater that has a given power output and is set to a given power (powerIn) values.

Arguments

  • powerOut : A function that takes the temperatu of the heater and returns the power output
  • overheadHeatCapacity : The heat capacity of the overhead heater
  • prevOverheadTemp : The previous temperature of the overhead heaters
source
HSSSimulations.HSSBound.coolingStartFunction
coolingStart(tᵗ⁻¹, tᵗ, params::AbstractProblemParams)

Sets the time that the cooling starts, to be used to calculate how far into the cooling the simulation is during future time steps.

It also finds how far into the cooling curves of the different components to start based on the current temperature of that component. If the current temperature is less than any temperature in the cooling curve it will default to starting at the end of the curve.

This requires the type of pistonCool, airCool and surfaceHeat have methods for findfirst

source