I've encountered something I can't explain. My code passes several parameters around in a struct. Some functions accept it successfully, while another doesn't. Perhaps somebody else can spot the mistake I'm missing.
Everything in this MWE appears fine until the final line raises an error.
using FlexUnits: QuantFieldVector, DimsMod
using Revise
gravity = 9.81u"m/s^2"
net_load(diameter, config) = @. 2*config.initial_load*(sin(acos((config.drum+config.gap)/(config.drum+diameter)))) - π/4*(diameter^2 - config.core^2)*config.density*gravity
limited_load(diameter, config) = max.(net_load(diameter, config), config.min_load)
line_load(diameter, config) = @. (π/4*(diameter^2 - config.core^2)*config.density*gravity + limited_load(diameter, config))/(2*sin(acos((config.drum+config.gap)/(config.drum+diameter))))
mutable struct Carrier{T} <: QuantFieldVector{7,T}
drum::Quantity{T, D"m"}
gap::Quantity{T, D"m"}
core::Quantity{T, D"m"}
span::Quantity{T, D"m"}
min_load::Quantity{T, D"N/m"}
initial_load::Quantity{T, D"N/m"}
density::Quantity{T, D"kg/m^3"}
end
config = Carrier(26u"in", 31u"mm", 110u"mm", 1.4u"m", 5u"lbf/in",14u"lbf/in", 860u"kg/m^3")
transition_diameter = 0.9u"m"
config.initial_load
net_load(440u"mm", config)
limited_load(440u"mm", config)
line_load(440u"mm", config)
ERROR: FieldError: type Float64 has no field `initial_load`; Float64 has no fields at all.
Stacktrace:
[1] getproperty
@ .\Base_compiler.jl:57 [inlined]
[2] net_load(diameter::Quantity{Float64, StaticDims{m}}, config::Float64)
@ Main .\REPL[83]:2
[3] limited_load(diameter::Quantity{Float64, StaticDims{m}}, config::Float64)
@ Main .\REPL[82]:2