Precompiled Caches

There are several available caches that can be precompiled to help speed up multiple analyses. The first is a cache used for intermediate calculations in the pre- and post-processing phases of the analysis. It can be preallocated using allocate_prepost_container_cache

DuctAPE.allocate_prepost_container_cacheFunction
allocate_prepost_container_cache(paneling_constants::PanelingConstants)
allocate_prepost_container_cache(problem_dimensions::ProblemDimensions)

Allocate the pre- and post-processing cache (used for intermediate calculations) based on paneling constants or problem dimensions.

Arguments

  • paneling_constants::PanelingConstants : a PanelingConstants object

OR

  • problem_dimensions::ProblemDimensions : a ProblemDimensions object

Keyword Arguments

  • fd_chunk_size::Int=12 : chunk size to use for PreallocationTools caches. Note that the automated chunk size for DuctAPE will always be the ForwardDiff threshold of 12 due to the size of the system, so it will be best to leave this at the default unless further development allows for chunk size selection for individual solvers.
  • levels::Int=1 : levels for nested duals. Note that since ImplicitAD is being used for all solves, there should be no need for more than 1 level.

Returns

  • prepost_container_caching::NamedTuple : a Named Tuple containing:
    • prepost_container_cache::PreallocationTools.DiffCache : the cache
    • prepost_container_cache_dims::NamedTuple : a named tuple containing the dimensions used for reshaping the cache when needed.
source

The second is a cache containing parameters used in the solver, in other words, the results of the pre-processing phase. It can be preallocated using allocate_solve_parameter_cache.

DuctAPE.allocate_solve_parameter_cacheFunction
allocate_solve_parameter_cache(
    solve_type::SolverOptionsType,
    paneling_constants::PanelingConstants;
    airfoils,
    fd_chunk_size=12,
    levels=1,
)
allocate_solve_parameter_cache(
    solve_type::SolverOptionsType,
    problem_dimensions::ProblemDimensions;
    airfoils,
    fd_chunk_size=12,
    levels=1
)

Allocate the solve parameter cache for parameters passed into the solver(s).

Arguments

  • solve_type::SolverOptionsType : Solver options type used for dispatch
  • paneling_constants::PanelingConstants : a PanlingConstants object used for sizing
  • airfoils::Airfoil : an array of airfoil composite types (MUST be a composite type), such as one of the types available in DuctAPE.C4Blade.

OR

  • solve_type::SolverOptionsType : Solver options type used for dispatch
  • problem_dimensions::ProblemDimensions : a ProblemDimensions object used for sizing
  • airfoils::Airfoil : an array of airfoil composite types (MUST be a composite type), such as one of the types available in DuctAPE.C4Blade.

Keyword Arguments

  • fd_chunk_size::Int=12 : chunk size to use for PreallocationTools caches. Note that the automated chunk size for DuctAPE will always be the ForwardDiff threshold of 12 due to the size of the system, so it will be best to leave this at the default unless further development allows for chunk size selection for individual solvers.
  • levels::Int=1 : levels for nested duals. Note that since ImplicitAD is being used for all solves, there should be no need for more than 1 level.

Returns

  • solve_parameter_caching::NamedTuple : a Named Tuple containing:
    • solve_parameter_cache::PreallocationTools.DiffCache : the cache
    • solve_parameter_cache_dims::NamedTuple : a named tuple containing the dimensions used for reshaping the cache when needed.
source

The final precompileable cache is for intermediate calculations within the solve and can be preallocated using allocate_solve_container_cache

DuctAPE.allocate_solve_container_cacheFunction
allocate_solve_container_cache(
    solve_type::SolverOptionsType,
    paneling_constants::PanelingConstants;
    fd_chunk_size=12,
    levels=1,
)
allocate_solve_container_cache(
    solve_type::SolverOptionsType,
    problem_dimensions::ProblemDimensions;
    fd_chunk_size=12,
    levels=1,
)

Allocate the solve cache (used for intermediate calculations) based on paneling constants or problem dimensions.

Arguments

  • paneling_constants::PanelingConstants : a PanelingConstants object

OR

  • problem_dimensions::ProblemDimensions : a ProblemDimensions object

Keyword Arguments

  • fd_chunk_size::Int=12 : chunk size to use for PreallocationTools caches. Note that the automated chunk size for DuctAPE will always be the ForwardDiff threshold of 12 due to the size of the system, so it will be best to leave this at the default unless further development allows for chunk size selection for individual solvers.
  • levels::Int=1 : levels for nested duals. Note that since ImplicitAD is being used for all solves, there should be no need for more than 1 level.

