This is an old revision of the document!
<graphviz dot> digraph ls_scf { start [shape=ellipse, label=“ls_scf()”];
node [shape=box, width=3];
do_init [label=“CALL ls_scf_init_scf()”]; start → do_init;
do_qs_to_ls[label=“CALL matrix_qs_to_ls()”] do_init → do_qs_to_ls;
{
rank=same; if_precon_ks [shape=diamond, label="preconditioner?"]; do_precon_ks [label="Precondition matrix_ks", width=4]; if_precon_ks -> do_precon_ks [label="yes", minlen=1.5];
} do_qs_to_ls → if_precon_ks;
do_filter_ks[label=“Filer matrix_KS with eps_filer”] if_precon_ks → do_filter_ks; do_precon_ks → do_filter_ks[weight=0];
{
rank=same; if_curvy [shape=diamond, label="curvy? and purifyied DM exits"]; do_curvy [label="CALL dm_ls_curvy_optimization()", width=4]; if_curvy -> do_curvy [label="yes", minlen=1.5];
} do_filter_ks → if_curvy;
do_mixing; if_curvy → do_mixing;
{
rank=same; if_trans [shape=diamond, label="transport?"]; do_trans [label="CALL external_scf_method()", width=4]; if_trans -> do_trans [label="yes", minlen=1.5];
} do_mixing → if_trans;
select_method[shape=diamond, label=“METHOD?”]; if_trans → select_method;
{
rank=same; dm_sign; dm_tc2; dm_trs4;
} select_method → dm_sign; select_method → dm_tc2; select_method → dm_trs4;
{
rank=same; if_precon_p [shape=diamond, label="preconditioner?"]; do_precon_p [label="Precondition matrix_p", width=4]; if_precon_p -> do_precon_p [label="yes", minlen=1.5];
}
dm_sign → if_precon_p; dm_tc2 → if_precon_p; dm_trs4 → if_precon_p;
do_filter_p[label=“Filter matrix_p”] if_precon_p → do_filter_p; do_precon_p → do_filter_p[weight=0];
do_dm_to_ks[label=“CALL ls_scf_dm_to_ks()”]
do_filter_p → do_dm_to_ks;
do_post [label=“CALL ls_scf_post()”]; do_dm_to_ks → do_post;
return [shape=ellipse, label=“RETURN”]; do_post → return;
} </graphviz>