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 existing maxiter/tol to 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 trick
solver= provide an AbstractManoptSolverState to specify which solver to use
peconditioner= a manopt preconditioner, especially when using LBFGS (there is also a second one its, type)
manifold= specify whether to use Stiefel or Grassmann; one could also allow for their Generalized (i.e. weighted) versions
kwargs... can be used to decorate both problem and state, such that debug= 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.
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_minimizationand a proposed new form, let's first state the main questions that I would like to discussShould the old method stay but be moved into an
Optim.jlextension? 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.jlthe user has an easy interface based on aPlaneWaveInterfacethat allows to set the usualmaxiter/tolstopping 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
basiswill 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 oneone 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 trick
solver=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.jlwith the above keywords. It would still only be “mildly bearking” for end users.Let me know what you think.