Sorry for all the spam (let me know if I should write fewer issues) 😝
Here are some ideas for next steps. (Obviously, you have more experience, I'm happy to get advice). We could
For me, especially tests would be helpful as I don't have a good idea of what kind of inputs/interfaces we can assume.
For example, in the linear case, do we only assume a linear AbstractSciMLOperator? Do solvers need to be compatible with Duals? (or will the differentiation always be handled externally, like currently in adjoint.jl which seems mostly algorithm independent).
A few minor things:
Sorry for all the spam (let me know if I should write fewer issues) 😝
Here are some ideas for next steps. (Obviously, you have more experience, I'm happy to get advice). We could
init/solvestructureFor me, especially tests would be helpful as I don't have a good idea of what kind of inputs/interfaces we can assume.
For example, in the linear case, do we only assume a linear
AbstractSciMLOperator? Do solvers need to be compatible withDuals? (or will the differentiation always be handled externally, like currently inadjoint.jlwhich seems mostly algorithm independent).A few minor things:
u0, which is confusing since in the solution type it is calledz. Would it be an option to rename it toz0? On the other hand, for the mixed and nonlinear caseuis maybe a better variable name. So, one could either always call the unknownu(linear/mixed/nonlinear) or havez(for linear) andu(for mixed/nonlinear).error_estimatefor thePSORtype solvers. In general, it would be nice to have a common way to set the tolerance of an algorithm. Should it bereltol/abstolor just onetolparameter?residualfeels to be a bit ambiguous. Different algorithms might have different choices for the residuals (depending on the nonlinear functions). Should it returnNaNif an algorithm has no residual for an algorithm (like forPSOR) or should it be an error estimator in that case?