a simplier version of lsqr_solver where
the aprod function is provided internally.
To use, first call the initialize method
to set the matrix and other inputs.
Nodes of different colours represent the following:
Solid arrows point from a derived type to the parent type which it
extends. Dashed arrows point from a derived type to the other
types it contains as a components, with a label listing the name(s) of
said component(s).