Returns

  • solve_container_caching::NamedTuple : a Named Tuple containing:
    • solve_container_cache::PreallocationTools.DiffCache : the cache
    • solve_container_cache_dims::NamedTuple : a named tuple containing the dimensions used for reshaping the cache when needed.
source

You may run all these simultaneously using the initialize_all_caches function.

DuctAPE.initialize_all_cachesFunction
initialize_all_caches(solver_options, paneling_constants, airfoils)

Convenience function to initialize all caches before calling analysis.

Arguments

  • solver_options::SolverOptionsType : solver options used for cache allocation dispatch
  • paneling_constants::PanelingConstants : PanelingConstants object upon which all cache sizing depends
  • airfoils::Array{Airfoil} : Array of airfoil objects (from Rotor object)

Keyword Arguments

  • fd_chunk_size::Int=12 : chunk size to use for PreallocationTools caches. Note that the automated chunk size for DuctAPE will always be the ForwardDiff threshold of 12 due to the size of the system, so it will be best to leave this at the default unless further development allows for chunk size selection for individual solvers.
  • levels::Int=1 : levels for nested duals. Note that since ImplicitAD is being used for all solves, there should be no need for more than 1 level.

Returns

  • prepost_container_caching::NamedTuple : A named tuple containing the PreallocationTools DiffCache and a named tuple with relevant dimensions for accessing the cache.
  • solve_parameter_caching::NamedTuple : A named tuple containing the PreallocationTools DiffCache and a named tuple with relevant dimensions for accessing the cache.
  • solve_container_caching::NamedTuple : A named tuple containing the PreallocationTools DiffCache and a named tuple with relevant dimensions for accessing the cache.
source

As an example of how to run this function, we'll grab solver options and paneling constants from previous examples

using DuctAPE
using LineSearches

# - grab an object of SolverOptionsType defined in a previous example - #
aero_solver_options = DuctAPE.NLsolveOptions(;
    algorithm=:newton,
    atol=1e-10,
    iteration_limit=30,
    linesearch_method=LineSearches.BackTracking, #don't include parentheses on method handle
    linesearch_kwargs=(; order=3, maxstep=1e6),
)

# - grab an object of PanelingConstants type from the Getting Started tutorial - #
num_duct_inlet_panels = 30
num_center_body_inlet_panels = 30
num_panels = [30, 1, 30]
dte_minus_cbte = -1.0
num_wake_sheets = 11
wake_length = 0.8

# assemble paneling constants
paneling_constants = DuctAPE.PanelingConstants(
    num_duct_inlet_panels,
    num_center_body_inlet_panels,
    num_panels,
    dte_minus_cbte,
    num_wake_sheets,
    wake_length,
)

# - Airfoils are required for proper sizing of the caches - #
# DFDC-type airfoil object
afparams = DuctAPE.c4b.DFDCairfoil()

# specify the airfoil array
airfoils = [fill(afparams, 6)]

