|
1 | 1 | using Distributed, Timers, Serialization, SharedArrays, StaticArrays |
2 | 2 | using Interpolations |
3 | 3 | using Xfoil |
4 | | -using ControlPlots |
5 | 4 | using Logging |
6 | 5 |
|
7 | 6 | const SPEED_OF_SOUND = 343 # [m/s] at 20 °C, see: https://en.wikipedia.org/wiki/Speed_of_sound |
|
133 | 132 | return lower_trailing_edge, upper_trailing_edge |
134 | 133 | end |
135 | 134 |
|
136 | | - function replace_nan!(matrix) |
137 | | - rows, cols = size(matrix) |
138 | | - distance = max(rows, cols) |
139 | | - for i in 1:rows |
140 | | - for j in 1:cols |
141 | | - if isnan(matrix[i, j]) |
142 | | - neighbors = [] |
143 | | - for d in 1:distance |
144 | | - found = false |
145 | | - if i-d >= 1 && !isnan(matrix[i-d, j]); |
146 | | - push!(neighbors, matrix[i-d, j]) |
147 | | - found = true |
148 | | - end |
149 | | - if i+d <= rows && !isnan(matrix[i+d, j]) |
150 | | - push!(neighbors, matrix[i+d, j]) |
151 | | - found = true |
152 | | - end |
153 | | - if j-d >= 1 && !isnan(matrix[i, j-d]) |
154 | | - push!(neighbors, matrix[i, j-d]) |
155 | | - found = true |
156 | | - end |
157 | | - if j+d <= cols && !isnan(matrix[i, j+d]) |
158 | | - push!(neighbors, matrix[i, j+d]) |
159 | | - found = true |
160 | | - end |
161 | | - if found; break; end |
162 | | - end |
163 | | - if !isempty(neighbors) |
164 | | - matrix[i, j] = sum(neighbors) / length(neighbors) |
165 | | - end |
166 | | - end |
167 | | - end |
168 | | - end |
169 | | - return nothing |
170 | | - end |
171 | | - |
172 | 135 | kite_speed = v_wind |
173 | 136 | chord_length = area / width |
174 | 137 | local reynolds_number = kite_speed * chord_length / KINEMATIC_VISCOSITY # https://en.wikipedia.org/wiki/Reynolds_number |
@@ -208,40 +171,12 @@ try |
208 | 171 | cd_matrix = Matrix{Float64}(cd_matrix) |
209 | 172 | cm_matrix = Matrix{Float64}(cm_matrix) |
210 | 173 |
|
| 174 | + println("Generated lift matrix:") |
211 | 175 | display(cl_matrix) |
212 | | - |
213 | | - function plot_values(alphas, d_trailing_edge_angles, matrix, interp, name) |
214 | | - fig = plt.figure() |
215 | | - ax = fig.add_subplot(projection="3d") |
216 | | - |
217 | | - X_data = collect(d_trailing_edge_angles) .+ zeros(length(alphas))' |
218 | | - Y_data = collect(alphas)' .+ zeros(length(d_trailing_edge_angles)) |
219 | | - |
220 | | - matrix = Matrix{Float64}(matrix) |
221 | | - interp_matrix = zeros(size(matrix)...) |
222 | | - int_alphas, int_d_trailing_edge_angles = alphas .+ deg2rad(0.5), d_trailing_edge_angles .+ deg2rad(0.5) |
223 | | - interp_matrix .= [interp(alpha, d_trailing_edge_angle) for alpha in int_alphas, d_trailing_edge_angle in int_d_trailing_edge_angles] |
224 | | - X_int = collect(int_d_trailing_edge_angles) .+ zeros(length(int_alphas))' |
225 | | - Y_int = collect(int_alphas)' .+ zeros(length(int_d_trailing_edge_angles)) |
226 | | - |
227 | | - ax.plot_wireframe(X_data, Y_data, matrix, edgecolor="royalblue", lw=0.5, rstride=5, cstride=5, alpha=0.6) |
228 | | - ax.plot_wireframe(X_int, Y_int, interp_matrix, edgecolor="orange", lw=0.5, rstride=5, cstride=5, alpha=0.6) |
229 | | - plt.xlabel("Alpha") |
230 | | - plt.ylabel("Flap angle") |
231 | | - plt.zlabel("$name values") |
232 | | - plt.title("$name for different d_flap and angle") |
233 | | - plt.legend() |
234 | | - plt.grid(true) |
235 | | - plt.show() |
236 | | - end |
237 | | - |
238 | | - cl_interp = extrapolate(scale(interpolate(cl_matrix, BSpline(Linear())), alphas, d_trailing_edge_angles), NaN) |
239 | | - cd_interp = extrapolate(scale(interpolate(cd_matrix, BSpline(Linear())), alphas, d_trailing_edge_angles), NaN) |
240 | | - cm_interp = extrapolate(scale(interpolate(cm_matrix, BSpline(Linear())), alphas, d_trailing_edge_angles), NaN) |
241 | | - |
242 | | - plot_values(alphas, d_trailing_edge_angles, cl_matrix, cl_interp, "Cl") |
243 | | - plot_values(alphas, d_trailing_edge_angles, cd_matrix, cd_interp, "Cd") |
244 | | - plot_values(alphas, d_trailing_edge_angles, cm_matrix, cm_interp, "Cm") |
| 176 | + println("Generated drag matrix:") |
| 177 | + display(cd_matrix) |
| 178 | + println("Generated moment matrix:") |
| 179 | + display(cm_matrix) |
245 | 180 |
|
246 | 181 | @info "Relative trailing_edge height: $(upper - lower)" |
247 | 182 | @info "Reynolds number for flying speed of $kite_speed is $reynolds_number" |
|
0 commit comments