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_cache
— Functionallocate_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 cacheprepost_container_cache_dims::NamedTuple
: a named tuple containing the dimensions used for reshaping the cache when needed.
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_cache
— Functionallocate_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 dispatchpaneling_constants::PanelingConstants
: a PanlingConstants object used for sizingairfoils::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 dispatchproblem_dimensions::ProblemDimensions
: a ProblemDimensions object used for sizingairfoils::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 cachesolve_parameter_cache_dims::NamedTuple
: a named tuple containing the dimensions used for reshaping the cache when needed.
The final precompileable cache is for intermediate calculations within the solve and can be preallocated using allocate_solve_container_cache
DuctAPE.allocate_solve_container_cache
— Functionallocate_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 cachesolve_container_cache_dims::NamedTuple
: a named tuple containing the dimensions used for reshaping the cache when needed.
You may run all these simultaneously using the initialize_all_caches
function.
DuctAPE.initialize_all_caches
— Functioninitialize_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 dispatchpaneling_constants::PanelingConstants
: PanelingConstants object upon which all cache sizing dependsairfoils::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.
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.