@@ -654,6 +654,85 @@ function solve_base!(solver::Solver, body_aero::BodyAerodynamics, gamma_distribu
654654 nothing
655655end
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