@@ -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