User Tools

Site Tools


code:qs_forces

<graphviz dot> digraph qs_forces { #splines=“ortho”; node [shape=box, width=4];

start [shape=ellipse, label=“qs_forces()”, width=1];

zero[label=“CALL zero_qs_force()”]; start → zero;

qs_energies[label=“CALL qs_energies(calc_forces=TRUE)”, URL=“http://cp2k.org/code:qs_energies”]; zero → qs_energies;

{

rank=same;
if_rtp [shape=diamond, label="RTP ?"];
do_rtp [label="Calc RTP forces", width=3];
if_rtp -> do_rtp [label="yes", minlen=1.5];

} qs_energies→if_rtp;

{

rank=same;
if_mulliken[shape=diamond, label="MULLIKEN_RESTR. ?", URL="http://manual.cp2k.org/trunk/CP2K_INPUT/FORCE_EVAL/DFT/QS/MULLIKEN_RESTRAINT.html"];
do_mulliken[label="CALL mulliken_restraint()", width=3];
if_mulliken -> do_mulliken [label="yes", minlen=1.5];

} if_rtp → if_mulliken [label=“no”, minlen=1]; do_rtp → if_mulliken [weight=0];

{

rank=same;
if_dft_u[shape=diamond, label="DFT+U ?", URL="http://manual.cp2k.org/trunk/CP2K_INPUT/FORCE_EVAL/SUBSYS/KIND/DFT_PLUS_U.html"];
do_dft_u[label="CALL plus_u(matrix_w)", width=3];
if_dft_u -> do_dft_u [label="yes", minlen=1.5];

} if_mulliken → if_dft_u [label=“no”, minlen=1]; do_mulliken → if_dft_u [weight=0];

core_matrix[label=“CALL build_core_matrix(calc_forces=TRUE)”]; if_dft_u → core_matrix [label=“no”, minlen=1]; do_dft_u → core_matrix [weight=0];

ks_update[label=“CALL qs_ks_update_qs_env(calc_forces=TRUE)”]; core_matrix → ks_update;

{

rank=same;
if_mp2[shape=diamond, label="MP2 ?", URL="http://manual.cp2k.org/trunk/CP2K_INPUT/ATOM/METHOD/XC/WF_CORRELATION.html"];
do_mp2[label="Calc MP2 forces", width=3];
if_mp2 -> do_mp2 [label="yes", minlen=1.5];

} ks_update → if_mp2;

{

rank=same;
if_admm[shape=diamond, label="ADMM-MO?"];
do_admm[label="CALL calc_aux_mo_derivs()\nCALL calc_mixed_overlap_force()", width=3];
if_admm -> do_admm[label="yes", minlen=1.5];

} if_mp2 → if_admm [label=“no”, minlen=1]; do_mp2 → if_admm [weight=0];

sum[label=“Sum all force contributions”]; if_admm → sum [label=“no”, minlen=1]; do_admm → sum [weight=0];

{

rank=same;
if_virial[shape=diamond, label="virial%pv_availability?"];
do_virial[label="Distribute virial", width=3];
if_virial -> do_virial[label="yes", minlen=1.5];

} sum → if_virial;

dealloc[label=“Dellocate W-matrix”]; if_virial → dealloc [label=“no”, minlen=1]; do_virial → dealloc [weight=0];

return [shape=ellipse, label=“RETURN”, width=1]; dealloc → return;

} </graphviz>

code/qs_forces.txt · Last modified: 2020/08/21 10:15 (external edit)