-
Notifications
You must be signed in to change notification settings - Fork 97
Description
This semester I have student (@elorannug) working on the direct minimization for scf and port it to Manopt.
In this issue I would like to check how to best continue. Before describing the current for of direct_minimization and a proposed new form, let's first state the main questions that I would like to discuss
Should the old method stay but be moved into an Optim.jl extension? That makes a new release at least only “mildly breaking”, a user has to load Optim and potentially Linesearches themselves.
The disadvantage is, if someone loads Optim and Manopt, both extensions have to work nicely together still.
What do you think @antoine-levitt ?
Current form
In the current scf/direct_minimization.jl the user has an easy interface based on a PlaneWaveInterface that allows to set the usual maxiter/tol stopping criteria, choose a solver from Optim and (optionally= provide a start point.
The only keyword I personally do not fully understand is alpha_guess – is that a function to have a good initial step size guess for the line search?
New form
The basis will stay the only mandatory parameter.
All existing kwargs would stay, we we just use them differently internally
Keyword arguments
stopping_criterion=will use the existingmaxiter/tolto introduce a default stopping criterion based on that, but a user could also provide their own one
one challenge might be that we currently have one that we do define ourselves – if that is only introduced in the extension, it would be quite private, and hence not so easy to use for an end user, but I think I know a tricksolver=provide anAbstractManoptSolverStateto specify which solver to usepeconditioner=a manopt preconditioner, especially when using LBFGS (there is also a second one its, type)manifold=specify whether to useStiefelorGrassmann; one could also allow for their Generalized (i.e. weighted) versionskwargs...can be used to decorate both problem and state, such thatdebug=and such would also work in this function call.
Since this requires both Manopt anf Manifolds, I would propose to do this in a DFTKManoptManifoldsExt.jl with the above keywords. It would still only be “mildly bearking” for end users.
Let me know what you think.