|
1 | 1 | function _ThermalDiffusionLithiumParameters( |
2 | | - config::AbstractDict; |
3 | | - T::Type = Float32, |
4 | | - temperature_ranges::AbstractVector{<:AbstractDict} = config["annealing_temperature_ranges"] , |
5 | | - a::Union{Real, String} = config["experimental_parameters"]["a"], |
6 | | - b::Union{Real, String} = config["experimental_parameters"]["b"], |
7 | | - input_units::Union{Missing, NamedTuple} = missing |
8 | | -) |
| 2 | + config::AbstractDict; |
| 3 | + T::Type = Float32, |
| 4 | + temperature_ranges::AbstractVector{<:AbstractDict} = config["annealing_temperature_ranges"] , |
| 5 | + a::Union{Real, String} = config["experimental_parameters"]["a"], |
| 6 | + b::Union{Real, String} = config["experimental_parameters"]["b"], |
| 7 | + input_units::Union{Missing, NamedTuple} = missing |
| 8 | + ) |
9 | 9 |
|
10 | 10 | temperature_unit = !ismissing(input_units) ? input_units.temperature : internal_temperature_unit |
11 | 11 | diffusivity_unit = !ismissing(input_units) ? |
12 | 12 | input_units.length^2 / internal_time_unit : internal_length_unit^2/internal_time_unit |
13 | 13 |
|
14 | | -temp_ranges_parameters = Vector{LithiumDiffusionParameters{T}}() |
15 | | - |
16 | | -for r in temperature_ranges |
17 | | - push!(temp_ranges_parameters, |
| 14 | + diffusion_params = Tuple( |
18 | 15 | LithiumDiffusionParameters{T}( |
19 | 16 | _parse_value(T, r["T_min"], temperature_unit), |
20 | 17 | _parse_value(T, r["T_max"], temperature_unit), |
21 | 18 | _parse_value(T, r["D0"], diffusivity_unit), |
22 | | - _parse_value(T, r["H"], u"cal") |
| 19 | + _parse_value(T, r["H"], u"cal") / ustrip(Unitful.NoUnits, one(T) * u"cal" / internal_energy_unit) # convert to cal internally |
23 | 20 | ) |
| 21 | + for r in temperature_ranges |
24 | 22 | ) |
25 | | -end |
26 | 23 |
|
27 | | -for i in 1:length(temp_ranges_parameters) |
28 | | - if(temp_ranges_parameters[i].T_max < temp_ranges_parameters[i].T_min) |
29 | | - throw(ConfigFileError("Invalid annealing temperature range $i: T_max must be ≥ T_min.")) |
30 | | - end |
31 | | - if(i>1 && temp_ranges_parameters[i-1].T_max != temp_ranges_parameters[i].T_min) |
32 | | - throw(ConfigFileError("Annealing temperature ranges must be contiguous and increasing: range $i-1 ends at a different temperature than range $i starts.")) |
| 24 | + for i in eachindex(diffusion_params) |
| 25 | + if(diffusion_params[i].T_max < diffusion_params[i].T_min) |
| 26 | + throw(ConfigFileError("Invalid annealing temperature range $i: T_max must be ≥ T_min.")) |
| 27 | + end |
| 28 | + if(i>1 && diffusion_params[i-1].T_max != diffusion_params[i].T_min) |
| 29 | + throw(ConfigFileError("Annealing temperature ranges must be contiguous and increasing: range $(i-1) ends at a different temperature than range $i starts.")) |
| 30 | + end |
33 | 31 | end |
34 | | -end |
35 | 32 |
|
36 | | -diffusion_params = Tuple(temp_ranges_parameters) |
| 33 | + saturation_params = LithiumSaturationParameters{T}(_parse_value(T, a, Unitful.NoUnits), _parse_value(T, b, Unitful.NoUnits)) |
37 | 34 |
|
38 | | -saturation_params = LithiumSaturationParameters{T}( |
39 | | - T(a), |
40 | | - T(b) |
41 | | -) |
42 | | - |
43 | | -return ThermalDiffusionLithiumDensityParameters( |
44 | | - diffusion_params, |
45 | | - saturation_params |
46 | | -) |
| 35 | + return ThermalDiffusionLithiumDensityParameters( |
| 36 | + diffusion_params, |
| 37 | + saturation_params |
| 38 | + ) |
47 | 39 | end |
48 | 40 |
|
49 | 41 | const minimum_num_of_temp_ranges = 2 |
|
0 commit comments