Skip to content

Commit 9e8d381

Browse files
committed
Avoid closure
1 parent b3b7a57 commit 9e8d381

1 file changed

Lines changed: 131 additions & 56 deletions

File tree

src/solver.jl

Lines changed: 131 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -654,6 +654,85 @@ function solve_base!(solver::Solver, body_aero::BodyAerodynamics, gamma_distribu
654654
nothing
655655
end
656656

657+
@inline function update_gamma_candidate!(
658+
gamma_out,
659+
gamma_in,
660+
solver::Solver,
661+
panels::Vector{Panel},
662+
n_panels::Int,
663+
AIC_x,
664+
AIC_y,
665+
AIC_z,
666+
velocity_view_x,
667+
velocity_view_y,
668+
velocity_view_z,
669+
va_array,
670+
induced_velocity_all,
671+
relative_velocity_array,
672+
y_airf_array,
673+
relative_velocity_crossz,
674+
v_acrossz_array,
675+
z_airf_array,
676+
x_airf_array,
677+
v_normal_array,
678+
v_tangential_array,
679+
va_magw_array,
680+
cl_dist,
681+
chord_array,
682+
)
683+
mul!(velocity_view_x, AIC_x, gamma_in)
684+
mul!(velocity_view_y, AIC_y, gamma_in)
685+
mul!(velocity_view_z, AIC_z, gamma_in)
686+
687+
relative_velocity_array .= va_array .+ induced_velocity_all
688+
@inbounds for i in 1:n_panels
689+
ax = relative_velocity_array[i,1]
690+
ay = relative_velocity_array[i,2]
691+
az = relative_velocity_array[i,3]
692+
bx = y_airf_array[i,1]
693+
by = y_airf_array[i,2]
694+
bz = y_airf_array[i,3]
695+
relative_velocity_crossz[i,1] = ay*bz - az*by
696+
relative_velocity_crossz[i,2] = az*bx - ax*bz
697+
relative_velocity_crossz[i,3] = ax*by - ay*bx
698+
ax = va_array[i,1]
699+
ay = va_array[i,2]
700+
az = va_array[i,3]
701+
v_acrossz_array[i,1] = ay*bz - az*by
702+
v_acrossz_array[i,2] = az*bx - ax*bz
703+
v_acrossz_array[i,3] = ax*by - ay*bx
704+
end
705+
706+
@inbounds for i in 1:n_panels
707+
v_normal_array[i] =
708+
z_airf_array[i,1]*relative_velocity_array[i,1] +
709+
z_airf_array[i,2]*relative_velocity_array[i,2] +
710+
z_airf_array[i,3]*relative_velocity_array[i,3]
711+
v_tangential_array[i] =
712+
x_airf_array[i,1]*relative_velocity_array[i,1] +
713+
x_airf_array[i,2]*relative_velocity_array[i,2] +
714+
x_airf_array[i,3]*relative_velocity_array[i,3]
715+
end
716+
solver.lr.alpha_dist .= atan.(v_normal_array, v_tangential_array)
717+
718+
@inbounds for i in 1:n_panels
719+
solver.lr.v_a_dist[i] = sqrt(
720+
relative_velocity_crossz[i,1]^2 +
721+
relative_velocity_crossz[i,2]^2 +
722+
relative_velocity_crossz[i,3]^2)
723+
va_magw_array[i] = sqrt(
724+
v_acrossz_array[i,1]^2 +
725+
v_acrossz_array[i,2]^2 +
726+
v_acrossz_array[i,3]^2)
727+
end
728+
729+
for (i, (panel, alpha)) in enumerate(zip(panels, solver.lr.alpha_dist))
730+
cl_dist[i] = calculate_cl(panel, alpha)
731+
end
732+
gamma_out .= 0.5 .* solver.lr.v_a_dist.^2 ./ va_magw_array .* cl_dist .* chord_array
733+
return nothing
734+
end
735+
657736
"""
658737
gamma_loop!(solver::Solver, AIC_x::Matrix{Float64},
659738
AIC_y::Matrix{Float64}, AIC_z::Matrix{Float64},
@@ -698,65 +777,36 @@ function gamma_loop!(
698777
velocity_view_y = @view induced_velocity_all[:, 2]
699778
velocity_view_z = @view induced_velocity_all[:, 3]
700779

701-
function update_gamma_candidate!(gamma_out, gamma_in)
702-
mul!(velocity_view_x, AIC_x, gamma_in)
703-
mul!(velocity_view_y, AIC_y, gamma_in)
704-
mul!(velocity_view_z, AIC_z, gamma_in)
705-
706-
relative_velocity_array .= va_array .+ induced_velocity_all
707-
@inbounds for i in 1:n_panels
708-
ax = relative_velocity_array[i,1]
709-
ay = relative_velocity_array[i,2]
710-
az = relative_velocity_array[i,3]
711-
bx = y_airf_array[i,1]
712-
by = y_airf_array[i,2]
713-
bz = y_airf_array[i,3]
714-
relative_velocity_crossz[i,1] = ay*bz - az*by
715-
relative_velocity_crossz[i,2] = az*bx - ax*bz
716-
relative_velocity_crossz[i,3] = ax*by - ay*bx
717-
ax = va_array[i,1]
718-
ay = va_array[i,2]
719-
az = va_array[i,3]
720-
v_acrossz_array[i,1] = ay*bz - az*by
721-
v_acrossz_array[i,2] = az*bx - ax*bz
722-
v_acrossz_array[i,3] = ax*by - ay*bx
723-
end
724-
725-
@inbounds for i in 1:n_panels
726-
v_normal_array[i] =
727-
z_airf_array[i,1]*relative_velocity_array[i,1] +
728-
z_airf_array[i,2]*relative_velocity_array[i,2] +
729-
z_airf_array[i,3]*relative_velocity_array[i,3]
730-
v_tangential_array[i] =
731-
x_airf_array[i,1]*relative_velocity_array[i,1] +
732-
x_airf_array[i,2]*relative_velocity_array[i,2] +
733-
x_airf_array[i,3]*relative_velocity_array[i,3]
734-
end
735-
solver.lr.alpha_dist .= atan.(v_normal_array, v_tangential_array)
736-
737-
@inbounds for i in 1:n_panels
738-
solver.lr.v_a_dist[i] = sqrt(
739-
relative_velocity_crossz[i,1]^2 +
740-
relative_velocity_crossz[i,2]^2 +
741-
relative_velocity_crossz[i,3]^2)
742-
va_magw_array[i] = sqrt(
743-
v_acrossz_array[i,1]^2 +
744-
v_acrossz_array[i,2]^2 +
745-
v_acrossz_array[i,3]^2)
746-
end
747-
748-
for (i, (panel, alpha)) in enumerate(zip(panels, solver.lr.alpha_dist))
749-
cl_dist[i] = calculate_cl(panel, alpha)
750-
end
751-
gamma_out .= 0.5 .* solver.lr.v_a_dist.^2 ./ va_magw_array .* cl_dist .* chord_array
752-
return nothing
753-
end
754-
755780
if solver.solver_type == NONLIN
756781
prob = solver.prob
757782
if isnothing(prob)
758783
function f_nonlin!(d_gamma, gamma, _p)
759-
update_gamma_candidate!(solver.lr.gamma_new, gamma)
784+
update_gamma_candidate!(
785+
solver.lr.gamma_new,
786+
gamma,
787+
solver,
788+
panels,
789+
n_panels,
790+
AIC_x,
791+
AIC_y,
792+
AIC_z,
793+
velocity_view_x,
794+
velocity_view_y,
795+
velocity_view_z,
796+
va_array,
797+
induced_velocity_all,
798+
relative_velocity_array,
799+
y_airf_array,
800+
relative_velocity_crossz,
801+
v_acrossz_array,
802+
z_airf_array,
803+
x_airf_array,
804+
v_normal_array,
805+
v_tangential_array,
806+
va_magw_array,
807+
cl_dist,
808+
chord_array,
809+
)
760810
d_gamma .= solver.lr.gamma_new .- gamma
761811
nothing
762812
end
@@ -786,7 +836,32 @@ function gamma_loop!(
786836
if solver.solver_type == LOOP
787837
function f_loop!(gamma_new, gamma, damp)
788838
gamma .= gamma_new
789-
update_gamma_candidate!(gamma_new, gamma)
839+
update_gamma_candidate!(
840+
gamma_new,
841+
gamma,
842+
solver,
843+
panels,
844+
n_panels,
845+
AIC_x,
846+
AIC_y,
847+
AIC_z,
848+
velocity_view_x,
849+
velocity_view_y,
850+
velocity_view_z,
851+
va_array,
852+
induced_velocity_all,
853+
relative_velocity_array,
854+
y_airf_array,
855+
relative_velocity_crossz,
856+
v_acrossz_array,
857+
z_airf_array,
858+
x_airf_array,
859+
v_normal_array,
860+
v_tangential_array,
861+
va_magw_array,
862+
cl_dist,
863+
chord_array,
864+
)
790865
# Update gamma with relaxation and damping
791866
@. gamma_new = (1 - relaxation_factor) * gamma +
792867
relaxation_factor * gamma_new + damp

0 commit comments

Comments
 (0)