This is an old revision of the document!
<graphviz dot> digraph ls_scf {
splines="ortho";
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="S-Preconditioner?", URL="http://manual.cp2k.org/trunk/CP2K_INPUT/FORCE_EVAL/DFT/LS_SCF.html#list_S_PRECONDITIONER"]; do_precon_ks [label="Precondition KS-matrix", 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 KS-matrix with EPS_FILTER”, URL=“http://manual.cp2k.org/trunk/CP2K_INPUT/FORCE_EVAL/DFT/LS_SCF.html#desc_EPS_FILTER”] if_precon_ks → do_filter_ks[label=“no”]; do_precon_ks → do_filter_ks[weight=0];
{
rank=same; if_curvy [shape=diamond, label="CURVY_STEPS and\npurified matrix-P exits?", URL="http://manual.cp2k.org/trunk/CP2K_INPUT/FORCE_EVAL/DFT/LS_SCF/CURVY_STEPS.html"]; 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[label=“no”];
{
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=“PURIFICATION_METHOD?”, URL=“http://manual.cp2k.org/trunk/CP2K_INPUT/FORCE_EVAL/DFT/LS_SCF.html#desc_PURIFICATION_METHOD”]; if_trans → select_method[label=“no”];
{
rank=same; dm_sign[label="CALL density_matrix_sign()"]; dm_tc2[label="CALL density_matrix_tc2()"]; dm_trs4[label="CALL density_matrix_trs4()"];
} select_method → dm_sign [label=“SIGN_MATRIX”]; select_method → dm_tc2 [label=“TC2”]; select_method → dm_trs4 [label=“TRS4”];
{
rank=same; if_precon_p [shape=diamond, label="S-Preconditioner?", URL="http://manual.cp2k.org/trunk/CP2K_INPUT/FORCE_EVAL/DFT/LS_SCF.html#list_S_PRECONDITIONER"]; do_precon_p [label="Precondition P-matrix", 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 P-matrix with EPS_FILTER”, URL=“http://manual.cp2k.org/trunk/CP2K_INPUT/FORCE_EVAL/DFT/LS_SCF.html#desc_EPS_FILTER”] if_precon_p → do_filter_p[label=“no”]; 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_curvy → do_dm_to_ks[weight=0]; do_trans → do_dm_to_ks[weight=0];
if_converged[shape=diamond, label=“Converged?”] do_dm_to_ks → if_converged; do_qs_to_ls → if_converged[dir=back, weight=0];
do_post [label=“CALL ls_scf_post()”]; if_converged → do_post [label=“yes”];
return [shape=ellipse, label=“RETURN”]; do_post → return;
} </graphviz>