From 2aff6e44676fc7a10125d41f08cd1a8b8416a9ab Mon Sep 17 00:00:00 2001 From: Uwe Fechner Date: Wed, 9 Jul 2025 06:55:57 +0200 Subject: [PATCH 01/15] Add mwe_28.jl --- mwes/mwe_28.jl | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 mwes/mwe_28.jl diff --git a/mwes/mwe_28.jl b/mwes/mwe_28.jl new file mode 100644 index 000000000..239c43a6f --- /dev/null +++ b/mwes/mwe_28.jl @@ -0,0 +1,7 @@ +using KiteModels, Test + +set = load_settings("system.yaml") +kcu::KCU = KCU(set) +kps3::KPS3 = KPS3(kcu) + +@test kps3 isa AbstractKiteModel From 71257633eaaee3e08c2dbc23af60b59467cc0b26 Mon Sep 17 00:00:00 2001 From: Uwe Fechner Date: Wed, 9 Jul 2025 07:12:41 +0200 Subject: [PATCH 02/15] Improve test --- mwes/mwe_28.jl | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/mwes/mwe_28.jl b/mwes/mwe_28.jl index 239c43a6f..59b41209e 100644 --- a/mwes/mwe_28.jl +++ b/mwes/mwe_28.jl @@ -1,7 +1,12 @@ -using KiteModels, Test +using KiteModels, KiteUtils, Test set = load_settings("system.yaml") kcu::KCU = KCU(set) kps3::KPS3 = KPS3(kcu) -@test kps3 isa AbstractKiteModel +@testset "KPS3 constructor interface" begin + @test kps3 isa KiteUtils.AbstractKiteModel + @test kps3.set isa KiteUtils.Settings + # kps3.integrator +end +nothing From 624a2c0bab0ef3bcd02983af7de4b90a1683c7c8 Mon Sep 17 00:00:00 2001 From: Uwe Fechner Date: Wed, 9 Jul 2025 07:13:05 +0200 Subject: [PATCH 03/15] Remove AbstractKiteModel --- src/KiteModels.jl | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/KiteModels.jl b/src/KiteModels.jl index 92fb29d3a..b3f2a4528 100644 --- a/src/KiteModels.jl +++ b/src/KiteModels.jl @@ -81,14 +81,6 @@ Basic 3-dimensional vector, stack allocated, immutable. """ const SVec3 = SVector{3, SimFloat} -""" - abstract type AbstractKiteModel - -All kite models must inherit from this type. All methods that are defined on this type must work -with all kite models. All exported methods must work on this type. -""" -abstract type AbstractKiteModel end - """ const AKM = AbstractKiteModel From a9e8dd0f358ffc8958d0bed9a28ee82e21f2edfd Mon Sep 17 00:00:00 2001 From: Uwe Fechner Date: Wed, 9 Jul 2025 07:25:59 +0200 Subject: [PATCH 04/15] Add field integrator --- src/KPS3.jl | 2 ++ src/KPS4.jl | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/KPS3.jl b/src/KPS3.jl index 63d3c5fdb..c01b4d77a 100644 --- a/src/KPS3.jl +++ b/src/KPS3.jl @@ -35,6 +35,8 @@ $(TYPEDFIELDS) am::AtmosphericModel = AtmosphericModel() "Reference to winch model as implemented in the package WinchModels" wm::Union{AbstractWinchModel, Nothing} = nothing + "Integrator, storing the current state" + integrator::Union{OrdinaryDiffEqCore.ODEIntegrator, Nothing} = nothing "Iterations, number of calls to the function residual!" iter:: Int64 = 0 "Function for calculation the lift coefficent, using a spline based on the provided value pairs." diff --git a/src/KPS4.jl b/src/KPS4.jl index c5dee9c65..0ba045201 100644 --- a/src/KPS4.jl +++ b/src/KPS4.jl @@ -68,6 +68,8 @@ $(TYPEDFIELDS) am::AtmosphericModel = AtmosphericModel() "Reference to winch model as implemented in the package WinchModels" wm::AbstractWinchModel + "Integrator, storing the current state" + integrator::Union{OrdinaryDiffEqCore.ODEIntegrator, Nothing} = nothing "Iterations, number of calls to the function residual!" iter:: Int64 = 0 "Function for calculation the lift coefficient, using a spline based on the provided value pairs." From cb4a0d2713fb6b6767d4e3dac4bf1deb8d37e6ba Mon Sep 17 00:00:00 2001 From: Uwe Fechner Date: Wed, 9 Jul 2025 07:26:09 +0200 Subject: [PATCH 05/15] Add tests --- mwes/mwe_28.jl | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/mwes/mwe_28.jl b/mwes/mwe_28.jl index 59b41209e..0e2573655 100644 --- a/mwes/mwe_28.jl +++ b/mwes/mwe_28.jl @@ -3,10 +3,16 @@ using KiteModels, KiteUtils, Test set = load_settings("system.yaml") kcu::KCU = KCU(set) kps3::KPS3 = KPS3(kcu) +kps4::KPS4 = KPS4(kcu) @testset "KPS3 constructor interface" begin @test kps3 isa KiteUtils.AbstractKiteModel @test kps3.set isa KiteUtils.Settings - # kps3.integrator + @test isnothing(kps3.integrator) +end +@testset "KPS4 constructor interface" begin + @test kps4 isa KiteUtils.AbstractKiteModel + @test kps4.set isa KiteUtils.Settings + @test isnothing(kps4.integrator) end nothing From 1984d06be7fe080df33097ad69dbd2786e428e77 Mon Sep 17 00:00:00 2001 From: Uwe Fechner Date: Wed, 9 Jul 2025 07:32:42 +0200 Subject: [PATCH 06/15] Update tests --- mwes/mwe_28.jl | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/mwes/mwe_28.jl b/mwes/mwe_28.jl index 0e2573655..cd754ce38 100644 --- a/mwes/mwe_28.jl +++ b/mwes/mwe_28.jl @@ -1,18 +1,18 @@ using KiteModels, KiteUtils, Test set = load_settings("system.yaml") -kcu::KCU = KCU(set) -kps3::KPS3 = KPS3(kcu) -kps4::KPS4 = KPS4(kcu) +kps3::KPS3 = KPS3(set) +# kps4::KPS4 = KPS4(set) +# saw::SymbolicAWEModel = @testset "KPS3 constructor interface" begin @test kps3 isa KiteUtils.AbstractKiteModel @test kps3.set isa KiteUtils.Settings @test isnothing(kps3.integrator) end -@testset "KPS4 constructor interface" begin - @test kps4 isa KiteUtils.AbstractKiteModel - @test kps4.set isa KiteUtils.Settings - @test isnothing(kps4.integrator) -end +# @testset "KPS4 constructor interface" begin +# @test kps4 isa KiteUtils.AbstractKiteModel +# @test kps4.set isa KiteUtils.Settings +# @test isnothing(kps4.integrator) +# end nothing From dba5f5d2a8d88928818132c7a0c4b0ac2f40bbb2 Mon Sep 17 00:00:00 2001 From: Uwe Fechner Date: Wed, 9 Jul 2025 07:38:08 +0200 Subject: [PATCH 07/15] Add new constructors --- mwes/mwe_28.jl | 12 ++++++------ src/KPS3.jl | 4 ++++ src/KPS4.jl | 4 ++++ 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/mwes/mwe_28.jl b/mwes/mwe_28.jl index cd754ce38..b59d85455 100644 --- a/mwes/mwe_28.jl +++ b/mwes/mwe_28.jl @@ -2,7 +2,7 @@ using KiteModels, KiteUtils, Test set = load_settings("system.yaml") kps3::KPS3 = KPS3(set) -# kps4::KPS4 = KPS4(set) +kps4::KPS4 = KPS4(set) # saw::SymbolicAWEModel = @testset "KPS3 constructor interface" begin @@ -10,9 +10,9 @@ kps3::KPS3 = KPS3(set) @test kps3.set isa KiteUtils.Settings @test isnothing(kps3.integrator) end -# @testset "KPS4 constructor interface" begin -# @test kps4 isa KiteUtils.AbstractKiteModel -# @test kps4.set isa KiteUtils.Settings -# @test isnothing(kps4.integrator) -# end +@testset "KPS4 constructor interface" begin + @test kps4 isa KiteUtils.AbstractKiteModel + @test kps4.set isa KiteUtils.Settings + @test isnothing(kps4.integrator) +end nothing diff --git a/src/KPS3.jl b/src/KPS3.jl index c01b4d77a..4abe7c941 100644 --- a/src/KPS3.jl +++ b/src/KPS3.jl @@ -190,6 +190,10 @@ function KPS3(kcu::KCU) clear!(s) return s end +function KPS3(set::Settings) + kcu = KCU(set) + KPS3(kcu) +end """ calc_drag(s::KPS3, v_segment, unit_vector, rho, last_tether_drag, v_app_perp) diff --git a/src/KPS4.jl b/src/KPS4.jl index 0ba045201..88df56033 100644 --- a/src/KPS4.jl +++ b/src/KPS4.jl @@ -235,6 +235,10 @@ function KPS4(kcu::KCU) clear!(s) return s end +function KPS4(set::Settings) + kcu = KCU(set) + KPS4(kcu) +end """ calc_particle_forces!(s::KPS4, pos1, pos2, vel1, vel2, spring, segments, d_tether, rho, i) From fca348db414a72ba6661f1ee22138a104e4fdc65 Mon Sep 17 00:00:00 2001 From: Uwe Fechner Date: Wed, 9 Jul 2025 07:41:16 +0200 Subject: [PATCH 08/15] Add saw tests --- mwes/mwe_28.jl | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/mwes/mwe_28.jl b/mwes/mwe_28.jl index b59d85455..7ed6f084f 100644 --- a/mwes/mwe_28.jl +++ b/mwes/mwe_28.jl @@ -3,7 +3,8 @@ using KiteModels, KiteUtils, Test set = load_settings("system.yaml") kps3::KPS3 = KPS3(set) kps4::KPS4 = KPS4(set) -# saw::SymbolicAWEModel = +set = load_settings("system_ram.yaml") +saw::SymbolicAWEModel = SymbolicAWEModel(set) @testset "KPS3 constructor interface" begin @test kps3 isa KiteUtils.AbstractKiteModel @@ -15,4 +16,9 @@ end @test kps4.set isa KiteUtils.Settings @test isnothing(kps4.integrator) end +@testset "SymbolicAWEModel constructor interface" begin + @test saw isa KiteUtils.AbstractKiteModel + @test saw.set isa KiteUtils.Settings + @test isnothing(saw.integrator) +end nothing From 93411dd4dea5ee42963aef924099e51e10735d94 Mon Sep 17 00:00:00 2001 From: Uwe Fechner Date: Wed, 9 Jul 2025 07:44:46 +0200 Subject: [PATCH 09/15] More tests --- mwes/mwe_28.jl | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mwes/mwe_28.jl b/mwes/mwe_28.jl index 7ed6f084f..e9f19dc74 100644 --- a/mwes/mwe_28.jl +++ b/mwes/mwe_28.jl @@ -10,15 +10,18 @@ saw::SymbolicAWEModel = SymbolicAWEModel(set) @test kps3 isa KiteUtils.AbstractKiteModel @test kps3.set isa KiteUtils.Settings @test isnothing(kps3.integrator) + @test kps3.am isa AtmosphericModel end @testset "KPS4 constructor interface" begin @test kps4 isa KiteUtils.AbstractKiteModel @test kps4.set isa KiteUtils.Settings @test isnothing(kps4.integrator) + @test kps4.am isa AtmosphericModel end @testset "SymbolicAWEModel constructor interface" begin @test saw isa KiteUtils.AbstractKiteModel @test saw.set isa KiteUtils.Settings @test isnothing(saw.integrator) + @test saw.am isa AtmosphericModel end nothing From ed73b6975b5fe8dcebfe70b9f0b3d7c231497b51 Mon Sep 17 00:00:00 2001 From: Uwe Fechner Date: Wed, 9 Jul 2025 07:47:12 +0200 Subject: [PATCH 10/15] More tests --- mwes/mwe_28.jl | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mwes/mwe_28.jl b/mwes/mwe_28.jl index e9f19dc74..b709ccfd0 100644 --- a/mwes/mwe_28.jl +++ b/mwes/mwe_28.jl @@ -11,17 +11,20 @@ saw::SymbolicAWEModel = SymbolicAWEModel(set) @test kps3.set isa KiteUtils.Settings @test isnothing(kps3.integrator) @test kps3.am isa AtmosphericModel + @test kps3.iter isa Int64 end @testset "KPS4 constructor interface" begin @test kps4 isa KiteUtils.AbstractKiteModel @test kps4.set isa KiteUtils.Settings @test isnothing(kps4.integrator) @test kps4.am isa AtmosphericModel + @test kps4.iter isa Int64 end @testset "SymbolicAWEModel constructor interface" begin @test saw isa KiteUtils.AbstractKiteModel @test saw.set isa KiteUtils.Settings @test isnothing(saw.integrator) @test saw.am isa AtmosphericModel + @test saw.iter isa Int64 end nothing From 677217c2e418aa46a4058e5fa6a3a760dc68aa62 Mon Sep 17 00:00:00 2001 From: Uwe Fechner Date: Wed, 9 Jul 2025 07:48:48 +0200 Subject: [PATCH 11/15] Add license --- mwes/mwe_28.jl | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mwes/mwe_28.jl b/mwes/mwe_28.jl index b709ccfd0..ed5ebd4d6 100644 --- a/mwes/mwe_28.jl +++ b/mwes/mwe_28.jl @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: 2025 Uwe Fechner +# SPDX-License-Identifier: MIT + using KiteModels, KiteUtils, Test set = load_settings("system.yaml") From 151f23b35bfad91a06f0fc8a2586894591d7a24a Mon Sep 17 00:00:00 2001 From: Uwe Fechner Date: Wed, 9 Jul 2025 07:58:30 +0200 Subject: [PATCH 12/15] Fix docu --- docs/src/types.md | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/src/types.md b/docs/src/types.md index 2cfa94078..faffcc9e6 100644 --- a/docs/src/types.md +++ b/docs/src/types.md @@ -9,7 +9,6 @@ CurrentModule = KiteModels SimFloat KVec3 SVec3 -AbstractKiteModel AKM ``` From 845dc833d5b06e6c83e44e318b4f71a94529f31f Mon Sep 17 00:00:00 2001 From: Uwe Fechner Date: Wed, 9 Jul 2025 07:58:46 +0200 Subject: [PATCH 13/15] Proper tests --- test/runtests.jl | 2 ++ mwes/mwe_28.jl => test/test_interface.jl | 0 2 files changed, 2 insertions(+) rename mwes/mwe_28.jl => test/test_interface.jl (100%) diff --git a/test/runtests.jl b/test/runtests.jl index cdc5e5721..92ef7faf6 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -37,5 +37,7 @@ KiteUtils.set_data_path("") println("--> 4") include("test_inertia_calculation.jl") println("--> 5") + include("test_interface.jl") + println("--> 6") include("aqua.jl") end \ No newline at end of file diff --git a/mwes/mwe_28.jl b/test/test_interface.jl similarity index 100% rename from mwes/mwe_28.jl rename to test/test_interface.jl From 24dfc4ac21b31a9f2dcc0df5fb0fdc164329c5e2 Mon Sep 17 00:00:00 2001 From: Uwe Fechner Date: Wed, 9 Jul 2025 08:10:06 +0200 Subject: [PATCH 14/15] Fix docu --- docs/src/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/src/index.md b/docs/src/index.md index c07c3367e..19ab607e0 100644 --- a/docs/src/index.md +++ b/docs/src/index.md @@ -83,7 +83,7 @@ times faster. - the documentation was improved ## Provides -The type [`AbstractKiteModel`](@ref) with the implementation [`KPS3`](@ref), [`KPS4`](@ref) and [`SymbolicAWEModel`](@ref), representing the one point, the four point kite model and the ram air kite model, together with the high level simulation interface consisting of the functions [`init_sim!`](@ref) and [`next_step!`](@ref). Other kite models can be added inside or outside of this package by implementing the non-generic methods required for an AbstractKiteModel. +The types [`KPS3`](@ref), [`KPS4`](@ref) and [`SymbolicAWEModel`](@ref), representing the one point, the four point kite model and the ram air kite model, together with the high level simulation interface consisting of the functions [`init_sim!`](@ref) and [`next_step!`](@ref). Other kite models can be added inside or outside of this package by implementing the non-generic methods required for an AbstractKiteModel. Additional functions to provide inputs and outputs of the model on each time step. In particular the constructor [`SysState`](@ref) can be called once per time step to create a SysState struct for logging or for displaying the state in a viewer. For the KPS3 and KPS4 model, once per time step the [`residual!`](@ref) function is called as many times as needed to find the solution at the end From b991acdb10032e6c75522e9c45933901d8c619f3 Mon Sep 17 00:00:00 2001 From: Uwe Fechner Date: Wed, 9 Jul 2025 11:33:00 +0200 Subject: [PATCH 15/15] Address comment --- test/test_interface.jl | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/test/test_interface.jl b/test/test_interface.jl index ed5ebd4d6..32c6fe83d 100644 --- a/test/test_interface.jl +++ b/test/test_interface.jl @@ -7,7 +7,7 @@ set = load_settings("system.yaml") kps3::KPS3 = KPS3(set) kps4::KPS4 = KPS4(set) set = load_settings("system_ram.yaml") -saw::SymbolicAWEModel = SymbolicAWEModel(set) +sam::SymbolicAWEModel = SymbolicAWEModel(set) @testset "KPS3 constructor interface" begin @test kps3 isa KiteUtils.AbstractKiteModel @@ -24,10 +24,10 @@ end @test kps4.iter isa Int64 end @testset "SymbolicAWEModel constructor interface" begin - @test saw isa KiteUtils.AbstractKiteModel - @test saw.set isa KiteUtils.Settings - @test isnothing(saw.integrator) - @test saw.am isa AtmosphericModel - @test saw.iter isa Int64 + @test sam isa KiteUtils.AbstractKiteModel + @test sam.set isa KiteUtils.Settings + @test isnothing(sam.integrator) + @test sam.am isa AtmosphericModel + @test sam.iter isa Int64 end nothing