# - Initialize Caches - #
prepost_container_caching, solve_parameter_caching, solve_container_caching = DuctAPE.initialize_all_caches(
    aero_solver_options, paneling_constants, airfoils
)
((prepost_container_cache = PreallocationTools.DiffCache{Vector{Float64}, Vector{Float64}}([0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0  …  0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0  …  0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], Any[]), prepost_container_cache_dims = (rp_duct_coordinates = (index = 1:242, shape = (2, 121)), rp_center_body_coordinates = (index = 243:366, shape = (2, 62)), wake_grid = (index = 367:1730, shape = (2, 62, 11)), rotor_indices_in_wake = (index = 1731:1731, shape = (1,)), panels = (body_vortex_panels = (nnode = (index = 1732:1733, shape = (2,)), npanel = (index = 1734:1735, shape = (2,)), nbodies = (index = 1736:1736, shape = (1,)), totpanel = (index = 1737:1737, shape = (1,)), totnode = (index = 1738:1738, shape = (1,)), node = (index = 1739:2104, shape = (2, 183)), controlpoint = (index = 2105:2466, shape = (2, 181)), normal = (index = 2467:2828, shape = (2, 181)), tangent = (index = 2829:3190, shape = (2, 181)), nodemap = (index = 3191:3552, shape = (2, 181)), influence_length = (index = 3553:3733, shape = 181), endnodes = (index = 3734:3741, shape = (2, 2, 2)), tenode = (index = 3742:3749, shape = (2, 2, 2)), itcontrolpoint = (index = 3750:3753, shape = (2, 2)), itnormal = (index = 3754:3757, shape = (2, 2)), ittangent = (index = 3758:3761, shape = (2, 2)), tenormal = (index = 3762:3765, shape = (2, 2)), tendotn = (index = 3766:3769, shape = (2, 2)), tencrossn = (index = 3770:3773, shape = (2, 2)), endnodeidxs = (index = 3774:3777, shape = (2, 2)), endpanelidxs = (index = 3778:3781, shape = (2, 2)), teadjnodeidxs = (index = 3782:3785, shape = (2, 2)), teinfluence_length = (index = 3786:3787, shape = (2,)), prescribednodeidxs = (index = 3788:3789, shape = (2,))), rotor_source_panels = (nnode = (index = 3790:3790, shape = (1,)), npanel = (index = 3791:3791, shape = (1,)), nbodies = (index = 3792:3792, shape = (1,)), totpanel = (index = 3793:3793, shape = (1,)), totnode = (index = 3794:3794, shape = (1,)), node = (index = 3795:3816, shape = (2, 11)), controlpoint = (index = 3817:3836, shape = (2, 10)), normal = (index = 3837:3856, shape = (2, 10)), tangent = (index = 3857:3876, shape = (2, 10)), nodemap = (index = 3877:3896, shape = (2, 10)), influence_length = (index = 3897:3906, shape = 10), endnodes = (index = 3907:3910, shape = (1, 2, 2)), tenode = (index = 3911:3914, shape = (1, 2, 2)), itcontrolpoint = (index = 3915:3916, shape = (2, 1)), itnormal = (index = 3917:3918, shape = (2, 1)), ittangent = (index = 3919:3920, shape = (2, 1)), tenormal = (index = 3921:3922, shape = (2, 1)), tendotn = (index = 3923:3924, shape = (2, 1)), tencrossn = (index = 3925:3926, shape = (2, 1)), endnodeidxs = (index = 3927:3928, shape = (2, 1)), endpanelidxs = (index = 3929:3930, shape = (2, 1)), teadjnodeidxs = (index = 3931:3932, shape = (2, 1)), teinfluence_length = (index = 3933:3933, shape = (1,)), prescribednodeidxs = (index = 3934:3934, shape = (1,))), wake_vortex_panels = (nnode = (index = 3935:3945, shape = (11,)), npanel = (index = 3946:3956, shape = (11,)), nbodies = (index = 3957:3957, shape = (1,)), totpanel = (index = 3958:3958, shape = (1,)), totnode = (index = 3959:3959, shape = (1,)), node = (index = 3960:5323, shape = (2, 682)), controlpoint = (index = 5324:6665, shape = (2, 671)), normal = (index = 6666:8007, shape = (2, 671)), tangent = (index = 8008:9349, shape = (2, 671)), nodemap = (index = 9350:10691, shape = (2, 671)), influence_length = (index = 10692:11362, shape = 671), endnodes = (index = 11363:11406, shape = (11, 2, 2)), tenode = (index = 11407:11450, shape = (11, 2, 2)), itcontrolpoint = (index = 11451:11472, shape = (2, 11)), itnormal = (index = 11473:11494, shape = (2, 11)), ittangent = (index = 11495:11516, shape = (2, 11)), tenormal = (index = 11517:11538, shape = (2, 11)), tendotn = (index = 11539:11560, shape = (2, 11)), tencrossn = (index = 11561:11582, shape = (2, 11)), endnodeidxs = (index = 11583:11604, shape = (2, 11)), endpanelidxs = (index = 11605:11626, shape = (2, 11)), teadjnodeidxs = (index = 11627:11648, shape = (2, 11)), teinfluence_length = (index = 11649:11659, shape = (11,)), prescribednodeidxs = (index = 11660:11670, shape = (11,)))), ivb = (v_bb = (index = 11671:77916, shape = (181, 183, 2)), v_br = (index = 77917:81898, shape = (181, 11, 2)), v_bw = (index = 81899:328782, shape = (181, 682, 2))), AICn = (index = 328783:361905, shape = (181, 183)), AICpcp = (index = 361906:362271, shape = (2, 183)), vdnb = (index = 362272:362452, shape = (181,)), vdnpcp = (index = 362453:362454, shape = (2,)), rotor_inviscid_thrust = (index = 362455:362455, shape = (1,)), rotor_inviscid_thrust_dist = (index = 362469:362478, shape = (10, 1)), rotor_viscous_thrust = (index = 362456:362456, shape = (1,)), rotor_viscous_thrust_dist = (index = 362479:362488, shape = (10, 1)), rotor_thrust = (index = 362457:362457, shape = (1,)), rotor_inviscid_torque = (index = 362458:362458, shape = (1,)), rotor_inviscid_torque_dist = (index = 362489:362498, shape = (10, 1)), rotor_viscous_torque = (index = 362459:362459, shape = (1,)), rotor_viscous_torque_dist = (index = 362499:362508, shape = (10, 1)), rotor_torque = (index = 362460:362460, shape = (1,)), rotor_inviscid_power = (index = 362461:362461, shape = (1,)), rotor_inviscid_power_dist = (index = 362509:362518, shape = (10, 1)), rotor_viscous_power = (index = 362462:362462, shape = (1,)), rotor_viscous_power_dist = (index = 362519:362528, shape = (10, 1)), rotor_power = (index = 362463:362463, shape = (1,)), rotor_CT = (index = 362464:362464, shape = (1,)), rotor_CQ = (index = 362465:362465, shape = (1,)), rotor_CP = (index = 362466:362466, shape = (1,)), rotor_efficiency = (index = 362467:362467, shape = (1,)), induced_efficiency = (index = 362468:362468, shape = (1,)), blade_normal_force_per_unit_span = (index = 362529:362538, shape = (10, 1)), blade_tangential_force_per_unit_span = (index = 362539:362548, shape = (10, 1)), blade_loading_intermediate_containers = (cn = (index = 362549:362558, shape = (10, 1)), ct = (index = 362559:362568, shape = (10, 1)), cphi = (index = 362569:362578, shape = (10, 1)), sphi = (index = 362579:362588, shape = (10, 1))), zpts = (casing_zpts = (index = 365967:366026, shape = (60,)), nacelle_zpts = (index = 366267:366326, shape = (60,)), center_body_zpts = (index = 366569:366629, shape = (61,))), vtan_tuple = (Vtot_in = (index = 362589:362950, shape = (2, 181)), Vtot_out = (index = 362951:363312, shape = (2, 181)), Vtan_in = (index = 365123:365303, shape = (181,)), Vtan_out = (index = 365304:365484, shape = (181,)), Vtot_prejump = (index = 363313:363674, shape = (2, 181)), vtot_body = (index = 363675:364036, shape = (2, 181)), duct_jump = (index = 366752:366871, shape = (120,)), center_body_jump = (index = 366872:366932, shape = (61,)), body_jump_term = (index = 366933:367113, shape = (181,)), vtot_jump = (index = 364037:364398, shape = (2, 181)), vtot_wake = (index = 364399:364760, shape = (2, 181)), vtot_rotors = (index = 364761:365122, shape = (2, 181)), vtan_casing_in = (index = 365847:365906, shape = (60,)), vtan_casing_out = (index = 365907:365966, shape = (60,)), vtan_nacelle_in = (index = 366147:366206, shape = (60,)), vtan_nacelle_out = (index = 366207:366266, shape = (60,)), vtan_center_body_in = (index = 366447:366507, shape = (61,)), vtan_center_body_out = (index = 366508:366568, shape = (61,))), cp_tuple = (cp_in = (index = 365485:365665, shape = (181,)), cp_out = (index = 365666:365846, shape = (181,)), cp_casing_in = (index = 366027:366086, shape = (60,)), cp_casing_out = (index = 366087:366146, shape = (60,)), cp_nacelle_in = (index = 366327:366386, shape = (60,)), cp_nacelle_out = (index = 366387:366446, shape = (60,)), cp_center_body_in = (index = 366630:366690, shape = (61,)), cp_center_body_out = (index = 366691:366751, shape = (61,))), body_inviscid_thrust = (index = 367114:367115, shape = (2,)), body_viscous_drag = (index = 367116:367117, shape = (2,)), body_thrust = (index = 367118:367119, shape = (2,)), body_force_coefficient = (index = 367120:367121, shape = (2,)), total_thrust = (index = 367122:367122, shape = (1,)), total_torque = (index = 367123:367123, shape = (1,)), total_power = (index = 367124:367124, shape = (1,)), total_CT = (index = 367125:367125, shape = (1,)), total_CQ = (index = 367126:367126, shape = (1,)), total_CP = (index = 367127:367127, shape = (1,)), total_efficiency = (index = 367128:367128, shape = (1,)), ideal_efficiency = (index = 367129:367129, shape = (1,)))), (solve_parameter_cache = PreallocationTools.DiffCache{Vector{Float64}, Vector{Float64}}([0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0  …  0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0  …  0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], Any[]), solve_parameter_cache_dims = (state_dims = (vz_rotor = (index = 1:10, shape = (10, 1)), vtheta_rotor = (index = 11:20, shape = (10, 1)), Cm_wake = (index = 21:691, shape = (671,))), vz_rotor = (index = 1:10, shape = (10, 1)), vtheta_rotor = (index = 11:20, shape = (10, 1)), Cm_wake = (index = 21:691, shape = (671,)), operating_point = (Vinf = (index = 692:692, shape = (1,)), Minf = (index = 693:693, shape = (1,)), rhoinf = (index = 694:694, shape = (1,)), muinf = (index = 695:695, shape = (1,)), asound = (index = 696:696, shape = (1,)), Ptot = (index = 697:697, shape = (1,)), Ttot = (index = 698:698, shape = (1,)), Omega = (index = 699:699, shape = (1,))), ivr = (v_rb = (index = 700:4359, shape = (10, 183, 2)), v_rr = (index = 4360:4579, shape = (10, 11, 2)), v_rw = (index = 4580:18219, shape = (10, 682, 2))), ivw = (v_wb = (index = 18220:263805, shape = (671, 183, 2)), v_wr = (index = 263806:278567, shape = (671, 11, 2)), v_ww = (index = 278568:1193811, shape = (671, 682, 2))), linsys = (A_bb = (index = 1193812:1228036, shape = (185, 185)), b_bf = (index = 1228037:1228221, shape = (185,)), A_bw = (index = 1228222:1351663, shape = (181, 682)), A_pw = (index = 1351664:1353027, shape = (2, 682)), A_br = (index = 1353028:1355018, shape = (181, 11)), A_pr = (index = 1355019:1355040, shape = (2, 11))), blade_elements = (B = (index = 1355041:1355041, shape = (1,)), is_stator = (index = 1355044:1355044, shape = (1,)), chords = (index = 1355045:1355054, shape = (10, 1)), twists = (index = 1355055:1355064, shape = (10, 1)), stagger = (index = 1355065:1355074, shape = (10, 1)), solidity = (index = 1355075:1355084, shape = (10, 1)), rotor_panel_centers = (index = 1355085:1355094, shape = (10, 1)), inner_fraction = (index = 1355095:1355104, shape = (10, 1)), Rtip = (index = 1355042:1355042, shape = (1,)), Rhub = (index = 1355043:1355043, shape = (1,)), inner_airfoil = (airfoil_cache_dims = @NamedTuple{alpha0::@NamedTuple{index::UnitRange{Int64}, shape::Tuple{Int64}}, clmax::@NamedTuple{index::UnitRange{Int64}, shape::Tuple{Int64}}, clmin::@NamedTuple{index::UnitRange{Int64}, shape::Tuple{Int64}}, dclda::@NamedTuple{index::UnitRange{Int64}, shape::Tuple{Int64}}, dclda_stall::@NamedTuple{index::UnitRange{Int64}, shape::Tuple{Int64}}, dcl_stall::@NamedTuple{index::UnitRange{Int64}, shape::Tuple{Int64}}, cdmin::@NamedTuple{index::UnitRange{Int64}, shape::Tuple{Int64}}, clcdmin::@NamedTuple{index::UnitRange{Int64}, shape::Tuple{Int64}}, dcddcl2::@NamedTuple{index::UnitRange{Int64}, shape::Tuple{Int64}}, cmcon::@NamedTuple{index::UnitRange{Int64}, shape::Tuple{Int64}}, Re_ref::@NamedTuple{index::UnitRange{Int64}, shape::Tuple{Int64}}, Re_exp::@NamedTuple{index::UnitRange{Int64}, shape::Tuple{Int64}}, mcrit::@NamedTuple{index::UnitRange{Int64}, shape::Tuple{Int64}}, correct_for_mach::@NamedTuple{index::UnitRange{Int64}, shape::Tuple{Int64}}, correct_for_cascade::@NamedTuple{index::UnitRange{Int64}, shape::Tuple{Int64}}, correct_for_reynolds::@NamedTuple{index::UnitRange{Int64}, shape::Tuple{Int64}}, correct_for_transonic::@NamedTuple{index::UnitRange{Int64}, shape::Tuple{Int64}}}[(alpha0 = (index = 1355105:1355105, shape = (1,)), clmax = (index = 1355106:1355106, shape = (1,)), clmin = (index = 1355107:1355107, shape = (1,)), dclda = (index = 1355108:1355108, shape = (1,)), dclda_stall = (index = 1355109:1355109, shape = (1,)), dcl_stall = (index = 1355110:1355110, shape = (1,)), cdmin = (index = 1355111:1355111, shape = (1,)), clcdmin = (index = 1355112:1355112, shape = (1,)), dcddcl2 = (index = 1355113:1355113, shape = (1,)), cmcon = (index = 1355114:1355114, shape = (1,)), Re_ref = (index = 1355115:1355115, shape = (1,)), Re_exp = (index = 1355116:1355116, shape = (1,)), mcrit = (index = 1355117:1355117, shape = (1,)), correct_for_mach = (index = 1355118:1355118, shape = (1,)), correct_for_cascade = (index = 1355119:1355119, shape = (1,)), correct_for_reynolds = (index = 1355120:1355120, shape = (1,)), correct_for_transonic = (index = 1355121:1355121, shape = (1,))); (alpha0 = (index = 1355122:1355122, shape = (1,)), clmax = (index = 1355123:1355123, shape = (1,)), clmin = (index = 1355124:1355124, shape = (1,)), dclda = (index = 1355125:1355125, shape = (1,)), dclda_stall = (index = 1355126:1355126, shape = (1,)), dcl_stall = (index = 1355127:1355127, shape = (1,)), cdmin = (index = 1355128:1355128, shape = (1,)), clcdmin = (index = 1355129:1355129, shape = (1,)), dcddcl2 = (index = 1355130:1355130, shape = (1,)), cmcon = (index = 1355131:1355131, shape = (1,)), Re_ref = (index = 1355132:1355132, shape = (1,)), Re_exp = (index = 1355133:1355133, shape = (1,)), mcrit = (index = 1355134:1355134, shape = (1,)), correct_for_mach = (index = 1355135:1355135, shape = (1,)), correct_for_cascade = (index = 1355136:1355136, shape = (1,)), correct_for_reynolds = (index = 1355137:1355137, shape = (1,)), correct_for_transonic = (index = 1355138:1355138, shape = (1,))); … ; (alpha0 = (index = 1355241:1355241, shape = (1,)), clmax = (index = 1355242:1355242, shape = (1,)), clmin = (index = 1355243:1355243, shape = (1,)), dclda = (index = 1355244:1355244, shape = (1,)), dclda_stall = (index = 1355245:1355245, shape = (1,)), dcl_stall = (index = 1355246:1355246, shape = (1,)), cdmin = (index = 1355247:1355247, shape = (1,)), clcdmin = (index = 1355248:1355248, shape = (1,)), dcddcl2 = (index = 1355249:1355249, shape = (1,)), cmcon = (index = 1355250:1355250, shape = (1,)), Re_ref = (index = 1355251:1355251, shape = (1,)), Re_exp = (index = 1355252:1355252, shape = (1,)), mcrit = (index = 1355253:1355253, shape = (1,)), correct_for_mach = (index = 1355254:1355254, shape = (1,)), correct_for_cascade = (index = 1355255:1355255, shape = (1,)), correct_for_reynolds = (index = 1355256:1355256, shape = (1,)), correct_for_transonic = (index = 1355257:1355257, shape = (1,))); (alpha0 = (index = 1355258:1355258, shape = (1,)), clmax = (index = 1355259:1355259, shape = (1,)), clmin = (index = 1355260:1355260, shape = (1,)), dclda = (index = 1355261:1355261, shape = (1,)), dclda_stall = (index = 1355262:1355262, shape = (1,)), dcl_stall = (index = 1355263:1355263, shape = (1,)), cdmin = (index = 1355264:1355264, shape = (1,)), clcdmin = (index = 1355265:1355265, shape = (1,)), dcddcl2 = (index = 1355266:1355266, shape = (1,)), cmcon = (index = 1355267:1355267, shape = (1,)), Re_ref = (index = 1355268:1355268, shape = (1,)), Re_exp = (index = 1355269:1355269, shape = (1,)), mcrit = (index = 1355270:1355270, shape = (1,)), correct_for_mach = (index = 1355271:1355271, shape = (1,)), correct_for_cascade = (index = 1355272:1355272, shape = (1,)), correct_for_reynolds = (index = 1355273:1355273, shape = (1,)), correct_for_transonic = (index = 1355274:1355274, shape = (1,)));;], airfoil_constructors = UnionAll[DuctAPE.C4Blade.DFDCairfoil; DuctAPE.C4Blade.DFDCairfoil; … ; DuctAPE.C4Blade.DFDCairfoil; DuctAPE.C4Blade.DFDCairfoil;;]), outer_airfoil = (airfoil_cache_dims = @NamedTuple{alpha0::@NamedTuple{index::UnitRange{Int64}, shape::Tuple{Int64}}, clmax::@NamedTuple{index::UnitRange{Int64}, shape::Tuple{Int64}}, clmin::@NamedTuple{index::UnitRange{Int64}, shape::Tuple{Int64}}, dclda::@NamedTuple{index::UnitRange{Int64}, shape::Tuple{Int64}}, dclda_stall::@NamedTuple{index::UnitRange{Int64}, shape::Tuple{Int64}}, dcl_stall::@NamedTuple{index::UnitRange{Int64}, shape::Tuple{Int64}}, cdmin::@NamedTuple{index::UnitRange{Int64}, shape::Tuple{Int64}}, clcdmin::@NamedTuple{index::UnitRange{Int64}, shape::Tuple{Int64}}, dcddcl2::@NamedTuple{index::UnitRange{Int64}, shape::Tuple{Int64}}, cmcon::@NamedTuple{index::UnitRange{Int64}, shape::Tuple{Int64}}, Re_ref::@NamedTuple{index::UnitRange{Int64}, shape::Tuple{Int64}}, Re_exp::@NamedTuple{index::UnitRange{Int64}, shape::Tuple{Int64}}, mcrit::@NamedTuple{index::UnitRange{Int64}, shape::Tuple{Int64}}, correct_for_mach::@NamedTuple{index::UnitRange{Int64}, shape::Tuple{Int64}}, correct_for_cascade::@NamedTuple{index::UnitRange{Int64}, shape::Tuple{Int64}}, correct_for_reynolds::@NamedTuple{index::UnitRange{Int64}, shape::Tuple{Int64}}, correct_for_transonic::@NamedTuple{index::UnitRange{Int64}, shape::Tuple{Int64}}}[(alpha0 = (index = 1355275:1355275, shape = (1,)), clmax = (index = 1355276:1355276, shape = (1,)), clmin = (index = 1355277:1355277, shape = (1,)), dclda = (index = 1355278:1355278, shape = (1,)), dclda_stall = (index = 1355279:1355279, shape = (1,)), dcl_stall = (index = 1355280:1355280, shape = (1,)), cdmin = (index = 1355281:1355281, shape = (1,)), clcdmin = (index = 1355282:1355282, shape = (1,)), dcddcl2 = (index = 1355283:1355283, shape = (1,)), cmcon = (index = 1355284:1355284, shape = (1,)), Re_ref = (index = 1355285:1355285, shape = (1,)), Re_exp = (index = 1355286:1355286, shape = (1,)), mcrit = (index = 1355287:1355287, shape = (1,)), correct_for_mach = (index = 1355288:1355288, shape = (1,)), correct_for_cascade = (index = 1355289:1355289, shape = (1,)), correct_for_reynolds = (index = 1355290:1355290, shape = (1,)), correct_for_transonic = (index = 1355291:1355291, shape = (1,))); (alpha0 = (index = 1355292:1355292, shape = (1,)), clmax = (index = 1355293:1355293, shape = (1,)), clmin = (index = 1355294:1355294, shape = (1,)), dclda = (index = 1355295:1355295, shape = (1,)), dclda_stall = (index = 1355296:1355296, shape = (1,)), dcl_stall = (index = 1355297:1355297, shape = (1,)), cdmin = (index = 1355298:1355298, shape = (1,)), clcdmin = (index = 1355299:1355299, shape = (1,)), dcddcl2 = (index = 1355300:1355300, shape = (1,)), cmcon = (index = 1355301:1355301, shape = (1,)), Re_ref = (index = 1355302:1355302, shape = (1,)), Re_exp = (index = 1355303:1355303, shape = (1,)), mcrit = (index = 1355304:1355304, shape = (1,)), correct_for_mach = (index = 1355305:1355305, shape = (1,)), correct_for_cascade = (index = 1355306:1355306, shape = (1,)), correct_for_reynolds = (index = 1355307:1355307, shape = (1,)), correct_for_transonic = (index = 1355308:1355308, shape = (1,))); … ; (alpha0 = (index = 1355411:1355411, shape = (1,)), clmax = (index = 1355412:1355412, shape = (1,)), clmin = (index = 1355413:1355413, shape = (1,)), dclda = (index = 1355414:1355414, shape = (1,)), dclda_stall = (index = 1355415:1355415, shape = (1,)), dcl_stall = (index = 1355416:1355416, shape = (1,)), cdmin = (index = 1355417:1355417, shape = (1,)), clcdmin = (index = 1355418:1355418, shape = (1,)), dcddcl2 = (index = 1355419:1355419, shape = (1,)), cmcon = (index = 1355420:1355420, shape = (1,)), Re_ref = (index = 1355421:1355421, shape = (1,)), Re_exp = (index = 1355422:1355422, shape = (1,)), mcrit = (index = 1355423:1355423, shape = (1,)), correct_for_mach = (index = 1355424:1355424, shape = (1,)), correct_for_cascade = (index = 1355425:1355425, shape = (1,)), correct_for_reynolds = (index = 1355426:1355426, shape = (1,)), correct_for_transonic = (index = 1355427:1355427, shape = (1,))); (alpha0 = (index = 1355428:1355428, shape = (1,)), clmax = (index = 1355429:1355429, shape = (1,)), clmin = (index = 1355430:1355430, shape = (1,)), dclda = (index = 1355431:1355431, shape = (1,)), dclda_stall = (index = 1355432:1355432, shape = (1,)), dcl_stall = (index = 1355433:1355433, shape = (1,)), cdmin = (index = 1355434:1355434, shape = (1,)), clcdmin = (index = 1355435:1355435, shape = (1,)), dcddcl2 = (index = 1355436:1355436, shape = (1,)), cmcon = (index = 1355437:1355437, shape = (1,)), Re_ref = (index = 1355438:1355438, shape = (1,)), Re_exp = (index = 1355439:1355439, shape = (1,)), mcrit = (index = 1355440:1355440, shape = (1,)), correct_for_mach = (index = 1355441:1355441, shape = (1,)), correct_for_cascade = (index = 1355442:1355442, shape = (1,)), correct_for_reynolds = (index = 1355443:1355443, shape = (1,)), correct_for_transonic = (index = 1355444:1355444, shape = (1,)));;], airfoil_constructors = UnionAll[DuctAPE.C4Blade.DFDCairfoil; DuctAPE.C4Blade.DFDCairfoil; … ; DuctAPE.C4Blade.DFDCairfoil; DuctAPE.C4Blade.DFDCairfoil;;])), wakeK = (index = 1355445:1356126, shape = (682,)))), (solve_container_cache = PreallocationTools.DiffCache{Vector{Float64}, Vector{Float64}}([0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0  …  0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0  …  0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], Any[]), solve_container_cache_dims = (gamb = (index = 1:185, shape = (185,)), rhs = (index = 186:370, shape = (185,)), Gamr = (index = 371:380, shape = (10, 1)), sigr = (index = 381:391, shape = (11, 1)), gamw = (index = 392:1073, shape = (682,)), beta1 = (index = 1074:1083, shape = (10, 1)), alpha = (index = 1134:1143, shape = (10, 1)), reynolds = (index = 1144:1153, shape = (10, 1)), mach = (index = 1154:1163, shape = (10, 1)), Cz_rotor = (index = 1084:1093, shape = (10, 1)), Ctheta_rotor = (index = 1094:1103, shape = (10, 1)), Cmag_rotor = (index = 1104:1113, shape = (10, 1)), cl = (index = 1114:1123, shape = (10, 1)), cd = (index = 1124:1133, shape = (10, 1)), vz_wake = (index = 1206:1876, shape = (671,)), vr_wake = (index = 1877:2547, shape = (671,)), vz_est = (index = 2548:2557, shape = (10, 1)), vtheta_est = (index = 2558:2567, shape = (10, 1)), Cm_est = (index = 2568:3238, shape = (671,)), Cm_avg = (index = 3239:3920, shape = (682,)), Gamma_tilde = (index = 1164:1173, shape = (10, 1)), H_tilde = (index = 1174:1183, shape = (10, 1)), deltaGamma2 = (index = 1184:1194, shape = (11, 1)), deltaH = (index = 1195:1205, shape = (11, 1)))))

How to pass the caches into an analysis

The precompiled caches can be passed in via keyword arguments to the analysis functions. If they are not, they are generated as the first step in the analysis.