TrainRun.jl/src/TrainRuns.jl

63 lines
1.9 KiB
Julia
Raw Normal View History

#!/usr/bin/env julia
# -*- coding: UTF-8 -*-
2022-04-28 17:02:40 +02:00
# __author__ = "Max Kannenberg, Martin Scheidt"
# __copyright__ = "2020-2022"
# __license__ = "ISC"
2022-04-28 17:02:40 +02:00
__precompile__(true)
2022-05-04 16:53:58 +02:00
module TrainRuns
2021-10-13 16:49:42 +02:00
## loading standard library packages
2022-05-12 16:32:15 +02:00
using UUIDs, Dates, Statistics
2022-04-28 17:02:40 +02:00
## loading external packages
2022-05-12 16:50:27 +02:00
using YAML, JSONSchema, DataFrames
export
## Interface
2022-05-12 16:50:27 +02:00
trainrun, Train, Path, Settings
2022-05-12 16:32:15 +02:00
## global variables
global g = 9.80665 # acceleration due to gravity (in m/s^2)
global μ = 0.2 # friction as constant, TODO: implement as function
2022-05-12 16:32:15 +02:00
global Δv_air = 15.0/3.6 # coefficient for velocitiy difference between train and outdoor air (in m/s)
2022-04-28 17:02:40 +02:00
## include package files
include("types.jl")
2022-05-08 21:43:21 +02:00
include("constructors.jl")
2022-04-28 17:02:40 +02:00
include("formulary.jl")
2022-05-12 16:32:15 +02:00
include("calc.jl")
2022-04-28 17:02:40 +02:00
include("behavior.jl")
include("output.jl")
## main function
"""
2022-05-12 16:32:15 +02:00
trainrun(train::Train, path::Path, settings::Settings)
Calculate the running time of a `train` on a `path`.
The `settings` provides the choice of models for the calculation.
`settings` can be omitted. If so, a default is used.
The running time will be return in seconds.
# Examples
```julia-repl
2022-06-09 15:10:59 +02:00
julia> trainrun(train, path)[end,:t]
xxx.xx # in seconds
```
"""
2022-05-12 16:32:15 +02:00
function trainrun(train::Train, path::Path, settings=Settings()::Settings)
# prepare the input data
(characteristicSections, pointsOfInterest) = determineCharacteristics(path, train, settings)
# TODO settings.outputDetail == :verbose && println("The characteristics haven been determined.")
# calculate the train run with the minimum running time
drivingCourse = calculateMinimumRunningTime(characteristicSections, settings, train)
# TODO settings.outputDetail == :verbose && println("The driving course for the shortest running time has been calculated.")
# accumulate data and create an output dictionary
output = createOutput(settings, drivingCourse, pointsOfInterest)
return output
end # function trainrun
2021-10-13 16:49:42 +02:00
2022-05-04 16:53:58 +02:00
end # module TrainRuns