HSS Boundary
HSSSimulations.HSSBound
— ModuleAll 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.
Parameters
HSSSimulations.HSSBound.HSSParams
— Typemutable 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.
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 wattsoverheadTemp::Float64
: Current temperature of overhead heaters, in °ClastUpdatedOverhead::Int64
: The last layer the overheads were updated oncoolStart::Float64
: The time at the start of cooling loads, in seconds since the start of the buildpistonCoolStart::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 curveairCoolStart::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 curvesurfaceCoolStart::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
No Carriage Loads
HSSSimulations.HSSBound.loadOverheads
— FunctionloadOverheads(
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.
HSSSimulations.HSSBound.loadCooldown
— FunctionloadCooldown(
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.
Piston Boundaries
HSSSimulations.HSSBound.AbstractPistonBoundary
— Typeabstract type AbstractPistonBoundary <: AbstractBoundary
An abstract type, all subtypes of which can use the same boundary heat transfer rate function, but can have their own constructors.
HSSSimulations.Types.boundaryHeatTransferRate
— MethodboundaryHeatTransferRate(
T,
_,
p::HSSSimulations.HSSBound.AbstractPistonBoundary
) -> Any
HSSSimulations.HSSBound.PistonBoundary
— Typestruct 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 temperatureh::Float64
: Contact conduction coefficient
HSSSimulations.HSSBound.PistonBoundary
— MethodPistonBoundary(
_::AbstractResult,
cts::AbstractResult,
prob::Problem{T, Gh, Mp, R, OR, B},
_::HSSSimulations.Types.LoadStep
) -> PistonBoundary
HSSSimulations.HSSBound.PistonCoolBoundary
— Typestruct 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 temperatureh::Float64
: Contact conduction coefficient
HSSSimulations.HSSBound.PistonCoolBoundary
— MethodPistonCoolBoundary(
pts::AbstractResult,
cts::AbstractResult,
prob::Problem{T, Gh, Mp, R, OR, B},
_::HSSSimulations.Types.LoadStep
) -> PistonCoolBoundary
Overhead Boundaries
HSSSimulations.HSSBound.AbstractOverheadsBoundary
— Typeabstract type AbstractOverheadsBoundary <: AbstractBoundary
An abstract type, all subtypes of which can use the same boundary heat transfer rate function, but can have their own constructors.
HSSSimulations.Types.boundaryHeatTransferRate
— MethodboundaryHeatTransferRate(
T,
_,
p::HSSSimulations.HSSBound.AbstractOverheadsBoundary
) -> Any
HSSSimulations.HSSBound.OverheadsBoundary
— Typestruct 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 heatersurfaceTemp::Float64
: Temperatur of machine internal surfaceε::Float64
: Black Body EmmissivityairTemp::Float64
: Temperature of air above build bedh::Float64
: Convection coefficientPo::Float64
: Weighting of overhead heaters vs raditiation loss
HSSSimulations.HSSBound.OverheadsBoundary
— MethodOverheadsBoundary(
pts::AbstractResult,
cts::AbstractResult,
prob::Problem{T, Gh, Mp, R, OR, B},
ls::HSSSimulations.Types.LoadStep
) -> OverheadsBoundary
HSSSimulations.HSSBound.OverheadsCoolBoundary
— Typestruct 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 heatersurfaceTemp::Float64
: Temperatur of machine internal surfaceε::Float64
: Black Body EmmissivityairTemp::Float64
: Temperature of air above build bedh::Float64
: Convection coefficientPo::Float64
: Weighting of overhead heaters vs raditiation loss
HSSSimulations.HSSBound.OverheadsCoolBoundary
— MethodOverheadsCoolBoundary(
pts::AbstractResult,
cts::AbstractResult,
prob::Problem{T, Gh, Mp, R, OR, B},
_::HSSSimulations.Types.LoadStep
) -> OverheadsCoolBoundary
Carriage Loads
Sinter Stroke
HSSSimulations.HSSBound.loadSinterStroke
— FunctionloadSinterStroke(
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.
HSSSimulations.Types.boundaryHeatTransferRate
— MethodboundaryHeatTransferRate(T, i, p::SinterBoundary) -> Any
HSSSimulations.HSSBound.SinterBoundary
— Typestruct 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 heatersurfaceTemp::Float64
: Temperatur of machine internal surfaceeₗ::Array{Float64, 3}
: Net absorbtivity relative to lampε::Float64
: Black Body EmmissivityairTemp::Float64
: Temperature of air above build bedh::Float64
: Convection coefficientlamp::Vector{Float64}
: Sinter lamp arrayshadow::Vector{Bool}
: Carriage shadow arrayPo::Float64
: Weighting of overhead heaters vs raditiation loss
HSSSimulations.HSSBound.SinterBoundary
— MethodSinterBoundary(
_::AbstractResult,
cts::AbstractResult,
prob::Problem{T, Gh, Mp, R, OR, B},
ls::HSSSimulations.Types.LoadStep
) -> SinterBoundary
Recoating Stroke
HSSSimulations.HSSBound.loadRecoatStroke
— FunctionloadRecoatStroke(
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.
HSSSimulations.Types.boundaryHeatTransferRate
— MethodboundaryHeatTransferRate(T, i, p::RecoatBoundary) -> Any
HSSSimulations.HSSBound.RecoatBoundary
— Typestruct 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 heatersurfaceTemp::Float64
: Temperatur of machine internal surfaceeₗ::Array{Float64, 3}
: Net absorbtivity relative to lampε::Float64
: Black Body EmmissivityairTemp::Float64
: Temperature of air above build bedh::Float64
: Convection coefficientlamp::Vector{Float64}
: Sinter lamp arrayshadow::Vector{Bool}
: Carriage shadow arrayPo::Float64
: Weighting of overhead heaters vs raditiation loss
HSSSimulations.HSSBound.RecoatBoundary
— MethodRecoatBoundary(
pts::AbstractResult,
cts::AbstractResult,
prob::Problem{T, Gh, Mp, R, OR, B},
ls::HSSSimulations.Types.LoadStep
) -> RecoatBoundary
Printing Stroke
HSSSimulations.HSSBound.loadInkStroke
— FunctionloadInkStroke(
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.
HSSSimulations.Types.boundaryHeatTransferRate
— MethodboundaryHeatTransferRate(T, i, p::InkBoundary) -> Any
HSSSimulations.HSSBound.InkBoundary
— TypeBoundary 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 heatersurfaceTemp::Float64
: Temperatur of machine internal surfaceε::Float64
: Black Body EmmissivityairTemp::Float64
: Temperature of air above build bedh::Float64
: Convection coefficientshadow::Vector{Bool}
: Carriage shadow arrayPo::Float64
: Weighting of overhead heaters vs raditiation loss
HSSSimulations.HSSBound.InkBoundary
— MethodInkBoundary(
_::AbstractResult,
cts::AbstractResult,
prob::Problem{T, Gh, Mp, R, OR, B},
ls::HSSSimulations.Types.LoadStep
) -> InkBoundary
Printhead Shadow Only Stroke
HSSSimulations.HSSBound.loadBlankStroke
— FunctionloadBlankStroke(
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.
HSSSimulations.Types.boundaryHeatTransferRate
— MethodboundaryHeatTransferRate(T, i, p::BlankBoundary) -> Any
HSSSimulations.HSSBound.BlankBoundary
— Typestruct 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 heatersurfaceTemp::Float64
: Temperatur of machine internal surfaceε::Float64
: Black Body EmmissivityairTemp::Float64
: Temperature of air above build bedh::Float64
: Convection coefficientshadow::Vector{Bool}
: Carriage shadow arrayPo::Float64
: Weighting of overhead heaters vs raditiation loss
HSSSimulations.HSSBound.BlankBoundary
— MethodBlankBoundary(
_::AbstractResult,
cts::AbstractResult,
prob::Problem{T, Gh, Mp, R, OR, B},
ls::HSSSimulations.Types.LoadStep
) -> BlankBoundary
Utilities
HSSSimulations.HSSBound.lampMaker
— FunctionlampMaker(
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 axislampWidth
: The total width represented by the lamp vector (in the y axis, in nodes).geometry::Geometry
: The simulation geometry
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.
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.
HSSSimulations.HSSBound.overheadTempFunc
— FunctionoverheadTempFunc(
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 outputoverheadHeatCapacity
: The heat capacity of the overhead heaterprevOverheadTemp
: The previous temperature of the overhead heaters
HSSSimulations.HSSBound.coolingStart
— FunctioncoolingStart(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