From c1c3a839f8790963565f501726541026a137a0dd Mon Sep 17 00:00:00 2001 From: David Minton Date: Tue, 18 May 2021 13:56:31 -0400 Subject: [PATCH] Improved convergence with skewed objective function that weights excess energy more than not enough (helps keep it from finding v_r~0, which has a flat enough gradient to fool the minimizer). --- src/symba/symba_frag_pos.f90 | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/symba/symba_frag_pos.f90 b/src/symba/symba_frag_pos.f90 index 762ccf0d1..8a64454f8 100644 --- a/src/symba/symba_frag_pos.f90 +++ b/src/symba/symba_frag_pos.f90 @@ -655,7 +655,12 @@ function ke_objective_function(v_r_mag, v_r_unit, v_t_mag, v_t_unit, x_frag, m_f v_shift(:, i) = v_shift(:, i) + v_t_mag(i) * v_t_unit(:, i) + vcom(:) fval = fval + 0.5_DP * m_frag(i) * dot_product(v_shift(:, i), v_shift(:, i)) end do - fval = fval**4 + if (fval < 0.0_DP) then + fval = fval**8 + else + fval = fval**2 + end if + return