Load Recipes

You might want to check out Load

A Cooling Recoat Load and Load Set

This load will and load set use the boundary that we created in A Cooling Recoat Boundary

Loads

When making a load, we only need to define the boundaries that are different from the default, any undefined boundaries are left as SymetryBoundarys.

Well make a function to create a new Load that takes a time length and a skip ([Why We Skip Some Results]@ref).

function loadRecoatCoolStroke(tₗ, skip)
    return Load(;
        # Lets give it a name we'll be able to recognise later
        name = "Cooldown Recoat",
        tₗ   = tₗ,
        skip = skip,
        # Set the bottom boundary
        z₁=PistonCoolBoundary,
        # Set the top boundary
        z₂=RecoatCoolBoundary,
    )
end

Well also make a matching load to go with the matching boundary from A Cooling Recoat Return Boundary.

function loadRecoatCoolReturnStroke(tₗ, skip)
    return Load(;
        name = "Cooldown Return",
        tₗ   = tₗ,
        skip = skip,
        z₁   = PistonCoolBoundary,
        z₂   = RecoatCoolReturnBoundary,
    )
end

Load Set

The load sets that are given to the solver are actually just a list of loads. So here we'll just make a function that returns a list of the loads we want. This one works for a recoater that spends 7 seconds over the bed with one second between each time it's over the bed.

function cooldownLoadSet(skip)
    return [
        # A load without any carriage movement to represent when the carriage
        # isn't above the bed
        loadCooldown(1.0, skip),
        loadRecoatStroke(7.0, skip),
        loadCooldown(1.0, skip),
        loadRecoatReturnStroke(7.0, skip),
        loadCooldown(1.0, skip),
    ]
end

If we wanted this to have custom behaviour in the problem we might want to define a new LoadSet type or if you want even more complicated behaviour, have a look at Problem Solver Recipes.