@@ -575,7 +575,7 @@ function solve(solver::Solver, body_aero::BodyAerodynamics, gamma_distribution=n
575575end
576576
577577@inline @inbounds function calc_norm_array! (va_norm_dist, va_array)
578- for i in 1 : size (va_array, 1 )
578+ for i in axes (va_array, 1 )
579579 va_norm_dist[i] = sqrt (
580580 va_array[i,1 ]^ 2 + va_array[i,2 ]^ 2 +
581581 va_array[i,3 ]^ 2 )
584584
585585function solve_base! (solver:: Solver , body_aero:: BodyAerodynamics , gamma_distribution= nothing ;
586586 log= false , reference_point= solver. reference_point)
587+ reference_point
587588
588589 # check arguments
589590 isnothing (body_aero. panels[1 ]. va) && throw (ArgumentError (" Inflow conditions are not set, use set_va!(body_aero, va)" ))
@@ -759,17 +760,26 @@ function gamma_loop!(
759760 end
760761
761762 if solver. solver_type == NONLIN
762- if isnothing (solver. prob)
763+ prob = solver. prob
764+ if isnothing (prob)
763765 function f_nonlin! (d_gamma, gamma, p)
764766 calc_gamma_new! (solver. lr. gamma_new, gamma, p)
765767 d_gamma .= solver. lr. gamma_new .- gamma
766768 nothing
767769 end
768- solver . prob = NonlinearProblem (f_nonlin!, solver. lr. gamma_new, nothing )
769- solver. nonlin_cache = init (solver . prob, NewtonRaphson (autodiff = AutoFiniteDiff ()); abstol = solver . atol, reltol = solver . rtol)
770+ prob = NonlinearProblem (f_nonlin!, solver. lr. gamma_new, nothing )
771+ solver. prob = prob
770772 end
773+ prob = prob:: NonlinearProblem
774+
775+ nonlin_cache = solver. nonlin_cache
776+ if isnothing (nonlin_cache)
777+ nonlin_cache = init (prob, NewtonRaphson (autodiff= AutoFiniteDiff ()); abstol= solver. atol, reltol= solver. rtol)
778+ solver. nonlin_cache = nonlin_cache
779+ end
780+ nonlin_cache = nonlin_cache:: NonlinearSolveFirstOrder.GeneralizedFirstOrderAlgorithmCache
771781
772- sol = NonlinearSolve. solve! (solver . nonlin_cache)
782+ sol = NonlinearSolve. solve! (nonlin_cache)
773783 gamma .= sol. u
774784 solver. lr. gamma_new .= sol. u
775785 solver. lr. converged = SciMLBase. successful_retcode (sol)
@@ -792,13 +802,14 @@ function gamma_loop!(
792802 damp .= 0.0
793803 is_damping_applied = false
794804 end
795- nothing
805+ return is_damping_applied
796806 end
797807 iters = 0
808+ is_damping_applied = false
798809 for i in 1 : solver. max_iterations
799810 iters += 1
800811
801- f_loop! (solver. lr. gamma_new, gamma, damp)
812+ is_damping_applied = f_loop! (solver. lr. gamma_new, gamma, damp)
802813
803814 # Check convergence
804815 abs_gamma_new .= abs .(solver. lr. gamma_new)
@@ -808,7 +819,7 @@ function gamma_loop!(
808819 error = maximum (abs_gamma_new)
809820 normalized_error = error / reference_error
810821
811- @debug " Iteration: $i , normalized_error: $normalized_error , is_damping_applied: $is_damping_applied "
822+ @debug " Iteration: $i , normalized_error: $normalized_error "
812823
813824 if normalized_error < solver. rtol
814825 solver. lr. converged = true
0 commit comments