PrincetonUniversity / FOCUS

Flexible Optimized Coils Using Space curves
https://princetonuniversity.github.io/FOCUS/
GNU General Public License v3.0
16 stars 2 forks source link

New CG implemented and will be replaced #35

Open zhucaoxiang opened 5 years ago

zhucaoxiang commented 5 years ago

The current nonlinear conjugate gradient (CG) method was written by myself based on the strategy of Yuan & Dai. The line search subroutine is also written by myself based on Numerical Optimization. It is often observed un-converged line search. In the develop branch, FOCUS is linked to another well-written library, CG-descent. If you want to use the old version CG, just compile with PFLAGS='-D oldcg'.

Here is a test using the rotating ellipse. Solid lines are the CG-descent, and dashed lines the old CG.

  1. Convergence over iterations. image

  2. Convergence over wall-time. image

  3. Poincare plots from CG-descent image

  4. Poincare plots from old CG image

The testing results show that the CG-descent is much faster in speed. My guess is that I didn't implement a very good line search subroutine. So I will encourage everyone to test the CG-descent and will merge it into master after some time.

git fetch
git checkout develop
make clean; make xfocus; make dfocus
logan-nc commented 5 years ago

Thanks @zhucaoxiang. Do all the namelist settings work exactly as before or are there any changes we should be aware of as users?

zhucaoxiang commented 5 years ago

@logan-nc Yes, I think so. CG_maxiter will determine the maximum iteration. CG_wolfe_c1 and CG_wolfe_c2 are for line searches. The only difference is that the default value of CG_wolfe_c1 is now 0.1 (previously is 1E-4) and 0<CG_wolfe_c1<0.5. I have updated the examples in d3d and rotating ellipse.