Skip to content

Commit b3b7a57

Browse files
committed
Next try
1 parent 103a694 commit b3b7a57

1 file changed

Lines changed: 56 additions & 100 deletions

File tree

src/solver.jl

Lines changed: 56 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -698,60 +698,65 @@ function gamma_loop!(
698698
velocity_view_y = @view induced_velocity_all[:, 2]
699699
velocity_view_z = @view induced_velocity_all[:, 3]
700700

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+
701755
if solver.solver_type == NONLIN
702756
prob = solver.prob
703757
if isnothing(prob)
704758
function f_nonlin!(d_gamma, gamma, _p)
705-
mul!(velocity_view_x, AIC_x, gamma)
706-
mul!(velocity_view_y, AIC_y, gamma)
707-
mul!(velocity_view_z, AIC_z, gamma)
708-
709-
relative_velocity_array .= va_array .+ induced_velocity_all
710-
@inbounds for i in 1:n_panels
711-
ax = relative_velocity_array[i,1]
712-
ay = relative_velocity_array[i,2]
713-
az = relative_velocity_array[i,3]
714-
bx = y_airf_array[i,1]
715-
by = y_airf_array[i,2]
716-
bz = y_airf_array[i,3]
717-
relative_velocity_crossz[i,1] = ay*bz - az*by
718-
relative_velocity_crossz[i,2] = az*bx - ax*bz
719-
relative_velocity_crossz[i,3] = ax*by - ay*bx
720-
ax = va_array[i,1]
721-
ay = va_array[i,2]
722-
az = va_array[i,3]
723-
v_acrossz_array[i,1] = ay*bz - az*by
724-
v_acrossz_array[i,2] = az*bx - ax*bz
725-
v_acrossz_array[i,3] = ax*by - ay*bx
726-
end
727-
728-
@inbounds for i in 1:n_panels
729-
v_normal_array[i] =
730-
z_airf_array[i,1]*relative_velocity_array[i,1] +
731-
z_airf_array[i,2]*relative_velocity_array[i,2] +
732-
z_airf_array[i,3]*relative_velocity_array[i,3]
733-
v_tangential_array[i] =
734-
x_airf_array[i,1]*relative_velocity_array[i,1] +
735-
x_airf_array[i,2]*relative_velocity_array[i,2] +
736-
x_airf_array[i,3]*relative_velocity_array[i,3]
737-
end
738-
solver.lr.alpha_dist .= atan.(v_normal_array, v_tangential_array)
739-
740-
@inbounds for i in 1:n_panels
741-
solver.lr.v_a_dist[i] = sqrt(
742-
relative_velocity_crossz[i,1]^2 +
743-
relative_velocity_crossz[i,2]^2 +
744-
relative_velocity_crossz[i,3]^2)
745-
va_magw_array[i] = sqrt(
746-
v_acrossz_array[i,1]^2 +
747-
v_acrossz_array[i,2]^2 +
748-
v_acrossz_array[i,3]^2)
749-
end
750-
751-
for (i, (panel, alpha)) in enumerate(zip(panels, solver.lr.alpha_dist))
752-
cl_dist[i] = calculate_cl(panel, alpha)
753-
end
754-
solver.lr.gamma_new .= 0.5 .* solver.lr.v_a_dist.^2 ./ va_magw_array .* cl_dist .* chord_array
759+
update_gamma_candidate!(solver.lr.gamma_new, gamma)
755760
d_gamma .= solver.lr.gamma_new .- gamma
756761
nothing
757762
end
@@ -781,56 +786,7 @@ function gamma_loop!(
781786
if solver.solver_type == LOOP
782787
function f_loop!(gamma_new, gamma, damp)
783788
gamma .= gamma_new
784-
mul!(velocity_view_x, AIC_x, gamma)
785-
mul!(velocity_view_y, AIC_y, gamma)
786-
mul!(velocity_view_z, AIC_z, gamma)
787-
788-
relative_velocity_array .= va_array .+ induced_velocity_all
789-
@inbounds for i in 1:n_panels
790-
ax = relative_velocity_array[i,1]
791-
ay = relative_velocity_array[i,2]
792-
az = relative_velocity_array[i,3]
793-
bx = y_airf_array[i,1]
794-
by = y_airf_array[i,2]
795-
bz = y_airf_array[i,3]
796-
relative_velocity_crossz[i,1] = ay*bz - az*by
797-
relative_velocity_crossz[i,2] = az*bx - ax*bz
798-
relative_velocity_crossz[i,3] = ax*by - ay*bx
799-
ax = va_array[i,1]
800-
ay = va_array[i,2]
801-
az = va_array[i,3]
802-
v_acrossz_array[i,1] = ay*bz - az*by
803-
v_acrossz_array[i,2] = az*bx - ax*bz
804-
v_acrossz_array[i,3] = ax*by - ay*bx
805-
end
806-
807-
@inbounds for i in 1:n_panels
808-
v_normal_array[i] =
809-
z_airf_array[i,1]*relative_velocity_array[i,1] +
810-
z_airf_array[i,2]*relative_velocity_array[i,2] +
811-
z_airf_array[i,3]*relative_velocity_array[i,3]
812-
v_tangential_array[i] =
813-
x_airf_array[i,1]*relative_velocity_array[i,1] +
814-
x_airf_array[i,2]*relative_velocity_array[i,2] +
815-
x_airf_array[i,3]*relative_velocity_array[i,3]
816-
end
817-
solver.lr.alpha_dist .= atan.(v_normal_array, v_tangential_array)
818-
819-
@inbounds for i in 1:n_panels
820-
solver.lr.v_a_dist[i] = sqrt(
821-
relative_velocity_crossz[i,1]^2 +
822-
relative_velocity_crossz[i,2]^2 +
823-
relative_velocity_crossz[i,3]^2)
824-
va_magw_array[i] = sqrt(
825-
v_acrossz_array[i,1]^2 +
826-
v_acrossz_array[i,2]^2 +
827-
v_acrossz_array[i,3]^2)
828-
end
829-
830-
for (i, (panel, alpha)) in enumerate(zip(panels, solver.lr.alpha_dist))
831-
cl_dist[i] = calculate_cl(panel, alpha)
832-
end
833-
gamma_new .= 0.5 .* solver.lr.v_a_dist.^2 ./ va_magw_array .* cl_dist .* chord_array
789+
update_gamma_candidate!(gamma_new, gamma)
834790
# Update gamma with relaxation and damping
835791
@. gamma_new = (1 - relaxation_factor) * gamma +
836792
relaxation_factor * gamma_new + damp

0 commit comments

Comments
 (0)